Struts2开发中遇到的错误及解决方案
struts2学习笔记——常见报错及解决方法汇总(持续更新)

struts2学习笔记——常见报错及解决⽅法汇总(持续更新)操作环境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7 (3)JVM Version: 1.8.0_25-b18 (4)eclipse Version: Kepler Service Release 2 (5)struts2 version:struts2-core-2.5.10.11.通配符访问⽅法,报错404错误找不到页⾯ (1)错误原因:struts.xml中缺少<global-allowed-methods>regex:.*</global-allowed-methods>,根据字⾯理解就是允许以*通配符的⽅式访问⽅法 (2)详细错误:HTTP Status 404 - There is no Action mapped for namespace [/] and action name [] associated with context path [/struts2002]. (3)报错截图:(4)解决⽅案:在package标签之间添加<global-allowed-methods>regex:.*</global-allowed-methods>即可2.编写struts.xml时编译报错 (1)错误原因:<package></package>中的标签必须按顺序书写,否则会报错 (2)详细错误:The content of element type "package" must match "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-allowed-methods?,global-exception-mappings?,action*)". (3)报错截图: (4)解决⽅案:检查顺序是否正确 result-types interceptors default-interceptor-ref default-action-ref default-class-ref global-results global-exception-mappings action*。
struts2升级-常见错误

重要:经过详细测试,由于xwork升级导致javaBean的写法非常严格,例如:1.Private Qname Qname; (错误:javaBean首字母不能大写)2.Private Qname qName; (错误:首字母小写,第二个字母大写,javaBean支持该写法,但是升级版xwork不支持该反射)3.Private Qname qname;(正确)可以看出,新版本的javaBean要求非常严格,其中第2种写法是常见的,因此版本升级后可能会出现大面积参数传递失败。
如果是新项目,建议直接使用最新的包开发,如果是现有项目,不建议升级。
============================================1、缺少、更换jar包Caused by: ng.NoClassDefFoundError:Lcom/opensymphony/xwork2/FileManager;更换xwork-core-2.3.15.1.jarCaused by: ng.NoClassDefFoundError: javassist/ClassPath缺少 javassist-3.11.0.GA.jarng.NoClassDefFoundError: org/apache/commons/lang3/StringUtils 缺少 commons-lang3-3.1.jarng.NoSuchMethodError:ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z更换 ognl-3.0.6.jarng.NoClassDefFoundError:org/objectweb/asm/commons/EmptyVisitor更换 asm-3.3.jar缺少 asm-commons-3.3.jarCaused by: ng.NoSuchMethodError:org.objectweb.asm.ClassWriter.<init>(I)V更换 cglib-2.2.jar,cglib-nodep-2.2.jar2、代码类更新1)XXXXX Exception - 》Exception (由于很多的异常被包捕抓了,所以有try、catch报错直接使用Exception)2)regexFields. Expression –》regexFields. regexExpression (新版本已经没有了expression)3、配置更改1)新版本使用了严格的参数控制,若使用的参数没有声明get、set则直接报错,但按照开发习惯,使用较少的参数不会声明,而是直接在request里面取得,屏蔽报错,需要更改struts配置:<constant name="struts.devMode" value="false" /> 非开发模式。
struts2常见错误

