胡扯
在struts学习过程中,很多教程用的都是strut-2.3.31,而现在最新的是struts-2.5.10,升级之后的strut2技能总是会有点变化的。还以为只要对着教程敲就行了,没想到不停地报错,简直无法让人享受敲代码的乐趣呀!
struts-2.3.31
1. 引入jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
jarlist.txt
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
xwork-core-2.3.16.3.jar
2. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<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>
</web-app>
3. struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<!-- 所有的Action定义都应该放在package下 -->
<package name="crazyit" namespace="/" extends="struts-default">
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
struts-2.5.10
1. 引入jar
asm-5.1.jar
asm-commons-5.1.jar
asm-tree-5.1.jar
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
commons-lang3-3.4.jar
commons-logging-1.1.3.jar
freemarker-2.3.23.jar
jarlist.txt
javassist-3.20.0-GA.jar
log4j-api-2.7.jar
ognl-3.1.12.jar
struts2-core-2.5.10.jar
相对于struts-2.3.31,2.5.10版本需要导入的基本jar要少了xwork-core-2.3.16.3.jar,多了
log4j-api-2.7.jar。由于xwork-core已经整合到struts-core中了,所以这里我们在下载struts-2.5.10/lib找不到xwork-core的字眼,但我们可以用解压软件打开struts-core查看内部的文件,可以发现到之前版本所没有的xwork。如果没有
log4j-api-2.7.jar`,在web.xml和struts.xml配置正确的前提下,会报错如下错误:
2. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="starter" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<!--
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
-->
<!-- 以下路径中没有ng目录 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
细心的读者可以发现一个很大的不同是,2.5.10版本配置<filter-class>
指定类文件路径中少了一个ng
。是的没有错,我们只要打开struts2-core-2.5.10.jar
即可发现里面不存在子目录ng
。也只有通过上面的路径才能找到类StrutsPrepareAndExecuteFilter
。如果没有配置正确的路径就会报以下错误:
3. 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>
<constant name="struts.devMode" value="true" />
<!-- 所有的Action定义都应该放在package下 -->
<package name="crazyit" namespace="/" extends="struts-default">
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>