最近维护一个比较老的项目,维护好了以后需要发布在tomcat7上。部署过程出现了好多的问题。下面总结一下与大家分享。
第一个问题: 上午部署项目出现问题,有一个页面无法打开:
报错如下: 严重:Servlet.service() for servlet jsp threw exception javax.el.ELException:The identifier [new] is not a valid Java identifier as required by section 1.19of the EL specification (Identifier ::= Java language identifier). This checkcan be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECKto true. atorg.apache.el.parser.AstDotSuffix.setImage(AstDotSuffix.java:45) atorg.apache.el.parser.ELParser.DotSuffix(ELParser.java:1069) atorg.apache.el.parser.ELParser.ValueSuffix(ELParser.java:1035) atorg.apache.el.parser.ELParser.Value(ELParser.java:980) atorg.apache.el.parser.ELParser.Unary(ELParser.java:950) atorg.apache.el.parser.ELParser.Unary(ELParser.java:894) atorg.apache.el.parser.ELParser.Multiplication(ELParser.java:714) atorg.apache.el.parser.ELParser.Math(ELParser.java:634) atorg.apache.el.parser.ELParser.Compare(ELParser.java:446) atorg.apache.el.parser.ELParser.Equality(ELParser.java:340) atorg.apache.el.parser.ELParser.And(ELParser.java:284) atorg.apache.el.parser.ELParser.Or(ELParser.java:228) atorg.apache.el.parser.ELParser.Choice(ELParser.java:185) atorg.apache.el.parser.ELParser.Expression(ELParser.java:177) atorg.apache.el.parser.ELParser.DynamicExpression(ELParser.java:149) atorg.apache.el.parser.ELParser.CompositeExpression(ELParser.java:46) atorg.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:114) atorg.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:171) atorg.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:216) atorg.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:66) atorg.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:966) atorg.apache.jsp.WEB_002dINF.jsp.collectionForm_jsp._jspx_meth_c_005fif_005f0(collectionForm_jsp.java:595) atorg.apache.jsp.WEB_002dINF.jsp.collectionForm_jsp._jspService(collectionForm_jsp.java:351) atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) atjavax.servlet.http.HttpServlet.service(HttpServlet.java:727) atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) atjavax.servlet.http.HttpServlet.service(HttpServlet.java:727) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) atorg.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) atorg.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) atorg.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) atorg.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) at 。。。。。。
代码是这样写的: <c:iftest="${!command.new}"> <INPUTtype="submit" name="delete" value="Delete"style="margin-right: 5px; font-size: 8pt; font-family: Arial; width:70px" onclick="returnconfirm('Are you sure you want to delete this repository?')" /> </c:if> 最后的解决方法时在tomcat的catalina.properties配置文件的最后加上: org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true 分析原因:
tomcat7可能带来的问题
1、struts标签校验更加严格,如果struts标签中存在嵌套双引号会报错。 2、对EL表达式校验更加严格,升级tomcat版本后,以前的代码可能不能用了。 3、安全级别默认较高,如applet不能够访问request。 具体现象可能是: 1、报错Attribute value is quoted with " which must be escaped when used withinthe value 2、containsinvalid expression(s): javax.el.ELException: [do] is not a valid Javaidentifier atorg.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 3、没现象就是request=null
解决方法: $CATALINA_BASE/conf/catalina.properties增加 org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
$CATALINA_BASE/conf/Catalina/localhost/webapp.xml增加 <Context path=""docBase="/vmind/vmind" useHttpOnly="false" debug="0" reloadable="false"> 或修改server.xml的context选项,增加useHttpOnly="false" 即可。
第二个问题: tomcat文件夹有空格,用类加载器获取路径时会将空格转换为20% 今天遇到一个问题,当tomcat文件夹有空格,用类加载器获取路径时会将空格转换为20%.. 解决办法将路径先用URL编码; eg: String path = CustFactory.class.getClassLoader().getResource("config.properties").getPath();改为 String path =CustFactory.class.getClassLoader().getResource("config.properties").toURI().getPath(); 第三个问题 自己拷到服务器上的tomcat总是无法启动,最终找到原因是配置了CATALINA_HOME环境变量,导致每次启动的tomcat都是环境变量配置的路径下的tomcat。 设置CATALINA_HOME环境变量
设置CATALINA_HOME环境变量 1、CATALINA_HOME是TOMCAT安装路径的别名,目的是为了方便使用TOMCAT 2、计算机>属性>环境变量, 新建环境变量。变量名为CATALINA_HOME,变量值tomcat的解压目录,我电脑上的为:“F:\apache-tomcat-7.0.12”,注意后面不用多加“\”或者“;” 3、在环境变量Path中,新增加“ TALINA_HOME%\bin\" 4、启动tomcat :进入命令行cmd,输入startup.bat 5、打开浏览器,输入:http://localhost:8080,看tomcat是否正常启动 6、关闭tomcat:进入命令行cmd,输入shutdown.bat (责任编辑:IT) |