1. Console错误:Exception starting filter struts2No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.o pensymphony.xwork2.ObjectFactory). - Class: com.opensymphony.xwork2.inject.ContainerImpl File: ContainerImpl.java解决:struts.xml位置不对。
2. Console错误:Exception starting filter struts2ng.NoClassDefFoundError: org/apache/commons/lang3/StringUtils解决:缺少包:commons-lang3-3.1.jar3. Console错误:Could not create JarEntryRevision for[jar:file:D:/application/apache-tomcat-6.0.30/webapps/SSH1/WEB-INF/lib/struts2-core-2.3.4.j ar]!ng.NoClassDefFoundError:org/apache/commons/io/FileUtils缺少包:commons-io-2.0.1.jar4. Console错误:Dispatcher initialization failedng.RuntimeException:ng.reflect..InvocationTargetException缺少包:javassist-3.11.0.GA.jar5. Console错误:Caught exception while loading file struts-default.xml - [unknown location]解决:由于lib包冲突造成的,将两个解析xml用的jar从项目里移到tomacat的lib下面就ok了,xml-apis.jar xerces-2.6.2.jar6. Console错误:Exception starting filter struts2Error building results for action login in namespace - action - file:/E:/apache-tomcat-6.0.14/webapps/testStruts2/WEB-INF/classes/struts.xml57原因:在web.xml已声明使用模板,并对所有的类进行了监听,但在处理过程中,发现不知道到哪里去找模板的配置文件,即在struts.xml中已使用了模板,但并没有告诉程序应该到哪去解析这些内容,即titles-default.java文件应该声明出来,原因1:在struts.xml中错误的声明如下:showWelcomePage应改为:showWelcomePage原因2:titles.xml文件的错误配置menu_1.jsplogin_form.jsp正确的配置为:页面显示情况如下:错误配置如下:正确配置如下:在value属性中,以"/"开头表示地址,如果不以“/”开头,则系统会默认为内容7. 执行增加操作时,直接对对象进行操作,对象中各字段值都正确,但插入数据库后乱码解决(1) 统一页面和数据库编码为utf-8(2)修改hibernate的配置文件,修改url属性为:jdbc:mysql:/127.0.0.1:3306/shop?useunicode=true&characterEncuoding=utf-88. 在进行页面跳转时,已经跳转到了相应的页面,但显示结果页面不正确。
学习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文件电子书,而且你看的可能是翻译成中文的),我不知道英文版的有没有写错,但是我检查了很久后才发现中文版存在这个大小写错误。
struts2报错整理

Struts2报错整理目录:1.struts2报错No result defined for action的解决方法 (1)2.ssh环境,Action报错后,此Action其他方法也不能访问 (3)1.struts2报错No result defined for action的解决方法1,在后台action类中重写ActionSupport中的void addActionError(String anErrorMessage)void addActionMessage(String aMessage)void addFieldError(String fieldName, String errorMessage)这三个方法,在并在其实现代码中设置断点,监控传入的参数,并可获知页面的相关报错具体原因.public void addActionError(String anErrorMessage){String s=anErrorMessage;System.out.println(s);}public void addActionMessage(String aMessage){String s=aMessage;System.out.println(s);}public void addFieldError(String fieldName, String errorMessage){String s=errorMessage;String f=fieldName;System.out.println(s);System.out.println(f);}2,在页面中加入以下标签,将错误显示出来:一、addActionError("错误内容"):Action级别的错误消息this.addActionError("错误信息1");this.addActionError("错误信息2");显示消息的标签是:<s:actionerror />显示全部的 Action级别的错误消息,可以加CSS二、addFieldError("字段名","错误信息")给一个字段(属性)添加错误消息this.addFieldError("pwd", "错误信息1");this.addFieldError("pwd", "错误信息2");显示消息的方法1:标签是:<s:fielderror />显示全部的错误消息;显示消息的方法2:<s:fielderror><s:param>field1 </s:param> 显示指定的 field1字段的错误消息<s:param>field2 </s:param> 显示指定的 field2字段的错误消息</s:fielderror>显示消息的方法3:如果什么都不写,则默认显示在相应字段上方三、addActionMessage("相关信息")需要在action中重写父类的validate方法,对参数进行校验,如果校验失败。
运行struct2错误的解决办法

