1、struts2.2.1建立简单的项目需要八个包
commons-logging-1.0.4.jar
freemarker-2.3.16.jar
ongnl-3.0.jar
struts2-core-2.2.1.jar
xwork-core-2.2.1.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
启动tomcat会出现如下错误(部分):
Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency! at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:165) ... 48 more Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
经过上网查找资料解决办法如下:
帖子:http://topic.csdn.net/u/20100825/22/bc4344a1-9cd9-45a1-a12d-012a9a3e99b5.html
1、在使用struts-2.2.1时,需要引入javassist-3.7.ga.jar,而这个在struts-2.2.1\lib下是没有的,需要在struts-2.2.1\apps\struts2-blank-2.2.1.war下的lib中找。
2、把ognl-3.0.jar换成ognl-2.6.11.jar这个方式也可以。使用ognl-3.0.jar还得再搭配javassist-3.7.ga.jar
2、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>
filter-class可以为:org.apache.struts2.dispatcher.FilterDispatcher(官方不推荐使用)
url-pattern可以为:*.action(但这样写struts2不会对其他的url进行拦截,如果用户访问struts2中的资源如:/struts/dojo/dojo.js,由于该文件实际不存在,其位于struts2的jar包中,如果不交给struts2的filter去处理,页面就会抛出404错误,所以推荐使用"/*").
3、struts配置文件头
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default"> <global-results> <result name="error">/error.jsp</result> </global-results> <action name="query" class="action.BookAction"> <result name="result">/result.jsp</result> </action> </package> </struts>
4、导入struts标签:<%@ taglib prefix="struts" uri="/struts-tags" %>
5、使用Ajax主题:<strutsx:head theme="ajax" /> 主题标签不能使用<struts/>需加x:<strutsx/>以及添加 struts2-dojo-plugin-2.1.6.jar。否则后者会抛出Template /template/ajax/head.ftl not found。
前者会抛出:
Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl.
7、更改.action后缀
1、在web.xml中filter配置struts.action.extension参数
<init-param> <param-name>struts.action.extension</param-name> <param-value>action</param-value> </init-param>
2、在src下添加属性文件struts.poperties,在文件中修改:struts.action.extension=action
3、在struts.xml中配置struts.action.extension属性
<constant name="struts.action.extension" value="action"></constant>