现在的位置: 首页 > 综合 > 正文

Struts2配置

2013年06月01日 ⁄ 综合 ⁄ 共 4094字 ⁄ 字号 评论关闭

       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无法启动运行。

抱歉!评论已关闭.