Struts has detected an unhandled exception:Messages: .bjsxt.struts2.action.TeacherAction2.Unable to instantiate Action,com.bjsxt.struts2.action.TeacherAction, defined for 'Teacher_add' in namespace'/actions'com.bjsxt.struts2.action.TeacherActionFile: org/apache/catalina/loader/WebappClassLoader.javaLinenumber:1,387StacktracesUnable to instantiate Action, com.bjsxt.struts2.action.TeacherAction, defined for 'Teacher_add' in namespace'/actions'com.bjsxt.struts2.action.TeacherActioncom.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultA ctionInvocation.java:306)com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInv ocation.java:387)com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy .java:186)org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.j ava:61)org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(St rutsActionProxyFactory.java:39)com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(D efaultActionProxyFactory.java:47)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.jav a:458)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(Exec uteOperations.java:77)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter .doFilter(StrutsPrepareAndExecuteFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:206)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:233)org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:191)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:128)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:109)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:286)org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso r.java:857)org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr ocess(Http11AprProtocol.java:565).AprEndpoint$Worker.run(AprEndpoint.java:15 09)ng.Thread.run(Thread.java:619)ng.ClassNotFoundException:com.bjsxt.struts2.action.TeacherActionorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa der.java:1387)org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa der.java:1233)com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUti l.java:146)com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory. java:96)com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:14 9)com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:13 9)com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java: 109)com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultA ctionInvocation.java:287)com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInv ocation.java:387)com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy .java:186)org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.j ava:61)org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(St rutsActionProxyFactory.java:39)com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(D efaultActionProxyFactory.java:47)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.jav a:458)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(Exec uteOperations.java:77)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter .doFilter(StrutsPrepareAndExecuteFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:206)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:233)org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:191)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:128)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:109)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:286)org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso r.java:857)org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr ocess(Http11AprProtocol.java:565).AprEndpoint$Worker.run(AprEndpoint.java:15 09)ng.Thread.run(Thread.java:619)You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:struts.devMode=falsein your WEB-INF/classes/struts.properties file.呵呵,仔细检查后发现:我的struts.xml配置如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" /><package name="actions" namespace="/actions"extends="struts-default"><action name="Student*"class="com.bjsxt.struts2.action.StudentAction" method="{1}"><result>/Student{1}_success.jsp</result></action><action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}"><result>/{1}_{2}success.jsp</result></action></package><!-- Add packages here --></struts>但是我的jsp的页面的名字确实Teacher_add_success.jspTeacher_delete_success.jsp之类的呵呵,错误很明显了:l.第一个错误:Unable to instantiate Action, com.bjsxt.struts2.action.TeacherAction, defined for 'Teacher_add' in namespace'/actions'com.bjsxt.struts2.action.TeacherAction就是说你的struts.xml中result返回的Action的名字与jsp的名字不一致的原因!!2.第二个错误:ng.ClassNotFoundException:com.bjsxt.struts2.action.TeacherAction这是什么意思呢,呵呵仔细看自己的项目,终于发现了,这是报的com.bjsxt.struts2.action.TeacherAction空指针异常,原来是我的这个类的名字写错了,呵呵,找不到自然的报空指针异常了!!。
Struts2的声明式异常处理

Struts2的声明式异常处理在struts2应⽤程序中你还在使⽤try catch语句来捕获异常么?如果是这样的,那你OUT啦!struts2⽀持声明式异常处理,可以再Action中直接抛出异常⽽交给struts2来处理,当然需要我们在xml⽂件中配置,由于抛出同样的异常的处理⽅法通常都⼀样,所以如果能在xml中配置全局异常,将会使得开发便捷性⼤⼤提⾼。
以前的异常捕获可能是这样的:/*** 执⾏更新** @return*/public String update() {Article article = new Article();article.setContent(content);article.setTitle(title);article.setId(id);try {articleService.update(article);return SUCCESS;} catch (SQLException e) {e.printStackTrace();return ERROR;} catch (InvalidInputException e) {e.printStackTrace();System.out.println("输⼊⾮法");return ERROR;}}这种⽅式是完全的⼿动处理异常,⼀来不够简洁明快,⽽且还不容易维护,毕竟如果修改了这些代码都需要再次编译。
采⽤struts2的声明式异常处理就会简单很多了。
⾸先,上⾯的代码的try catch 就可以全都不要了,但是,当然,得新加throw语句抛出异常:/*** 执⾏更新** @return* @throws InvalidInputException* @throws SQLException*/public String update() throws SQLException, InvalidInputException {Article article = new Article();article.setContent(content);article.setTitle(title);article.setId(id);articleService.update(article);return SUCCESS;}代码清晰了很多,不是么?捕获异常的任务则交给xml配置⽂件了,配置⽂件还是⽐较容易理解的:<package name="wow" extends="struts-default"><global-results><result name="sql">/internal_Error.jsp</result><result name="invalidinput">/invalid_Input.jsp</result><result name="naming">/internal_Error.jsp</result></global-results><global-exception-mappings><exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping><exception-mapping result="invalidinput"exception="cn.codeplus.exception.InvalidInputException"></exception-mapping><exception-mapping result="naming"exception="javax.naming.NamingException"></exception-mapping></global-exception-mappings><action name="*_*" class="cn.codeplus.action.{2}Action" method="{1}"><result name="success">/{1}_{2}_success.jsp</result><result name="error">/{1}_{2}_error.jsp</result><!--<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>--></action></package>⽤于异常处理的<exception-mapping>标签可以配置在Action中,也可以配置在<global-exception-mappings>,顾名思义<global-exception-mappings>就是全局异常,当然执⾏Action的时候发⽣异常时,如果在Action中没有捕获异常⽽是抛出异常的话,struts2会⾸先在正在执⾏的Action中查找<exception-mapping>,寻找对应下⾯说说异常处理:<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>上⾯代码说明,当捕获java.sql.SQLException时候,去寻找对应的result为sql的视图返回,即<global-result>中name为sql的result去返回internal_Error.jsp。
struts2漏洞解决方案

