struts.xml中为什么加上<constant name="struts.devMode" value="true" />就出错

本文介绍如何在Struts2中设置开发模式以实现配置文件的热更新,并解决由此引发的NullPointerException异常问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2中的配置文件中只要添加以下配置,那么以后修改配置文件不用重启tomcat的方法。于是自己手动试了试,没想到这一试竟然试出问题来

要添加的代码:

 

  1. <constant name="struts.devMode" value="true" />  
Xhtml代码  复制代码
  1. <constant name="struts.devMode" value="true" />  

 

 

struts.devMode也就是struts的开发模式,默认值为false,这里修改为true就可以了,以后一旦就该这个文件中的配置就不用去重启tomcat,着实方便许多。但是问题也出现了:

 

  1. 严重: Exception starting filter struts2  
  2. java.lang.NullPointerException  
  3.     at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)  
  4.     at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)  
  5.     at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)  
  6.     at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)  
  7.     at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)  
  8.     at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)  
  9.     at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)  
  10.     at org.apache.struts2.dispatcher.ng.InitOperations.initStaticContentLoader(InitOperations.java:77)  
  11.     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:49)  
  12.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)  
  13.     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)  
  14.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)  
  15.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)  
  16.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)  
  17.     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)  
  18.     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)  
  19.     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)  
  20.     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)  
  21.     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)  
  22.     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)  
  23.     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)  
  24.     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)  
  25.     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)  
  26.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)  
  27.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)  
  28.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  29.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)  
  30.     at org.apache.catalina.core.StandardService.start(StandardService.java:516)  
  31.     at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)  
  32.     at org.apache.catalina.startup.Catalina.start(Catalina.java:583)  
  33.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  34.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  35.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  36.     at java.lang.reflect.Method.invoke(Method.java:597)  
  37.     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)  
  38.     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)  
  39. 2010-3-1 22:26:44 org.apache.catalina.core.StandardContext start  
  40. 严重: Error filterStart  
C-sharp代码  复制代码
  1. 严重: Exception starting filter struts2   
  2. java.lang.NullPointerException   
  3.     at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)   
  4.     at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)   
  5.     at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)   
  6.     at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)   
  7.     at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)   
  8.     at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)   
  9.     at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)   
  10.     at org.apache.struts2.dispatcher.ng.InitOperations.initStaticContentLoader(InitOperations.java:77)   
  11.     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:49)   
  12.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)   
  13.     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)   
  14.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)   
  15.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)   
  16.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)   
  17.     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)   
  18.     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)   
  19.     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)   
  20.     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)   
  21.     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)   
  22.     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)   
  23.     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)   
  24.     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)   
  25.     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)   
  26.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)   
  27.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)   
  28.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)   
  29.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)   
  30.     at org.apache.catalina.core.StandardService.start(StandardService.java:516)   
  31.     at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)   
  32.     at org.apache.catalina.startup.Catalina.start(Catalina.java:583)   
  33.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
  34.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
  35.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
  36.     at java.lang.reflect.Method.invoke(Method.java:597)   
  37.     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)   
  38.     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)   
  39. 2010-3-1 22:26:44 org.apache.catalina.core.StandardContext start   
  40. 严重: Error filterStart  

 

经过google一搜,有说将<constant name="struts.devMode" value="true" />中的值改为false的,我要的就是true,改成false不违背了我本意,后来经过多次查找发现有人说这个属于struts2.1的bug,tomcat目录不能有空格。我仔细一瞧我的tomcat路径,还真出现空格的。。。比如D:\Program Files\Apache Software Foundation\Tomcat 6.0改成E:\Tomcat6

最后通过自己修改路径发现此方法可行。

<?xml version="1.0" encoding="UTF-8" ?> <!-- /* * $Id: struts-plugin.xml 722219 2008-12-01 20:41:26Z musachy $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <bean class="com.inc.sbu.view.FreeMarkerPageFilter" static="true" optional="true"/> <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> <constant name="struts.convention.relative.result.types" value="freemarker,dispatcher"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <constant name="struts.convention.package.locators" value="web,action" /> <constant name="struts.convention.default.parent.package" value="yk-default"/> <constant name="struts.convention.result.path" value="/pages"/> <constant name="struts.convention.result.flatLayout" value="true"/> <constant name="struts.i18n.encoding" value="gbk" /> <constant name="struts.i18n.reload" value="false" /> <constant name="struts.devMode" value="false" /> <constant name="struts.serve.static.browserCache" value="false"/> <constant name="struts.configuration.xml.reload" value="false" /> <constant name="struts.custom.i18n.resources" value="globalMessages" /> <constant name="struts.freemarker.manager.classname" value="customFreemarkerManager" /> <constant name="struts.multipart.saveDir" value="/tmp"/> <constant name="struts.multipart.maxSize" value="1000000000" /> <constant name="struts.ui.theme" value="simple"/> <constant name="struts.action.extension" value="xhtml,,json" /> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <package name="yk-default" extends="struts-default"> <result-types> <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <interceptors> <interceptor class="com.inc.sbu.struts.AuctionInterceptor" name="auctionInterceptor"/> <interceptor class="com.inc.sbu.struts.TokenInterceptor" name="incTokenInterceptor"/> <interceptor class="com.inc.sbu.struts.WorkFlowInterceptor" name="incFlowInterceptor"/> <interceptor class="com.inc.sbu.util.FileUploadInterceptor" name="fileUploadInterceptor"/> <interceptor class="com.inc.sbu.struts.ClewInterceptor" name="clewInterceptor"/> <interceptor-stack name="bidStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="profiling"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="auctionInterceptor"/> </interceptor-stack> <interceptor-stack name="subStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="profiling"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="fileUploadInterceptor"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,inputxy,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="clewInterceptor"> <param name="excludeMethods">login,loginManager,logout,index</param> </interceptor-ref> <interceptor-ref name="incTokenInterceptor"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="subStack"/> <global-results> <result name="invalid.token">/pages/error/repeat-submit.jsp</result> <result name="clew" type="dispatcher">/pages/clew.jsp</result> <result name="manage-clew" type="dispatcher">/pages/manage-clew.jsp</result> <result name="auction-clew" type="dispatcher">/pages/auction-clew.jsp</result> <result name="syserror" type="dispatcher">/pages/error.jsp</result> <result name="validerror" type="dispatcher">/pages/error.jsp</result> <result name="frontpurviewerror" type="dispatcher">/pages/error/frontpurviewerror.jsp</result> <result name="frontloginerror" type="dispatcher">/pages/error/frontpurviewerror.jsp</result> <result name="fronterror" type="dispatcher">/pages/error/frontticketerror.jsp</result> <result name="filenotfound" type="dispatcher">/pages/error/filenotfound.jsp</result> <result name="login" type="redirect">/login</result> <result name="adminLogin" type="dispatcher">/login.jsp</result> <result name="login" type="redirect">/login</result> <result name="entran" type="redirect">/entran</result> <!-- <result name="adminLogin" type="dispatcher">/login.jsp</result> --> <result name="auctionAdminError" type="redirect">/auction/adminLogin</result> <result name="auctionActorError" type="redirect">/auction/login</result> </global-results> </package> <!-- Overwrite Convention --> </struts> 我现在需要重写fileUpload,即不再使用fileUpload的拦截器,需要怎么配置
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值