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漏洞。
在保障应用程序的安全性方面,持续的关注和努力非常重要。
- 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类型的字段中。