1. 程式人生 > >Struts2的使用註解配置Action(零配置)

Struts2的使用註解配置Action(零配置)

1,首先引入struts2註解的jar包:struts2-convention-plugin.jar

         <!-- struts2註解 -->
	 <dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-convention-plugin</artifactId>
		<version>${struts2-version}</version>
	</dependency>

2,classpath下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" /> -->
	<!-- 設定瀏覽器是否快取靜態內容,預設值為true(生產環境下使用),開發階段最好 關閉 -->   
    <constant name="struts.serve.static.browserCache" value="false" />
	<!-- 當 struts的配置檔案修改後,系統是否自動重新載入該檔案,預設值為false(生 產環境下使用),開發階段最好開啟 --> 
	<constant name="struts.configuration.xml.reload" value="true"/>
	  	
	<!-- 請求引數的編碼方式--> 
    <constant name="struts.i18n.encoding" value="UTF-8"/> 
	<!--  struts2攔截器預設攔截的字尾名     多個可以用逗號隔開  用於做網站偽靜態化-->
	<constant name="struts.action.extension" value="html"/>
	<!-- 簡單主題 -->
	<constant name="struts.ui.theme" value="simple" />
	<!-- 配置檔案上傳的總大小 -->
	<constant name="struts.multipart.maxSize" value="2097152000"></constant>
	<!-- 把struts的請求委託給spring管理, 作用:建立Action例項的過程由spring處理,其他的還是由struts2自己處理 -->
	<constant name="struts.objectFactory" value="spring" /> 
	 <!-- 是否開啟動態方法呼叫--> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/> 
	

	<!-- Struts2約定限制結果頁面必須放到/WEB-INF/content/目錄中,可以通過下面常量來修改這個限制。-->
	<constant name="struts.convention.result.path" value="/WEB-INF/jsp" />
	<!-- 約定Action包位置:可以使用的Action的祖包,預設為沒有, 設定為 cn.javass.ssh 就可以讀取這個包及其子包的所有頭上註冊了【 @Action 】 的類。-->
	<!-- <constant name="struts.convention.action.packages" value="cn.hl.s2sh.user.controller" /> -->
	<!-- 預設配置包路徑包含action,actions,struts,struts2的所有包都會被struts作為含有Action類的路徑來搜尋。通過設定struts.convention.package.locators屬性來修改這個配置。 -->
	<constant name="struts.convention.package.locators"  value="action,actions,struts,struts2,controller" /> 
	<!-- 約定Action類名:要求Action的命名必須以Action為字尾,可以使用下面常量來修改後綴限制 -->
	<constant name="struts.convention.action.suffix"  value="Action" /> 
	
	
	
	
    
    <!-- 配置全域性的包  繼承自json-default,json-default繼承自struts-default包 --->
	<package name="mypackage" extends="json-default">
		<!-- <interceptors>
			註冊自定義登入攔截器
			<interceptor name="login" class="com.hl.zoneSystem_v01.struts.common.MyInterceptor" />
			自定義攔截器棧
			<interceptor-stack name="myInterceptor">
				<interceptor-ref name="login" />
				<interceptor-ref name="defaultStack">
					<param name="modelDriven.refreshModelBeforeResult">true</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors> -->
		<!-- 定義預設棧 -->
		<!-- <default-interceptor-ref name="myInterceptor" /> -->
		<!-- 定義預設action -->
		<!-- <default-action-ref name="notFound" /> -->
		
		<!-- 全域性結果集 -->
		<global-results>
			<!-- ajax請求的結果集  表單驗證用,值為true/false-->
			<result type="json" name="ajax">
				<param name="root">message</param>
			</result>
			<!-- ajax請求的結果集  訊息推送用,值為數字-->
			<result type="json" name="ajax2">
				<param name="root">message2</param>
			</result>
			<!-- ajax請求的結果集 頁面資料傳送 返回map-->
			<result type="json" name="jsonResult">
				<param name="root">jsonMap</param>
			</result>
			<!-- 下載 -->
			<result name="downloadFiles" type="stream">
				<!-- 對應web中下載配置:下載型別無限制  檔案編碼UTF-8-->
				<param name="contentType">application/octet-stream;charset=UTF-8</param>
				<param name="inputName">inputStreamFile</param>
				<!-- 對應web中下載配置:response.setHeader("Content-Disposition", "attachment;filename="+newUser.getFilename()); -->
				<param name="contentDisposition">attachment;filename=${fileName}</param>
				<!-- 對應web中下載配置:byte[] b = new byte[1024]; -->
				<param name="bufferSize">1024</param>
			</result>
			<!-- 專案根頁面 -->
			<result name="index" type="redirect">/index.jsp</result>
			<!-- login 登入 -->
			<result name="loginUI">/login.jsp</result>
			<!-- 前臺全域性訊息顯示頁面 -->
			<result name="clientMessage">/message.jsp</result>
			<!-- action錯誤,處理結果頁面   -->
			<result name="error">/error.jsp</result>
		</global-results>
		<!-- 全域性異常 -->
		<!-- <global-exception-mappings>
			<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
		</global-exception-mappings> -->
		
	</package>
	
	
	
	
</struts>


3,action中寫法

controller包下

package cn.hl.s2sh.user.controller;



import net.sf.ehcache.Cache;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ExceptionMapping;
import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.hl.s2sh.base.controller.struts2.BaseAction;
import cn.hl.s2sh.base.plugins.cache.CachedManager;

/**
 * @Description: user控制器
 * @author hl
 * @date 2014-11-18 下午11:10:21
 *
 */
@Controller
@Scope("prototype")
@ParentPackage("mypackage")
@Results({
	@Result(name="test1",location="test.jsp"),
	@Result(name="test2",location="/WEB-INF/jsp/test2.jsp"),
	@Result(name="main_postTalk",type="redirectAction",location="main_mindex",params={"uid","${uid}"})
})
@ExceptionMappings({@ExceptionMapping(exception = "java.lange.RuntimeException", result = "error") })
@Namespace(value="/u")
public class UserAction extends BaseAction{
	
	
	//log4j
	private static final Log log = LogFactory.getLog(UserAction.class);
	
	
	
	
	
	@Action("/test1")
	public String test1(){
		
		CachedManager.putObjectCache("phoneCode", "a", "aaa");
		Cache c = CachedManager.getCache("phoneCode");
		Cache c2 = CachedManager.getCache("phoneCode2");
		System.out.println("--------test1---1");
		//log.debug("--manager-" + manager);
		
			
		
		return "test1";
	}
	
	
	
	
	
	@Action(value="test2")
	public String test2(){
		
		String s = (String) CachedManager.getObjectCache("phoneCode", "a");
		
		System.out.println(s);
		
		
		CachedManager.remove("phoneCode", "a");
		
		System.out.println("--------test2---2");
		
		return "test2"; 
	}
	
	
	
	
	
	

}

部署啟動tomcat,訪問

localhost:8080/專案名/u/test1.html

localhost:8080/專案名/u/test2.html

localhost:8080/專案名/test1.html