在struts2.3中,需要导入9个常用jar包。
(1)struts2-core-2.x.x.jar :Struts 2框架的核心类库
(2)xwork-core-2.x.x.jar :XWork类库,Struts 2在其上构建
(3)ognl-3.x.x.jar :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
(4)freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写
(5)commons-logging-1.x.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
(6)commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
(7)commons-io-2.0.1.jar 新版本的fileupload也必须加入此包
(8)commons-lang3-3.1.jar
(9)javassist-3.11.0.GA.jar
但是在struts2.5中是没有xwork那个jar包的,所以不用导入也找不到,更不用再去低版本里去单独下载这个包,因为它和struts-core包合并了。其次,当我使用这8个包部署项目后,启动Tomcat会报错,原因是还少了log4j和slf4j这两个jar包,导入后就可以解决问题了。所以前后一共是10个jar包。
配置web.xml文件,在编写标签时,2.3版本是
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
2.5写法是org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,它与2.3版本相比少了一个ng包。
编写struts.xml文件时需要struts的dtd版本头部信息,这个版本信息要与struts版本对应,
2.5版本的是
2.3版本的将2.5改成2.3即可
第一种可能:
struts2中表单提交按钮:
type="Submit" name="Submit" value=" 查 询 " />
这样会报题目的错误.其实把submit的name属性删掉或者
type="button" name="Submit" value=" 查 询 " οnclick="document.form.submit();"/>
都是可以解决的,估计凡是在struts2中没有定义getter,setter方法的form中的input都要被抛出异常
第二种可能:
原来的pojo类中重写了构造方法,却没有提供默认的空构造函数。
加上public Book(){};即可。
java.lang.UnsupportedClassVersionError: org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter : Unsupported major.minor version 51.0 (unable to load class org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter)
具体情况应该是tomcat的jre版本不支持编译,我原来用的jre6,升级到jre8就可以了
jre版本太低,使用jre8即可
方法一:
修改$CATALINA_BASE/conf/catalina.properties文件
添加org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true选项。
方法二:
1.调整Tomcat对应类的log级别
修改${tomcat}/conf/log4j.properties
##解除类org.apache.jasper.compiler.TldLocationsCache的log
org.apache.jasper.compiler.TldLocationsCache.level = FINE
2.调整${tomcat}/conf/catalina.properties,将提示的jar添加到不扫描清单中
tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,\
catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\
jasper.jar,jasper-el.jar,ecj-*.jar,\
tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\
tomcat-jni.jar,tomcat-spdy.jar,\
tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
tomcat-jdbc.jar,\
tools.jar,\
commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
commons-math*.jar,commons-pool*.jar,\
jstl.jar,\
geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
junit.jar,junit-*.jar,ant-launcher.jar,\
json-lib-*.jar,poi-*.jar
注意点:
1.如果使用eclipse server插件、Sysdeo tomcat插件启动Tomcat,此配合可能无效
2.步骤1调整完后,最好清除下以下两个文件夹
${tomcat}/conf/Catalina
${tomcat}/work/Catalina
3.尽量使用 * 实现模式匹配,以避免因jar版本升级带来的重复修改代价
webapp中WEB-INFO/lib下,有重复的servlet包。将servlet包从webapp的部署文件中删除以后。重启。
Tomcat 启动后先将tomcat/common/lib目录下的jar包全部读入内存,如果webapps目录里的应用程序中WEB-INF/lib目录下有相同的包,将无法加载,估计不同版本的包之间也会造成类似问题。
因此建议尽量不要把jar包放入tomcat/common/lib目录下,应该放入WEB- INF/lib目录下。
/bin:存放启动和关闭tomcat的脚本文件;
/conf:存放tomcat的各种配置文件,比如:server.xml
/server/lib:存放tomcat服务器所需要的各种jar文件(jar文件只可被tomcat 服务器访问)
/server/webapps:存放tomcat自带的两个web应用:admin应用和manager应用。
/common/lib:存放tomcat服务器以及所有web应用都可以访问的jar文件夹(web和tomcat服务器都可访问此jar)
/shared/lib:存放web都可访问的jar文件。(可以被所有的web访问,但不能被tomcat访问)
/logs:存放tomcat的日志文件
/webapps:当发布web应用时,默认情况下把web应用文件放于此目录下
/work:tomcat把由jsp生成的Servlet放于此目录