struts2漏洞解决方案对于Struts2漏洞的修复和预防是非常重要的,因为它可能导致严重的安全问题和系统遭受攻击。
在本文中,我们将介绍一些可行的解决方案和建议,以帮助您防范和修复Struts2漏洞。
1. 及时更新Struts2框架版本Struts2团队经常发布新版本来修复安全漏洞和其他bug。
您应该始终关注Struts2的官方网站,了解最新版本的发布情况,并尽快将您的应用程序升级到最新版本。
新版本通常会修复旧版本中存在的已知漏洞,并提供更好的安全性和稳定性。
2. 安全配置在您的Struts2应用程序中,您可以配置一些安全设置来增加系统的安全性。
例如,可以禁用用于开发和调试的Struts2调试模式,禁用动态方法调用,并且仅允许受信任的主机进行访问。
这些配置可以减少潜在的攻击面并增强您的应用程序的安全性。
3. 过滤用户输入用户输入是导致Struts2漏洞的常见来源之一。
为了避免潜在的安全问题,您应该始终对用户的输入数据进行有效的过滤和验证。
使用适当的输入验证和过滤技术,如正则表达式、白名单和黑名单等,可以防止常见的漏洞攻击,如SQL注入和跨站脚本攻击。
4. 使用安全框架或插件除了Struts2框架本身的安全性措施外,您还可以考虑使用安全框架或插件来增强您的应用程序的安全性。
例如,Apache Shiro是一个强大而灵活的安全框架,可以与Struts2无缝集成,并提供更高级的安全功能,如认证、授权和会话管理等。
5. 日志和监控为了及时发现和应对潜在的Struts2漏洞攻击,您应该启用详细的日志记录和监控机制。
定期审查日志记录,以便及早识别异常活动和攻击尝试。
同时,您还可以使用安全监控工具来实时监视您的应用程序,以便及时发现和应对任何安全威胁。
总结:通过及时更新Struts2框架版本、配置安全设置、过滤用户输入、使用安全框架或插件以及启用日志和监控机制,您可以有效地解决和预防Struts2漏洞。
在保障应用程序的安全性方面,持续的关注和努力非常重要。
struts2 error处理

struts2 error处理Struts2错误处理可以通过以下几种方式进行处理:1. 全局异常处理器(Global Exception Handler):可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理所有的异常。
在struts.xml配置文件中添加如下内容:```xml<global-exception-mappings><exception-mapping exception="ng.Exception"result="error" /></global-exception-mappings>```2. Action级别的异常处理器:每个Action类可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理特定的异常。
在struts.xml配置文件中,为每个使用自定义处理器的Action配置异常处理器:```xml<action name="example" class="com.example.ExampleAction"> <exception-mapping exception="ng.Exception"result="error" /><result name="error">/error.jsp</result><result>/example.jsp</result></action>```3. 拦截器异常处理器:Struts2中的拦截器可以捕获并处理Action方法中的异常。
可以通过自定义拦截器来实现异常处理,然后在struts.xml配置文件中使用:```xml<action name="example" class="com.example.ExampleAction"><interceptor-ref name="exceptionInterceptor" /><result>/example.jsp</result></action>```以上是Struts2错误处理的几种典型方法,可以根据具体需求选择适合的方式进行处理。
Struts2多个漏洞简要分析-电脑资料

