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無法啓動運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章