Struts2的使用註解配置Action(零配置)
阿新 • • 發佈:2019-01-23
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