Struts2配置
Struts是应用较为广泛的MVC框架,对servlet作了较好的封装,可以快速的实现MVC模式及拦截器等功能,并且可以方便的和spring结合使用。本文将对struts2的基本配置进行简单说明(这里仅涉及纯Struts2配置,不涉及与Spring的整合)。
首先下载并应用struts2的jar包,官网地址http://struts.apache.org/,本配置说明基于struts2.1.8版本。需要说明的是,Struts2与原Struts1完全不同,Struts2已经整合了xwork,并且已经完全重构,整个Struts2包括一个struts2-core-2.1.8.1.jar核心包和十几个plugin插件包,使用不同的插件包,在配置上略有不同,需要根据实际需要对插件包进行功能裁剪,否则很可能发生配置错误而无法运行。
1.创建一个Action。创建一个Action比较简单,类型扩展自com.opensymphony.xwork2.ActionSupport类型,然后在类型中实现execute方法即可。
package com.test.action; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class ActionTestAction extends ActionSupport { private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String execute() { //do something here userName = "Your Name is somebody!"; return this.SUCCESS; } }
2.创建jsp视图。创建一个普通的jsp页面ActionTest.jsp作为输出视图。在视图中进行逻辑控制和数据输出就需要使用Struts标签了。Struts标签需要在页面上先声明,然后就可以直接使用struts标签访问Action中的各个get属性了。JSP视图如下:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> 下面是action属性输出:<br /> <s:property value="userName" /> </body> </html>
3.配置struts的配置文件。struts配置文件可以是任意名称存放到任意位置,但为了方便加载和维护,一般使用struts的默认配置名称和默认加载位置。默认配置名称为struts.xml,默认加载位置为webroot/WEB-INF/classes/struts.xml。配置文件实现由action到jsp视图的映射,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> <include file="struts-default.xml"></include> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple" /> <constant name="struts.enable.SlashesInActionNames" value="true" /> <constant name="struts.multipart.maxSize" value="20000000"></constant> <package name="strutsTest" extends="struts-default" abstract="true"> <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 --> <default-interceptor-ref name="defaultStack"></default-interceptor-ref> <global-results> <result name="error">/error.jsp</result> <result name="text" type="plainText"></result> </global-results> </package> <package name="test" extends="strutsTest" namespace="/"> <action name="ActionTest" class="com.test.action.ActionTestAction"> <result name="input">/ActionTest.jsp</result> <result name="success" type="dispatcher">/ActionTest.jsp</result> </action> </package> </struts>
在struts.xml中配置了一些全局参数和一个全局的顶级package——strutsTest(从struts-default扩展),然后又从strutsTest扩展了另一个package——test,在test Package中配置了action ActionTest,该action由com.test.action.ActionTestAction类实现,success视图映射到/ActionTest.jsp文件。
4.配置web.xml。struts.xml文件配置完成以后,需要在web.xml中配置struts的过滤器。struts并没有使用servlet和servlet-mapping,而是使用filter和filter-mapping,配置内容如下:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/struts/*</url-pattern> </filter-mapping>
一般并不需要所有的请求都经过struts(像css、js、gif、jsp等文件并不需要由struts来处理),因此在url-pattern中最好使用后缀匹配策略,所有需要struts处理的url请求都使用相同的后缀,后缀名称可以是任意字符串,但一般会使用.action或.do或其它非后缀形式的特征字符串。需要注意的是有一些资源是在struts的jar包中的,对于这些资源的请求也需要由struts来处理,否则会出现无法找到脚本、css、模板等错误,这些资源都通过“/struts/”来访问,这里配置为“/struts/*”即可。
经过以上的配置,在浏览器中用http://127.0.0.1:8080/jtest/ActionTest.action来访问该action,页面输出:
下面是action属性输出: Your Name is somebody!
前面已经提过到过,如果加入了不同的struts插件,那么在配置上会有一些细微的差别。如果没有整合Spring框架,那么就不要引入struts2-spring-plugin-2.1.8.1.jar包,否则会出现com/opensymphony/xwork2/spring/SpringObjectFactory.getClassInstance找不到对象工厂的异常。如果用到json并引入了struts2-json-plugin-2.1.8.1.jar包,那么在配置顶级package包时就不是从struts-default扩展了,而是从json-default扩展。这些细节虽小,但如果不注意很能导致struts无法启动运行。
完
原发布于Struts2配置(2010-10-28 11:30),现转于此!