Struts2多个漏洞简要分析-电脑资料1月份,SEC Cousult发布了一篇关于struts2漏洞的文章,写到4个struts2的最新漏洞,。
一个漏洞可以做远程代码执行,一个漏洞引出了新的远程代码执行,一个漏洞曾经我在blog上发布过(没有投CVE),以及一个之前也曾看到过,但是认为是鸡肋的漏洞。
这篇文章题目叫做《Multiple critical vulnerabilities in Apache Struts2》四个漏洞,本文一个一个的讲一讲它们的前世今生。
Remote command execution in Struts <= 2.2.1.1 (ExceptionDelegator)新的远程代码执行漏洞,已经分析过它的利用和分析文章,具体地址在这里就不再多讲,我猜想或许就是因为这个漏洞被人爆了出来,才引出了老外发的这篇文章。
Remote command execution in Struts <= 2.3.1 (CookieInterceptor)COOKIE 的远程代码执行,这看起来表面上很嚣张的样子,但其实较少用到,至少默认是不用的,必须要开发人员手工配置某个action才可以攻击,注意是一个单独的action,不懂这个的可以理解为URL。
攻击者可能不知道是具体哪个action启用了这个配置,这会导致增加了漏洞发现的难度。
也许攻击者要扫描所有的action,才能碰巧遇到一个做这样配置的地方。
根据作者的经验,也许攻击者要扫描很多STRUTS2应用,才能遇到一个用到这个技术的应用。
下面的代码是示例:**/T1.jsp可以看到,这是一个只针对testCookie这个action的配置。
由于CookieInterceptor在处理cookiesName时,会遍历cookiesMap,把cookie中的每个key和value做如下:stack.setValue(cookieName, cookieValue);这样的OGNL赋值处理。
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页面导致的。
struts2 s2-048原理

struts2 s2-048原理一、概述Struts2 S2-048是Struts2框架中常见的一个错误码,主要涉及到Action 的执行过程。
该错误的出现通常意味着Struts2在处理请求时出现了问题,需要进行深入的分析和排查。
二、原理介绍1. Action执行流程:当一个请求到达Struts2框架时,首先会进行相应的验证和过滤,然后将其传递给相应的Action。
Action是Struts2的核心组件之一,负责处理业务逻辑并返回结果。
在默认情况下,Struts2会按照配置文件中定义的流程来执行Action,即遵循execute()方法的返回值来确定后续的处理。
2. S2-048出现原因:S2-048错误的出现通常是由于Action的execute()方法返回了一个未被定义的异常类型,或者返回了null,导致Struts2的执行流程出现了异常。
此外,配置文件中的错误配置也可能导致该错误的出现。
3. 排查方法:出现S2-048错误时,首先要查看具体的错误信息,了解错误的详细情况。
然后,可以通过检查Action的代码和配置文件,找出可能的问题所在。
常见的排查方法包括查看日志、跟踪请求流转、对比正常情况下的行为等。
三、示例分析以下是一个可能出现S2-048错误的示例代码:Action类:```javapublic class MyAction extends ActionSupport {private String myVariable;public String execute() {try {// some business logic herethrow new Exception("Some business exception");} catch (Exception e) {// handle exception and return null or other result typereturn null;}}}```在上述代码中,execute()方法中抛出了一个异常,但并没有定义该异常的类型,导致Struts2在处理请求时出现了S2-048错误。
struts2 spring hibernate整合常见问题集

struts2 spring hibernate整合常见问题集由于时间原因我只是写一下出现的问题和解决方法,以后有时间了我会继续增加常出现的问题和出现问题的原因,希望对初学者有一些帮助1、出现class not fond:org.springframework.web.context.ContextLoaderListener解决方法:加入完整的spring.jar2、出现struts2 :Unable to load configuration. ……struts-default.xml异常(有两种情况)解决方法:2.1 除了ognl-2.6.11.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,commons-logging-1.0.4.jar外,还需要添加freemarker-2.3.13.jar,commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar2.2 struts.xml中action配置出错,检查,可能<package name=""extends="struts-default">中未写extends="struts-default"3、nested exception is ng.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Lja va/lang/String;Ljava/lang/String;)错误解决方法:将spring提供的asm-2.2.3.ja架文件删除重新启动服务器就能可以了4、出现:HTTP Status 404 - No result defined for actioncom.sr.login.LoginAction and result error解决方法:struts.xml配置文件中是否定义了名为Action返回result的<result />。
struts2 漏洞原理

