Struts2.1.6部署到tomcat出错Exception
tomcat常见的错误与解决方案小结
tomcat常见的错误与解决⽅案⼩结⼀、tomcat启动时错误问题1:The JAVA_HOME environment variable is not defined This environment variable is needed to run this program;解决:没有在tomcat的配置⽂件.bash_profile中设置环境变量JAVA_HOME,具体设置⽅法为:加⼊如下⼏⾏:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jarexport CLASSPATH问题2:Error occurred during initialization of VM Could not reserve enough space for object heap解决:在tomcat的bin⽬录下,catalina.sh⽂件的tomcat内存参数配置过⼤,超过机器可⽤内存总数造成,修改到适当的值即可,修改的参数为:JAVA_OPTS="-Xms50m -Xmx60m"问题3:tomcat启动时报某个⽬录没有权限,启动失败,或者不能执⾏某些jsp页解决:tomcat需要tomcat⽤户具有⼀些⽬录和⽂件的相应权限, 所有⽬录应该具有读写执⾏(浏览)的权限,jsp,class⽂件应该最少具有读权限, ⼀些⽂件需要写权限,下⾯是已知的需要读写权限⽂件的列表:$CATALINA_HOME/logs下所有⽂件$CATALINA_HOME/work下所有⽂件$CATALINA_HOME/publish/main/count.txt⽂件$CATALINA_HOME/publish/chatroom/resource下的所有.xml⽂件所有上传图⽚⽬录都需要写权限。
学习struts2——常见问题与处理
学习struts2.2.1遭遇滑铁卢~~~~~好多异常~~~~~好多bug~~~~好多问题~~~~~~好多困难~~~好多肥羊~~~一、Filter mapping specifies an unknown filter name ----filter标签在web.xml 里的顺序<filter-mapping><filter-name>adminOperateLogFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>adminOperateLogFilter</filter-name><filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class></filter>这样写启动服务器时报错 Filter mapping specifies an unknown filter nameadminOperateLogFilter将这两块换个顺序就没问题了,web.xml信息的加载是有顺序的,filter在mapping之前必须要让服务器找到其定义。
<filter><filter-name>adminOperateLogFilter</filter-name><filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class></filter><filter-mapping><filter-name>adminOperateLogFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>二、ng.IllegalArgumentException: Filter mapping specifies an unknown filter nameStruts2答:“Struts2”?大写的?are you sure?我猜你一定是看了某struts2.0的权威指南(那是一个chm文件电子书,而且你看的可能是翻译成中文的),我不知道英文版的有没有写错,但是我检查了很久后才发现中文版存在这个大小写错误。
解决SpringBootwebSocket资源无法加载、tomcat启动报错的问题
解决SpringBootwebSocket资源⽆法加载、tomcat启动报错的问题⽬录问题描述:解决⽅法⼀:(常规解决、不推荐)解决⽅法⼆:(推荐)总结:问题描述:1. 项⽬集成WebSocket,且打包发布tomcat时出现websocket is already in CLOSING or CLOSE state这样的问题,建议参考“解决⽅法⼆”,但是“解决⽅法⼀”请要了解查看 ,因为解决⽅法⼆是在⼀的基础上进⾏更正2. 如果出现javax.websocket.server.ServerContainer not available这样的错误,请参考“解决⽅法⼀”中步骤3解决⽅法⼀:(常规解决、不推荐)步骤1:在BootApplication中修改:public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(BootApplication.class);springApplication.addListeners(new ApplicationPidFileWriter());ConfigurableApplicationContext applicationContext = springApplication.run(args);WebSocketServer.setApplicationContext(applicationContext);注:这⾥的WebSocketServer是指你⾃定义的websocket接受消息的服务类步骤2:修改WebSocketServerprivate static ManageUserMapper manageUserMapper;public static void setApplicationContext(ConfigurableApplicationContext applicationContext) {WebSocketServer.manageUserMapper = applicationContext.getBean(ManageUserMapper.class);}步骤3: 修改pom.xml由于我们在开发过程中,如果按照以上步骤1、2进⾏修改,⼀般不会出现问题,但是如果我们打包发布tomcat,就会出现:javax.websocket.server.ServerContainer not available这样的错误,步骤3为常规解决⼀下问题⽅式<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 去除内嵌tomcat --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>需要去除web-starter的tomcat,因为如果不去除会导致冲突,如果出现这种问题,你还需要在websocketConfig中做如下修改:(websocket为⾃定义配置类)/*** 服务器节点** 如果使⽤独⽴的servlet容器,⽽不是直接使⽤springboot的内置容器,就不要注⼊ServerEndpointExporter,因为它将由容器⾃⼰提供和管理* @return*/@Bean@Profile("dev")public ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}在application.properties做如下配置##prod:⽣产环境 dev:开发环境(WINDOWS)spring.profiles.active=dev这⾥加⼊了@Profile("dev") 这个注解。
Tomcat部署项目时启动报错总结
Tomcat部署项目时启动报错总结1、虚拟机报错端口被占用tomcat的默认端口是8080(或者其他自己设置的),可能已经被其他占用。
解决方法:在tomcat安装路径下conf文件夹中的server.xml中把断口号改掉!如果一台机器上使用多个tomcat,则改掉所有相关的端口避免重复了,包括想如下在server.xml中找到如下地方改掉port的值●●(改完后看看和本机上正在用的tomcat是不是有重复的port)2、tomcat的启动窗口一闪而过Tomcat启动的dos窗口一闪而过,如何看出错信息?在DOS窗口运行STARTUP.BAT文件,另外,吧startup.bat文件最后的call "%EXECUTABLE%" start %CMD_LINE_ARGS%改成:call "%EXECUTABLE%" run %CMD_LINE_ARGS%分析原因1:jdk的环境变量没有配置好解决方法:检查jdk环境变量的配置是否正确,或者重新配置jdk的系统环境变量JDK环境变量配置的步骤如下:1.我的电脑-->属性-->高级-->环境变量.2.配置用户变量:a.新建JAVA_HOMEC:\Program Files\Java\j2sdk1.5.0(JDK的安装路径)b.新建 PATH (注意:把java的配置放在path的最前面)%JAVA_HOME%\bin;%JAVA_HOME%\jre\binc.新建CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar3.测试环境变量配置是否成功:开始-->运行--〉CMD键盘敲入:JAVAC JAVA出现相应的命令,而不是出错信息,即表示配置成功!环境变量配置的理解:1. PATH环境变量。
作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
Tomcat启动springboot项目war包报错:启动子级时出错的问题
Tomcat启动springboot项⽬war包报错:启动⼦级时出错的问题今天公司springboot项⽬准备部署到测试服务器上进⾏测试,打包好war后放到tomcat⾥⾯启动后,前端⽂件能访问到,但是接⼝请求⼀直是404,⼀直找了很久的原因,tomcat启动是成功的,war打包的时候也提⽰build success了,tomcat启动⽇志发现报错:ng.IllegalStateException: 启动⼦级时出错at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)at java.util.concurrent.FutureTask.run(Unknown Source)at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)at org.apache.catalina.startup.Catalina.start(Catalina.java:738)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at ng.reflect.Method.invoke(Unknown Source)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)Caused by: org.apache.catalina.LifecycleException: 初始化组件[org.apache.catalina.webresources.JarResourceSet@67d48005]失败。
struts2漏洞解决方案
struts2漏洞解决方案对于Struts2漏洞的修复和预防是非常重要的,因为它可能导致严重的安全问题和系统遭受攻击。
在本文中,我们将介绍一些可行的解决方案和建议,以帮助您防范和修复Struts2漏洞。
1. 及时更新Struts2框架版本Struts2团队经常发布新版本来修复安全漏洞和其他bug。
您应该始终关注Struts2的官方网站,了解最新版本的发布情况,并尽快将您的应用程序升级到最新版本。
新版本通常会修复旧版本中存在的已知漏洞,并提供更好的安全性和稳定性。
2. 安全配置在您的Struts2应用程序中,您可以配置一些安全设置来增加系统的安全性。
例如,可以禁用用于开发和调试的Struts2调试模式,禁用动态方法调用,并且仅允许受信任的主机进行访问。
这些配置可以减少潜在的攻击面并增强您的应用程序的安全性。
3. 过滤用户输入用户输入是导致Struts2漏洞的常见来源之一。
为了避免潜在的安全问题,您应该始终对用户的输入数据进行有效的过滤和验证。
使用适当的输入验证和过滤技术,如正则表达式、白名单和黑名单等,可以防止常见的漏洞攻击,如SQL注入和跨站脚本攻击。
4. 使用安全框架或插件除了Struts2框架本身的安全性措施外,您还可以考虑使用安全框架或插件来增强您的应用程序的安全性。
例如,Apache Shiro是一个强大而灵活的安全框架,可以与Struts2无缝集成,并提供更高级的安全功能,如认证、授权和会话管理等。
5. 日志和监控为了及时发现和应对潜在的Struts2漏洞攻击,您应该启用详细的日志记录和监控机制。
定期审查日志记录,以便及早识别异常活动和攻击尝试。
同时,您还可以使用安全监控工具来实时监视您的应用程序,以便及时发现和应对任何安全威胁。
总结:通过及时更新Struts2框架版本、配置安全设置、过滤用户输入、使用安全框架或插件以及启用日志和监控机制,您可以有效地解决和预防Struts2漏洞。
在保障应用程序的安全性方面,持续的关注和努力非常重要。
Struts 2 异常处理的常用的解决方法
一、第一个异常处理严重: Servlet.service() for servlet jsp threw exceptionThe Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)atorg.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44) atponentTagSupport.doStartTag(ComponentTagSupport.java:48) at_005fstruts2_005flz.YpxxbQuery_jsp._jspx_meth_s_005fdebug_005f0(Ypxxb Query_jsp.java:108)at_005fstruts2_005flz.YpxxbQuery_jsp._jspService(YpxxbQuery_jsp.java:83)解决的办法:(4种解决方案)1.web.xml 中添加一个filter<filter-mapping><filter-name>struts2</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/action/*</url-pattern></filter-mapping>2.<filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意<url-pattern>这里一定要是/*3.这通常是由于不经由Filter访问包含struts标签的jsp页面导致的。
tomcat常见错误与解决方法
上海纽斯达科技tomcat常见错误与解决方法上海纽斯达科技有限公司2014-10-25文档状态目的:在tomcat 服务器出现故障时,能快速定位并解决相关错误。
保密:本文档仅供内部使用,请勿外传概述:tomcat 常见错误与问题之解决方法技术指南。
安装环境:系统环境:redhat enterprise 6.5 64bit文件状态:【 】草稿【 】修改稿 【√】正式发布 文档编号 Nsdkj-779 保 密 等 级 限制 作 者 刘恒亮 最后完成日期 2014-12-25 审 核 人最后审核日期 2014-12-25 批 准 人最后批准日期 2014-12-25注释:Q代表问题,A代表错误解决办法Q:在以tomcat用户启动tomcat时提示:The JAVA_HOME environment variable is not defined This environment variable is needed to run this programA:没有在在tomcat的配置文件.bash_profile中设置环境变量JAVA_HOME,具体设置方法为:加入如下几行:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/li b/dt.jarexport CLASSPATHQ: 在以tomcat用户登录linux系统后,提示:-bash: /home/tomcat/j2sdk1.4.2_08: is a directory-bash:/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.ja r:没有那个文件或目录。
Tomcat启动失败的解决方法
Tomcat启动失败的解决方法
1.JDK版本和Tomcat版本不匹配,通常原因是JDK版本过低
例如Tomcat5.5搭配JDK6.0
此种情况会出现启动Tomcat的时候,加载信息在屏幕上停留几秒就消失,Tomcat没有任何反应。
解决方法:
(1)将JDK目录下的bin文件夹中的msvcr71.dll 复制到tomcat的BIN文件夹中。
(2)系统缺少msvcr71.dll文件!
从别的电脑上cope其添加到 <windows>/system32 目录下即可!
2.JDK环境变量设置错误
常见的,例如JAVA_HOME没设置,或者设置错误, JAVA_HOME后不能含有; 否则会影响到后面classpath和path的设置
3. 8080端口被占用
Tomcat所使用的默认为8080端口,如果它被别的服务程序占用,例如oracle等,则需要另外指派端口给Tomcat
方法:打开Server.xml,找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把其中port后的8080改为别的端口,例如8088,9090,
然后重新启动Tomcat,启动成功即可。
(4)
终止进程:Javax.exe。
常见异常
提示ng.UnsupportedClassVersionError: Bad version numberin .class fileMyeclipse 使用的JDK和Tomcat使用的JDK版本不一致解决方法:把它们的JDK版本改成一致步骤如下:1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本.2.Window --> Preferences -->MyEclipse --> Servers -->Tomcat --> Tomcat n.x -->JDK中的Tomcat JDK name下的下拉菜单中选择自身电脑上安装的JDK 版本1 、缺少文件上传JAR包commons-io-1.3.1.jar commons-fileupload-1.2.jarUnable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]这个问题是在使用Struts2想做一个上传文件的页面时候Tomcat报出来的错误,详细信息如下:2007-7-19 21:34:09 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet jsp threw exceptionng.RuntimeException: Unable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]问题描述:使用Struts2.0.6+Sitemesh2.2.1+Freemark2.3.8的过程中,装饰Action请求的结果页面不会有问题,但是如果装饰直接访问的JSP页面会出现如下错误:java 代码1. javax.servlet.ServletException: Error applying decorator: null解决方案:经过调试发现是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,错误代码如下:java 代码1. protected Locale getLocale(ActionInvocation invocation, Configurationconfiguration) {2. if (invocation.getAction() instanceof LocaleProvider) {3. return ((LocaleProvider) invocation.getAction()).getLocale();4. } else {5. return configuration.getLocale();6. }7. }改正后的代码如下:java 代码1. protected Locale getLocale(ActionInvocation invocation, Configurationconfiguration) {2. if (invocation != null && invocation.getAction() instanceof LocaleProvider) {3. return ((LocaleProvider) invocation.getAction()).getLocale();4. } else {5. return configuration.getLocale();6. }7. }问题描述:使用Struts2.0.6+Sitemesh2.2.3,我有一个请求/customer/page.action,其结果页面为WEB-INF/jsp/customer/list.jsp,我希望使用main装饰器对返回结果进行装饰,如果配置如下:xml 代码1. <decorator name="main" page="main.ftl">2. <pattern>/WEB-INF/jsp/customer/list.jsppattern>3. decorator>则无法成功进行装饰,如果配置如下:xml 代码1. <decorator name="main" page="main.ftl">2. <pattern>/*pattern>3. decorator>则可以成功进行装饰。
Tomcat异常Illegal access
Tomcat异常Illegal access:this web application instance has been stopped already2006-9-11 11:33:27 org.apache.catalina.loader.WebappClassLoader loadClass信息: Illegal access: this web application instance has been stopped already (the eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact)原因是因为在tomcat重启的时候,因为之前的tomcat中的线程还没有完全关闭,新启动tomcat就会报这个异常,不过这个不影响正常使用,只是跳个异常挺烦人的。
解决办法:将tomcat的server.xml中的Context的reloadable设成false。
比如:<Context path="/expert" docBase="expert" debug="0" reloadable="false">或者修改tomcat目录下的context.xml,找到<Context>标签,把reloadble的属性值设为:reloadable="false",即<Context reloadable="false">。
或者1 配置文件错了2 jar版本不兼容或者有重复的jar。
struts2配置文件详解
<struts>
<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
<cosntant name="struts.ui.theme" value="xhtml" />
<!-- spring 托管 -->
<constant name="struts.objectFactory" value="spring" />
<!--
指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
<!-- 设置默认的locale和字符编码 -->
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="GBK" />
<!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
常见异常(精)
提示ng.UnsupportedClassVersionError: Bad version numberin .class fileMyeclipse 使用的JDK和Tomcat使用的JDK版本不一致解决方法:把它们的JDK版本改成一致步骤如下:1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本.2.Window --> Preferences -->MyEclipse --> Servers -->Tomcat --> Tomcat n.x -->JDK中的Tomcat JDK name下的下拉菜单中选择自身电脑上安装的JDK 版本1 、缺少文件上传JAR包commons-io-1.3.1.jar commons-fileupload-1.2.jarUnable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]这个问题是在使用Struts2想做一个上传文件的页面时候Tomcat报出来的错误,详细信息如下:2007-7-19 21:34:09 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet jsp threw exceptionng.RuntimeException: Unable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]问题描述:使用Struts2.0.6+Sitemesh2.2.1+Freemark2.3.8的过程中,装饰Action请求的结果页面不会有问题,但是如果装饰直接访问的JSP页面会出现如下错误:java 代码1. javax.servlet.ServletException: Error applying decorator: null解决方案:经过调试发现是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,错误代码如下:java 代码1. protected Locale getLocale(ActionInvocation invocation, Configurationconfiguration) {2. if (invocation.getAction() instanceof LocaleProvider) {3. return ((LocaleProvider) invocation.getAction()).getLocale();4. } else {5. return configuration.getLocale();6. }7. }改正后的代码如下:java 代码1. protected Locale getLocale(ActionInvocation invocation, Configurationconfiguration) {2. if (invocation != null && invocation.getAction() instanceof LocaleProvider) {3. return ((LocaleProvider) invocation.getAction()).getLocale();4. } else {5. return configuration.getLocale();6. }7. }问题描述:使用Struts2.0.6+Sitemesh2.2.3,我有一个请求/customer/page.action,其结果页面为WEB-INF/jsp/customer/list.jsp,我希望使用main装饰器对返回结果进行装饰,如果配置如下:xml 代码1. <decorator name="main" page="main.ftl">2. <pattern>/WEB-INF/jsp/customer/list.jsppattern>3. decorator>则无法成功进行装饰,如果配置如下:xml 代码1. <decorator name="main" page="main.ftl">2. <pattern>/*pattern>3. decorator>则可以成功进行装饰。
struts2上传文件异常:multipartrequest(jakarta)-[unknownlocation]
struts2上传文件异常:multipartrequest(jakarta)-[unknownlocation]Struts2上传文件异常:ng.RuntimeException: Unable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]在测试Struts2权威指南介绍的struts2文件上传,发现如下异常:ng.RuntimeException: Unable to load beanorg.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]再回去仔细看该章节,发现是自己粗心了,忘记加所需要的两个除struts2外的jar文件.所加jar文件所图所示:Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,而struts2的filter拦截了上传文件的动作,拦截器代码是这样写的://org.apache.struts2.dispatcher.Dispatcher.javapublic HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException { // don't wrap more than onceif (request instanceof StrutsRequestWrapper) {return request;}String content_type = request.getContentType();if (content_type != null &&content_type.indexOf("multipart/form-data") != -1) {MultiPartRequest multi =getContainer().getInstance(MultiPartRequest.class);request = new MultiPartRequestWrapper(multi, request, getSaveDir(servletContext));} else {request = new StrutsRequestWrapper(request);}return request;}注意MultiPartRequest multi =getContainer().getInstance(MultiPartRequest.class);这句是上传文件时拦截器实现所需要的,出错的原因是所不到MultiPartRequest.class的实现类.这个类在上传框架jar文件中.这是文件上传fileupload解析器。
解决 Tomcat 服务崩溃的问题
解决 Tomcat 服务崩溃的问题Tomcat 服务器是一种用来处理 Web 应用程序的开源服务器。
由于其高效、稳定的特点,近年来在 Web 开发领域得到了广泛应用。
但是,有时候 Tomcat 服务也会遇到崩溃的问题,这对于系统管理员和开发人员来说都是非常头痛的事情。
在本文中,我们将探讨如何解决 Tomcat 服务崩溃的问题,以使我们的 Web 应用程序能够更加稳定地运行。
1. 清理 Tomcat 服务器日志当 Tomcat 服务器出现崩溃的问题时,第一个要想到的就是查看 Tomcat 服务器的日志文件。
日志文件中记录了服务器的运行状态、错误信息以及异常堆栈等信息,可以帮助我们定位问题的根源。
如果日志文件过大,可能会占用过多的硬盘空间,甚至会导致服务器出现异常。
因此,我们建议定期清理 Tomcat 服务器日志文件,保留最近一段时间内的日志信息即可。
清理日志的方法:- 在 Tomcat 安装目录下找到 logs 目录,删除过期的日志文件。
- 修改 Tomcat 的 logging.properties 配置文件,配置日志的输出级别和日志的保存周期。
可根据自身需求来设置级别和周期。
2. 优化 JVM 参数设置JVM 是 Java 虚拟机,是 Java 程序的核心组件之一。
Tomcat 服务器是运行在 JVM 上的 Java 应用程序,因此 JVM 参数的设置对Tomcat 服务器的性能和稳定性有很大影响。
我们建议对 JVM 参数进行优化设置,以提升 Tomcat 服务器的运行效率和稳定性。
优化 JVM 参数的方法:- 适当增加 JVM 堆空间大小。
在 Tomcat 安装目录下的 bin 目录中的 catalina.bat (Windows)/ catalina.sh (Linux)文件中可以找到 JVM 启动参数,增加 -Xms 和 -Xmx 参数来增加 JVM 堆空间大小。
- 设置内存溢出的报警机制。
struts2_异常处理
Struts2___异常处理Struts2提供声明式的异常处理方式,内部通过配置的拦截器来实现,默认异常拦截器:com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor这样我们不需要在Action方法中catch异常,只需抛出相关的异常,都交由拦截器处理通过异常映射配置:<exception-mapping>元素exception属性:指定该异常映射所设置的异常类型result属性:指定Action出现该异常时,跳转到result属性所指向的结果异常映射类别分为两种:局部异常映射:<exception-mapping>配置<action name="exceptionAction"class="org.struts2.ch6.action.ExceptionAction"> <!-- 局部异常映射当Action 抛出指定异常时显示名为book_error指定的页面--><exception-mapping result="book_error"exception="ng.IllegalArgumentException"/><result>/ch6/book_add.jsp</result><result name="book_error">/ch6/book_error.jsp</result></action>全局异常映射:<global-exception-mappings>和<exception-mapping>配置<global-results><result name="error">/ch6/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="error"exception="ng.Exception"/> </global-exception-mappings>页面输出异常信息:异常对象被封装成ExceptionHolder对象,压入ValueStack中<s:property value="exception.message"/> 输出异常对象消息<s:property value="exceptionStack"/> 输出异常堆栈信息Struts2 拦截器工作原理UML时序图:Struts2___类型转换◆内置的类型转换Stringboolean/Booleanchar/Characterint/Integer,float/Float,long/Long,double/Double date 默认时间格式为yyyy-MM-dd(当前时区的SHORT格式)数组假设每个单独的字符串都能转换成数组中元素的类型集合如果不能确定集合中元素的类型,会默认是String类型,并创建一个新的ArrayList对象◆自定义类型转换器主要方式:a.继承DefaultTypeConverter,重写convertValue方法b.继承StrutsTypeConverter,重写convertFromString和convertToString方法(推荐)public class DateTypeConverter extends StrutsTypeConverter {private String[] pattern = {"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss","yyyy-MM-dd","yyyy/MM/dd"};private SimpleDateFormat sdf=new SimpleDateFormat();/*** @param context action上下文* values[] 需要转换的String数组* toClass 转换后的目标类型** @return返回转换后的目标对象*/public Object convertFromString(Map context, String[] values, Class toClass) { /** 使用指定的日期格式解析字符串值,返回Date对象*/Date date=null;if(toClass==Date.class && values.length>0){if(values[0]!=null && !"".equals(values[0])){System.out.println("接收的参数值:"+values[0]);date=parse(values[0]);if(date==null){/** 解析出现异常,抛出TypeConversionException异常,以通知Struts2发生了转换错误*/System.out.println("抛出类型转换异常,通知struts处理");throw new TypeConversionException("类型转换异常");}}System.out.println("转换后的值:"+date);return date;}return null;}public String convertToString(Map context, Object o) {/**使用指定的日期格式格式化Date对象,返回字符串*/return sdf.format(o);private Date parse(String source) {for(String fmt:pattern){Date d=convert(source,fmt);if(d!=null){return d;}}return null;}private Date convert(String source, String fmt) { try {sdf.applyPattern(fmt);Date v = sdf.parse(source);return v;}catch (ParseException e) {return null;}}自定义类型转换器的注册方式:A、局部类型转换器:针对某个ActionB、全局类型转换器:针对所有ActionC、使用JDK1.5的注释1.局部类型转换器提供如下格式的properties 文件,存放在Action类同一路径下文件名:action类名-conversion.properties内容: Action属性名=转换器全路径类名如:birthday=org.struts2.ch6.conversion.DateTypeConverter2、全局类型转换器(一般使用)提供如下格式的文件,存放位置:WEB-INF/classes/目录下文件名: xwork-conversion.properties内容:需要转换的全路径的类名=转换器全路径类名如:java.Util.Date=org.struts2.ch6.conversion.DateTypeConverter 类型转换的流程(String转对应类型)类型转换异常提示处理类型转换由conversionError拦截器处理出错返回input指向页面使用<s:fielderror/>显示错误信息##默认类型转换错误消息(一般使用) 一般定义在全局资源包文件中xwork.default.invalid.fieldvalue=this.field{0}value invalid ##局部类型转换错误消息显示(一般定义action级别资源包)invalid.fieldvalue.属性名=错误提示invalid.fieldvalue.birthday=birthday convert error!!!示例参见ch6。
myeclipse启动tomcat报错
Myeclipse启动tomcat 报错windows问题Tomcat无法启动,有各种各样的原因。
1.可能是项目冲突。
2.可能是没有正常关闭tomcat3.8080端口被占用解决办法1.结束掉占用端口的进程netstat -ano 查看所有端口ntsd -c q -p PID 杀死进程,还可以用taskkill /im taskname /F或taskkill /pid pidnum /F强行结束进程如果不行就得改端口了在Tomcat的conf文件夹里有个server.xml文件,修改里面的 <Connector port="8080"maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> port。
把port="8080"的8080换成其他的最好是四位数字的!2.你的Tomcat里有项目冲突,把你Tomcat里的东西清空了,把以前部署过的W eb项目全部"Remove Deployment",然后重新部署.或者到Tomcat目录\work\Catalina\localhost\项目名称,全部删除,重启(不会影响到原来的项目)。
或者如果你是自己配置的tomcat的话 找到它的位置 tomcat下 点击work文件夹 Catalina文件夹 localhost文件夹 下面是你的web项目发布的名称(也就是上下文路径)。
java.lang.NoSuchMethodException问题原因及解决办法
ng.NoSuchMethodException问题原因及解决办法 最近⽤Struts2做项⽬,登录的验证login.jsp传值到AdminAction()出现了问题,⼀直报这个错误,⽹上搜的问题真的是,⽤托尔斯泰的话说就是,每个⼈的成功的都是相似的,⽽每个⼈的bug却各不相同。
下⾯我总结了⼏条:1.我出错的原因是因为:在action中⽅法不能有参数,⽽我把参数传进去了,也就是本来⽅法应该是public String checkAdmin(); 我写成了public String checkAdmin(Admin admin);使⽤struts2框架出现的问题问题就在这个参数上,struts2中是不能有参数的解决⽅法:struts2是通过反射机制来执⾏action的⽅法,struts2规范⽬前action⽅法是不需要参数的,有参数的⽅法和没参数的⽅法是两个不同的⽅法,所以会出现找不到的情况。
2、你有没有试试看其它的⽅法能不能⽤,要是都是这种情况的话,可能是你的Action类没有继承structs⾥⾯的DispatchAction或者其它的类。
还有你注意下⽅法的参数列表,类型顺序要正确才⾏,是按照以下顺序的:ActionMapping mapping,ActionForm form ,HttpServletRequest request,HttpServletResponse response3、发现有两种错误可能引起上述异常:⼀.Action 类的⽅法被定义成 private 类型.如下 Action 中被访问的⽅法被定义成 private 类型.程序在访问其⽅法时,会抛出以上异常.4、jar版本不对应该是3.6jar包的问题,换回3.2的包⼜没事了其实ng.NoSuchMethodException这个异常的根本原因有两个:第⼀,缺少某些jar⽂件;第⼆,某些jar⽂件有重复。
5、ng.NoSuchMethodException 这个异常是指你的action⾥⾯没有这个⽅法,说明已经找到了action 但是没有找到⽅法,所以有2个情况,第1种情况是,你提交到的不是这个action ,查查配置⽂件,有没有⼀样的path第2种情况,你的action⾥⾯没有这个⽅法。