JSP通用文件内容展示异常:XML、WSF文件无法正常显示
解决JSP页面展示XML/WSF文件内容异常的问题
问题根源
- HTML解析冲突:XML和WSF文件中的标签(如
<job id="script">)会被浏览器当作HTML标签解析,导致原本的文件内容被隐藏,看起来像是只显示空格。 - 编码不匹配:当前代码的
InputStreamReader未指定文件编码,使用系统默认编码读取XML/WSF文件时,可能出现乱码或读取到空内容的情况。 - 冗余类信息输出:
line.getClass()会输出class java.lang.String,浏览器渲染后显示为“String”,属于无意义的冗余输出。
修复方案
1. 对文件内容做HTML转义
将文件中的特殊字符(<、>、&、"等)转换为HTML实体,避免浏览器把XML标签当成HTML解析。可以手动实现转义逻辑,或借助工具库简化操作。
2. 指定文件编码
根据XML/WSF文件的实际编码(通常为UTF-8或GBK),在InputStreamReader中明确指定编码,确保读取内容准确。
3. 优化代码结构
- 先判断文件是否存在,再打开输入流,避免文件不存在时抛出IO异常。
- 使用try-with-resources语法自动关闭流,无需手动调用
close(),防止资源泄漏。
修改后的代码示例
<%@ page import="java.io.*" %> <% String strPath = "你的文件路径"; // 替换为实际文件路径 File file = new File(strPath); out.println("Log file: " + strPath + "<br>"); if (!file.exists()) { out.println("File does not exist"); } else { // 指定文件编码,这里以UTF-8为例,可根据实际文件编码调整 try (InputStream inputStream = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) { String line; while ((line = reader.readLine()) != null) { // 手动实现HTML转义,避免XML标签被浏览器解析 String escapedLine = line.replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'"); out.println(escapedLine + "<br>"); } } catch (IOException e) { out.println("读取文件出错: " + e.getMessage()); } } %>
可选优化
如果项目中已引入Apache Commons Lang库,可直接使用StringEscapeUtils.escapeHtml4()替代手动转义,简化代码:
<%@ page import="org.apache.commons.lang3.StringEscapeUtils" %> // ... out.println(StringEscapeUtils.escapeHtml4(line) + "<br>"); // ...
内容的提问来源于stack exchange,提问作者Travis Heeter
相关产品推荐
相关产品推荐