struts2 漏洞原理Struts2 是一种开放源代码的 Java Web 应用框架,被广泛应用于构建 Web 应用程序。
然而,Struts2 框架的一个漏洞却给许多应用程序带来了安全隐患。
本文将解释Struts2 漏洞的原理,并提供对于修复漏洞的一些方法。
Struts2 框架漏洞的原理Struts2 框架漏洞源于框架自身的设计缺陷。
设计缺陷使得攻击者可以利用恶意的输入来欺骗 Struts2 框架,从而在应用程序中执行任意的代码。
这种攻击就被称为“远程代码执行攻击”( Remote Code ExecutionAttack )。
Struts2 框架的漏洞主要是由于以下两点原因所导致的:· Struts2 使用了 OGNL (Object-Graph Navigation Language) 来解析 EL (Expression Language) 表达式,但没有正确地对表达式进行过滤,这使得恶意行为成为可能。
· Struts2 框架中的相当一部分功能是通过拦截器来实现的。
攻击者可以利用 Struts2 框架中的拦截器漏洞,绕过应用程序的权限控制来访问关键数据或者执行任意代码。
这两点都是 Struts2 框架漏洞的主因。
攻击者可以利用这两个漏洞来构建恶意的请求,并欺骗 Struts2 框架来执行恶意代码。
导致 Struts2 漏洞的例子为了更好地理解 Struts2 漏洞,可以通过一些例子来说明。
以下是一些可能导致 Struts2 框架漏洞的例子:· 未正确过滤用户输入。
比如在 Struts2 编译以数据表格为基础的应用程序时,如果没有过滤 script 标记,那么攻击者就可以通过执行JavaScript来远程控制代码,这就是远程代码执行攻击。
· XML SSI 漏洞。
攻击者可以通过将恶意代码嵌入到XML 消息中来利用该漏洞。
此漏洞允许攻击者利用Struts2 使用 XML 包含的注入布局中的初始资源解析器来绕过安全检查并完成任意文件读取/写入操作。
struts2常见错误总结

struts2常见错误总结1.Caught exception while loading file struts-default.xml - [unknown location]解决办法:由于lib包冲突造成的,将两个解析xml用的jar从项目里移到tomacat的lib下面就ok了,xml-apis.jar xerces-2.6.2.jar2.严重: Exception starting filter struts2Error building results for action login in namespace - action - file:/E:/apache-tomcat-6.0.14/webapps/testStruts2/WEB-INF /classes/struts.xml57原因:在web.xml已声明使用模板,并对所有的类进行了监听,但在处理过程中,发现不知道到哪里去找模板的配置文件,即在struts.xml中已使用了模板,但并没有告诉程序应该到哪去解析这些内容,即titles-default.java文件应该声明出来,原因1:在struts.xml中错误的声明如下:<package name="aa1" extends="struts-default" ><action name="login" class="com.sun.demo.LoginAction"><result type="tiles">showWelcomePage</result></action></package>应改为:<package name="aa1" extends="titles-default" ><action name="login" class="com.sun.demo.LoginAction"><result type="tiles">showWelcomePage</result></action>原因2:titles.xml文件的错误配置<tiles-definitions><definition name="showWelcomePage" template="template.jsp"><put-attribute name="menu" >menu_1.jsp</put-attribute><put-attribute name="content" >login_form.jsp</put-attribute></definition>正确的配置为:<tiles-definitions><definition name="showWelcomePage" template="template.jsp"><put-attribute name="menu" value="/menu_1.jsp"></put-attribute><put-attribute name="content" value="/login_form.jsp"></put-attribute></definition>页面显示情况如下:错误配置如下:<definition name="showWelcomePage" template="template.jsp"><put-attribute name="menu" value="menu_1.jsp"></put-attribute><put-attribute name="content" value="login_form.jsp"></put-attribute></definition>正确配置如下:<definition name="showWelcomePage" template="template.jsp"><put-attribute name="menu" value="/menu_1.jsp"></put-attribute><put-attribute name="content" value="/login_form.jsp"></put-attribute></definition>在value属性中,以"/"开头表示地址,如果不以“/”开头,则系统会默认为内容3.执行增加操作时,直接对对象进行操作,对象中各字段值都正确,但插入数据库后乱码解决办法(1)统一页面和数据库编码为utf-8(2)修改hibernate的配置文件,修改url属性为:jdbc:mysql:/127.0.0.1:3306/shop?useunicode=true&characterEncuoding=utf-84.could not create Query原因:sql语句书写不正确5.mysql数据库问题mysql Error 1115号错误,utf编码安装时编码采用默认的编码,安装成功后,再到安装路径下修改安装语言,修改mysql/my.ini 文件。
Struts2开发中遇到的错误及解决方案

