开发者社区> 问答> 正文

java生成jsp静态页面时#造成错误?报错

我用java替换jsp模板占位符,并生成JSP具体页面时,发现一个问题,只要是要生成的内容中包含#{}的内容,替换后,再访问这个页面就会报错。

数据库中的要替换jsp占位符的content内容如下:

#{sdfsd}

代码如下,功能是将content的内容替换jsp页面中的'###content###'占位符:

String content = htmlToText(blog.getBlogContent());
templateContent = templateContent.replaceAll("###content###",content);

htmlToText方法代码如下:

/**
 * 转义#和$
 * @param str  要转义的内容  add by www.blog-china.cn
 * @return
 */
privateString htmlToText(String str) {
    String [] regExStrs = {"#","\\u0024"};
    str = str.replaceAll(regExStrs[0],"\\\\#");
    str = str.replaceAll(regExStrs[1],"\\\\u0024");
    returnstr;
}
<p>
	<br>
</p>
<p>
	<br>
</p>

项目代码生成的过程中不报错,但是当访问这个生成的Jsp页面时,就会报如下的错误:

org.apache.jasper.JasperException: /WEB-INF/blog_file/guopengfei/1/1477405966557.jsp (line:14, column:9) #{...} is not allowed in template text
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
<p>
	<br>
</p>
<p>
	<br>
</p>


急求大神如何解决将包含#{}的内容转义?注意,要替换的内容中不管包含任何内容,都不应该被解析,比如即使要替换的内容包含#{userName}、或者${userName   }等类似的el表达式字符串,生成的jsp页面也不应该在解析成一个el表达式,而是鸳鸯输出 #{userName}、或者${userName  } 字符。

展开
收起
爱吃鱼的程序员 2020-06-08 21:00:47 677 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    1、JSP头上加个 <%@page  isELIgnored="true" %>

    2、可以在springmvc视图渲染的时候,将不需要解析JSP或者freemark或者velocity的,返回视图到jspf或者html。区别开解析引擎。

    回复 @留在青山:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"deferredSyntaxAllowedAsLiteral="true"%>试试。而且更主要的问题是问什么Jsp页面会解析#{}?它不是解析${}的吗?我的那个jsp页面源码中,固有的el表达式是需要解析的,只是通过java替换的这部分不让解析,这个该如何解决?
    2020-06-08 21:01:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载