首页 > 代码库 > tomcat发布项目问题汇总

tomcat发布项目问题汇总

        最近维护一个比较老的项目,维护好了以后需要发布在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=http://www.mamicode.com/"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可能带来的问题

 

        1struts标签校验更加严格,如果struts标签中存在嵌套双引号会报错。

        2、对EL表达式校验更加严格,升级tomcat版本后,以前的代码可能不能用了。

        3、安全级别默认较高,如applet不能够访问request

        具体现象可能是:

        1、报错Attribute value is quoted with " which must be escaped when used withinthe value 

        2containsinvalid 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.xmlcontext选项,增加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





tomcat发布项目问题汇总