Struts2开发中遇到的错误及解决方案笔者记录下自己在开发过程中所遇到的一些常见的错误和警告,以供参考:1、警告:Settings: Could not parse struts.locale setting, substituting default VM locale分析及解决方法:这是默认环境没有设置好,有两种方法可以解决。
在WEB-INF/classes/struts.properties或者src/struts.properties文件中如下配置:struts.locale=en_GB;或者在struts.xml中如下配置:2、警告:No configuration found for the specified action: 'sum.action' in namespace: ''. Formaction defaulting to 'action' attribute's literal value.分析及解决方法:由于jsp文件中标签它对应的源文件是,sturts把action属性值当成了一个action name了,但这也不影响使用;但是对于使用了动态方法调用(struts.enable.DynamicMethodInvocation = true)就没有那么幸运了,提交时就会得到HTTP Status 404 - /context/sum错误。
对于以上情况,可以把标签写成及action=”sum!save” />3、ERROR:Cannot create JDBC driver of class '' for connect URL 'null'分析及解决方法:这是由于tomcat下的server.xml里的没有配置好或没有相应的配置,可按如下配置:<="" auth="Container" name="”userDatabase”" p="" type="javax.sql.DataSource">maxActive="50" maxIdle="30" maxWait="10000"logAbandoned="true" username="sa" password="nenu"driverClassName="com.microsoft.jdbc.sqlserver.SQLServerD river"url="jdbc:microsoft:sqlserver://localhost:1433;DatebaseNa me=st"/>4、ERROR:Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'分析及解决方法:这是由于JDBC的驱动没有装,可将sqlserver需要的三个驱动包msbase.jar,mssqlserver.jar,msutil.jar拷贝到tomcat的安装目录下的 common\lib文件夹下面即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
笔者记录下自己在开发过程中所遇到的一些常见的错误和警告,以供参考:1、警告:Settings: Could not parse struts.locale setting, substituting default VM locale分析及解决方法:这是默认环境没有设置好,有两种方法可以解决。
在WEB-INF/classes/struts.properties或者src/struts.properties文件中如下配置:struts.locale=en_GB;或者在struts.xml中如下配置:<constant name="struts.locale" value="en_GB" />2、警告:No configuration found for the specified action: 'sum.action' in namespace: ''. Formaction defaulting to 'action' attribute's literal value.分析及解决方法:由于jsp文件中标签<s:form action=”sum.action”/>它对应的源文件是<form action=”/context/sum.action”>,sturts把action属性值当成了一个action name了,但这也不影响使用;但是对于使用了动态方法调用(struts.enable.DynamicMethodInvocation = true)就没有那么幸运了,提交时就会得到HTTP Status 404 - /context/sum错误。
对于以上情况,可以把标签写成<s:form action=”sum”/>及<s:form action=”sum!save”/><s: namespace=”your value”action=”sum!save” />3、ERROR:Cannot create JDBC driver of class '' for connect URL 'null'分析及解决方法:这是由于tomcat下的server.xml里的<Resource>没有配置好或没有相应的<Resource>配置,可按如下配置:<Resource name=”userDatabase” auth="Container" type="javax.sql.DataSource"maxActive="50" maxIdle="30" maxWait="10000"logAbandoned="true" username="sa" password="nenu"driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"url="jdbc:microsoft:sqlserver://localhost:1433;DatebaseName=st"/>4、ERROR:Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'分析及解决方法:这是由于JDBC的驱动没有装,可将sqlserver需要的三个驱动包msbase.jar,mssqlserver.jar,msutil.jar拷贝到tomcat的安装目录下的 common\lib文件夹下面即可。
5、ERROR:Cannot create resource instance分析及解决方法:这是由于<Resource .../>里type属性设置不正确,按不同的数据库相应的做出调整就好了。
6、ERROR:NotFoundException: Name jdbc is not bound in this Context分析及解决方法:这个很明显,上下文中找不到所给的jdbc名称,仔细查看纠正一下就好了7、严重: Exception starting filter struts2、Error filterStart、Context [/struts2] startup faileddue to previous errors分析及解决方法:(1)在struts.xml中action中的包路径出错(2)在工程中导入一个commons-fileupload的包8、java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'info'无效分析及解决方法:出现这情况由两种可能性:(1)配置的数据库中没有info表或者是表名写错了,这是就要将其更改为info表所在的数据库名或表名;(2)程序当前打开的数据库并非是我们所配置的数据库,虽然机率很小,但是在以不同用户身份登录时就可能出现这种情况,因为server默认打开的是master数据库。
这时可以将你要使用的数据库设置为默认或者是在sql语句中打开数据库(如:”use st select * from info”)9、struts2中使用datetimePicker组件时的乱码显示分析及解决方法:参考datetimePicker的使用.docx10、log4j:WARN No appenders could be found for logger(mons.digester.Digester.sax)log4j:WARN Please initialize the log4j system properly分析及解决方法:由于缺少log4j.properties文件引起的,或是该文件位置放置不正确。
可以按要求格式创建一个log4j.properties文件,放到src目录下(会自动拷贝到WEB-INF\classes 目录下)或直接放到WEB-INF\classes11、在struts2表单验证过程中,当遇到验证错误或者类型转换错误时,struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面, 最后这个信息会显示在相应的错误页中.有时我们不希望这些错误出现在页面中,而是用自己的方式来表达,可以通过以下操作实现:1)表单标签有一个theme(主题)属性, 默认主题是使用表格; 还有Ajax等主题, 这里换为simple主题, 表示不再用表格封装这个标签;这样就可以消除自动错误提示了2)可以使用<s:fielderror/>来显示错误,如果错误时ActionError,就需要<s:actionerror/>标签来显示3)在表单提交失败时,希望原来填过的值可以保留,struts2的s标签自动有保留功能,html标签需要通过request的el表达式实现保留12、Struts2环境下,使用自己定义的拦截器时,报HTTP-500错误分析及解决方法:HTTP-500是指内部服务器错误,所以错误处在运行的环境配置中;如果这时报NullPointerException,那错误很可能就是因为action.xml中忘记配置<interceptor-ref name="defaultStack" />,这样就会导致struts2默认拦截器不能使用,给程序运行造成严重影响13、INFO:The Apache Tomcat Native library which allows optimal performance in productionenvironments was not found on the java.library.path分析及解决方法:这时由于tomcat没能成功加载APR,可以到http://tomcat.heanet.ie/native/下载tcnative-1.dll 文件,这里需要注意的是tcnative-1.dll有32位和64位两种,根据自己的JDK选择合适的tcnative-1.dll,放到%JDK-home%\bin目录下,再重启tomcat就能加载APR了14、[SQLServer]当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'person' 中的标识列插入显式值分析及解决方法:由于标识列是自动增长类型,在默认情况下是不能插入显式值,也就是IDENTITY_INSERT默认为OFF; 15、使用Hibernate时,表中字段(例如:zd)的默认值失效分析及解决方法:由于hibernate通过session.save()来进行数据添加动作,如果程序中zd没有赋值,那么程序将会使用它的数据类型的默认值来进行添加,从而取代了数据库中配置好的默认值。
可以通过以下操作来实现表中默认值生效:1)在相关表的映射XML文件的class项增加:dynamic-insert="true";2)同时需要在相关字段设置:not-null=”false”16、ids for this class must be manually assigned before calling save(): hibernate.Person分析及解决方法:hibernate出现这个错误的原因有可能因为,你的表中有个主键。
但是你插入的(调用save)时那个值是null.如果主键是int、short或long类型,可以设置generator class为native;如果是char类型,可以在其对应的Person.hbm.xml里的id标签里添加unsaved-value="null";或者在数据表里给主键添加默认值,然后在对应的id标签里添加dynamic-insert="true"17、JSP中out.print("<scriptlanguage='javascript'>Response.Redirect('login.jsp')</script>");语句跳转不成功:分析及解决方法:貌似没有问题,其实Response.Redirect()是asp中的跳转方法,可以使用JavaScript中的location.href='login.jsp'来替换,或者直接用java中的response.sendRedirect(‘url’)18、Exception:Underlying input stream returned zero bytes分析及解决方法:由于数据表中有个字段为text类型的,不能将一个"NULL"值和一个""(empty)存储在text类型的字段中。