tomcat5.5以上版本对于页面标签属性value中的引号需要转译

今天接了个同事的半成品网站需要继续完成,熟悉网站的时候出现了以下错误

org.apache.jasper.JasperException: /jsp/index_f_left.jsp(135,84) Attribute value new Integer[] {Integer.valueOf((String)db.get("id"))} is quoted with " which must be escaped when used within the value
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
	org.apache.jasper.compiler.Parser.parseQuoted(Parser.java:301)
	org.apache.jasper.compiler.Parser.parseAttributeValue(Parser.java:250)
	org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:212)
	org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:155)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1252)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
	org.apache.jasper.compiler.Parser.parse(Parser.java:138)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:154)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
	org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

 错误原因是同事使用Tomcat5.0,我使用的是Tomcat6.0,后来测试,Tomcat5.5及Tocmcat6.0对于页面标签的属性value中的引号需要使用"\"转译。

例如,Tomcat5.0中以下写法没有问题

variables="<%=new Integer[] {Integer.valueOf((String)db.get("id"))}%>"

 而在Tomcat5.5及Tomcat6.0中需要这样的写法

variables="<%=new Integer[] {Integer.valueOf((String)db.get(\"id\"))}%>"
 

 

 

你可能感兴趣的:(java,apache,jsp,struts,servlet)