Struts2问题总结

Eclipse下struts2.5环境搭建与struts2.3的区别

在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文件过滤器的配置

配置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.xml文件时需要struts的dtd版本头部信息,这个版本信息要与struts版本对应,
2.5版本的是

2.3版本的将2.5改成2.3即可

sturt2解决 Error setting expression ‘XXX’ with value ‘xxx’

第一种可能:
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

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就可以了

JSR 356 WebSocket (Java WebSocket 1.1) support is not available when running on Java 6

jre版本太低,使用jre8即可

Tomcat “At least one JAR was scanned for TLDs yet contained no TLDs”

方法一:

修改$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版本升级带来的重复修改代价

Tomcat “Offending class: javax/servlet/Servlet.class”

webapp中WEB-INFO/lib下,有重复的servlet包。将servlet包从webapp的部署文件中删除以后。重启。

Tomcat 启动后先将tomcat/common/lib目录下的jar包全部读入内存,如果webapps目录里的应用程序中WEB-INF/lib目录下有相同的包,将无法加载,估计不同版本的包之间也会造成类似问题。
因此建议尽量不要把jar包放入tomcat/common/lib目录下,应该放入WEB- INF/lib目录下。

Tomcat文件目录

/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放于此目录

你可能感兴趣的:(Java,框架学习)