tomcat基础知识——jsp访问错误(一)

一、错误重现

开发中,有时候我们会遇到tomcat部署项目时,访问某个页面出现如下错误。

Attribute value view.getItems("SendAcctList") is quoted with " which must be escaped when used  which must be esca

或者是Attribute value request.getParameter("name") is quoted with " which must be esca,今天部署一个比较老的项目时遇到了这个问题,我使用的是tomcat6.0,在网上查阅相关资料后,发现造成这个问题是jsp页面中包含有双引号包含双引号的地方,在tomcat升级到6.0之后,就会出现问题,之前的版本不会出现该问题。


二、错误发生位置及解决方案

(1)、发生问题位置 <t:radio name="FD_PayAcc"value="<%=view.getItems("SendAcctList")%>"defaultValue="<%=view.getValueNull("FD_PayAcc")%>"/>

(2)错误产生的原因:是因为tomcat版本升级后(6.0以后),对双引号的处理机制引起的,如果出现双引号包含双引号的情况,就可能会出现这个错误。

(3)、解决方案:

a、修改双引号包含双引号处,改为单引号包含双引号。

value="<%=view.getItems("SendAcctList")%>" 改为value='<%=view.getItems("SendAcctList")%>'

b、在a的方案中会出现一个问题,如果项目中几十个页面都是双引号包含双引号,怎么办?难道我们要一一修改吗?这样下来,也是比较麻烦的事情!
于是查询tomcat文档,里边关于解析jsp页面时,有一段话:

“Iffalsethe requirements for escaping quotes in JSP attributes will be relaxed so that an unescaped quote will not cause an error.

If not specified, the specification compliant default oftruewill be used.” 具体大意是:如果要求在jsp中escaping属性的值为false,那么转义引号将不会导致错误,如果没有指定该属性,将会使用规范兼容的默认值true。这个描述针对的是tomact的org.apache.jasper.compiler. Parser.STRICT_QUOTE_ESCAPING属性,因此,只需在tomcat启动时将这个属性设为false就可以解决这个问题。那么怎么将这个属性设置到tomcat的system属性中呢,这里介绍两个办法:

(1)、利用tomcat启动的执行脚本,在执行过程中调用setenv.sh,在其中设置环境变量,如:JAVA_OPTS=%JAVA_OPTS%: -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false。

(2)、在tomcat文件夹下找到conf/catalina.properties文件,在最后添加org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false ,重启tomcat就可以了,我使用的就是这种方法。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/spring_model/article/details/54580510
个人分类: Tomcat服务器
上一篇XML基础知识——使用schema校验XML文件合法性(四)
下一篇MySQL错误——无法读表(MySQL 1018 error)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