在报错的时候,一定要看控制台的解释:
注:我使用的是ecplise, jdk 1.8 , strust2 框架:2.5.26
tomcat 7, 8.5
在使用新版本的框架库时,注意jdk,和tomcat尽量也使用高版本的,不然会引起版本冲突,不符,不必要的麻烦
strust2 框架基本包:
strust2框架
其struts2 -2.5.26基本引入jar包13个
jar包大概作用:
asm-7.3.1.jar
操作Java字符码的类库
asm-commons-7.3.1.jar
提供了基于事件的表现形式
asm-tree-7.3.1.jar
提供了基于对象的表现形式
struts2-core-2.5.26.jar
Struts2框架的核心类库
(注意xwork-core.jar包已与struts2-core-2.5.26.jar整合)
ognl-3.1.28.jar
对象图导航语言——Object Graph Navigation Language,Struts2框架通过其读写对象的属性
freemarker-2.3.30.jar
Struts2标签模板使用的类库
javassist-3.20.0-GA.jar
JavaScript字节码解释器
commons-fileupload-1.4.jar
Struts2文件上传组件依赖包
commons-io-2.6.jar
Struts2的输入输出,传文件依赖的JAR
commons-lang3-3.8.1.jar
包含一些数据类型工具,是对java.lang包的增强
commons-logging-1.2.jar
Jakarta Commons-logging(JCL)是apache最早提供的日志的门面接口。提供简单的日志实现以及日志解耦功能。 JCL能够选择使用Log4j(或其他如slf4j等)还是JDK Logging,但是他不依赖Log4j,JDK Logging的API。如果项目的classpath中包含了log4j的类库,就会使用log4j,否则就使用JDK Logging。
log4j-api-2.12.1.jar
Struts2的日志管理组件依赖包的API
log4j-core-2.11.1.jar
Struts2的日志管理组件依赖包
常见bug
web.xml
<!--配置核心控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
从控制台解释中知道,是没有找到这个控制器类,我试着翻阅struts2-core-2.5.jar包,发现确实没有,经过查阅得知:
原来在2.5以上的版本,语句org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter发生了变化,其中.ng的部分被去掉了,在eclipse中编辑该语句去掉.ng,变为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,成功启动服务器。
这里是因为缺少log4j-api-2.12.1.jar 包,导入之后就可以了.
使用tomcat运行时报错org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
原因:tomcat版本冲突,如果使用的是tomcat7,可以升到tomcat8.5
struts2配置默认页面,并捕捉404
见struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 4个开发模式常用配置的简介-->
<!-- 开启使用开发模式,详细错误提示 -->
<constant name="struts.devMode" value="true"/>
<!-- 指定每次请求到达,重新加载资源文件 -->
<constant name="struts.i18n.reload" value="true"/>
<!-- 指定每次配置文件更改后,自动重新加载 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 指定XSLT Result使用样式表缓存 -->
<constant name="struts.xslt.nocache" value="true"/>
<!--我想实现的功能,不依靠web.xml,在项目启动跳转默认登录网页,如果网页输入有误,跳转到error-->
<!--即在项目启动时是登录界面,而在项目后缀输入不正确的地址,则会跳转到error -->
<!--刚开始 我一直用<default-action-ref name="Login" /> 指定默认路径,但
这玩意就是个坑,它确实是默认这个路径,但如果name不存在时,它同样也指定默认路径,也就是说
项目启动时是登录界面,而如果地址错误,依旧还是跳登录界面-->
<package name="default" namespace="/" extends="struts-default">
<action name="" >
<result >/jsp/IndiLogin.jsp</result>
</action>
<action name="login" class="com.k.action.userAction" method="execute">
<result name="error">/jsp/IndiLogin.jsp</result>
<result name="success">/jsp/IndiShow.jsp</result>
</action>
<action name="error" >
<result >/jsp/error.jsp</result>
</action>
<action name="/*">
<result type="redirect">error</result>
</action>
</package>
</struts>