Struts2的結果型別
result
- 每個 action 方法都將返回一個 String 型別的值, Struts 將根據這個值來決定響應什麼結果.
- 每個 Action 宣告都必須包含有數量足夠多的 result 元素, 每個 result 元素分別對應著 action 方法的一個返回值.
- result 元素可以有下面兩個屬性
- name: 結果的名字, 必須與 Action 方法的返回值相匹配, 預設值為 success
- type: 響應結果的型別. 預設值為 dispatcher
結果型別
在struts2-core-2.3.31.jar包下的struts-default.xml配置檔案:
理解struts-default.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>
<!--
package:是struts2框架底層提供出來的
* name:用於讓其他包來繼承的
* abstract:設定為抽象包,下面不能定義action標籤
-->
<package name="struts-default" abstract="true">
<!--
result-types:宣告結果型別
* name:結果型別的名稱
* class:結果型別對應類的完整路徑
* default:設定其為預設,true是預設
-->
<result-types>
<!-- 轉發到action -->
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<!-- 轉發到jsp -->
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<!-- 重定向到jsp -->
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<!-- 重定向到action -->
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<!-- 用於下載 -->
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
<!--
interceptors
* interceptor:宣告攔截器
* name:攔截器的名稱
* class:對應攔截器類的完整路徑
-->
<interceptors>
<interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
<interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
<interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>
<interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" />
<interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />
<interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
<interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>
<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
<interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>
<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
<interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
<interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>
<interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
<interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
<interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>
<interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
<interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
<interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
<interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
<interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />
<interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />
<interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
<interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />
<interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" />
<interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" />
<!-- Basic stack -->
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
<!--
interceptor-stack:攔截器棧
* struts2框架通過使用攔截器棧,進而使用上面宣告好的攔截器
* 在攔截器棧裡面,存放了一些上面宣告好的攔截器
* 攔截器棧相當於一個list集合,執行的時候是按照存放的先後順序來執行
-->
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="debugging"/>
</interceptor-stack>
</interceptors>
<!-- 配置在struts2框架執行時,預設要執行的是哪個攔截器棧,defaultStack -->
<default-interceptor-ref name="defaultStack"/>
<!-- 配置在struts2框架執行時,如果沒有為action指定class的話,預設要執行的class的類名 -->
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
</package>
</struts>
結果型別: dispatcher
- dispatcher 結果型別是最常用的結果型別, 也是 struts 框架預設的結果型別
該結果型別有一個 location 引數, 它是一個預設引數
- 檢視API文件org.apache.struts2.dispatcher.ServletDispatcherResult
- 檢視API文件org.apache.struts2.dispatcher.ServletDispatcherResult
dispatcher 結果型別將把控制權轉發給應用程式裡的某個資源
- dispatcher 結果型別不能把控制權轉發給一個外部資源. 若需要把控制權重定向到一個外部資源, 應該使用 redirect 結果型別
結果型別: dispatcher的兩種寫法
<!-- 方法一:type表示結果型別,預設值是dispatcher(轉發) -->
<result name="success" type="dispatcher">/resulttype/success.jsp</result>
<!-- 方法二:
* type="dispatcher":struts2執行時,根據type="dispatcher"的值執行
org.apache.struts2.dispatcher.ServletDispatcherResult
* param name="location":該配置要呼叫ServletDispatcherResult中的setLocation()
* location:表示ServletDispatcherResult中的屬性名
* 該配置要呼叫ServletDispatcherResult中的setLocation("/resulttype/success.jsp")
-->
<result name="success" type="dispatcher">
<param name="location">/resulttype/success.jsp</param>
</result>
結果型別: dispatcher的底層程式碼說明
結果型別: redirect
- redirect 結果型別將把響應重定向到另一個資源, 而不是轉發給該資源.
- redirect 結果型別接受下面這些引數:
- location: 用來給出重定向的目的地
- parse: 用來表明是否把 location 引數的值視為一個 OGNL 表示式來解釋. 預設值為 true
- redirect 結果型別可以把響應重定向到一個外部資源
- struts-default.xml中的
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
結果型別: redirect的底層程式碼說明
結果型別: redirectAction
- redirectAction 結果型別把響應重定向到另一個 Action
- redirectAction 結果型別接受下面這些引數:
- actionName: 指定 “目的地” 動作的名字. 它是預設屬性
- namespace: 用來指定 “目的地” 動作的名稱空間. 如果沒有配置該引數, Struts 會把當前 Action 所在的名稱空間作為 “目的地” 的名稱空間
檢視API文件
結果型別: redirectAction的底層程式碼說明
編寫ResulttypeAction檔案
package cn.itcast.resulttype;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class ResulttypeAction extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("ResulttypeAction ************ execute()");
//struts2框架將request封裝成一個map集合,通過struts2框架提供工具類ServletActionContext的getRequest()方法來獲取request
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("username", "username_request");
return "success";
}
}
編寫struts_resulttype.xml
方法一: 預設為轉發
type:指定結果型別,預設為轉發”dispatcher”
<?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>
<package name="resulttype" namespace="/resulttype" extends="struts-default">
<action name="resulttypeAction" class="cn.itcast.resulttype.ResulttypeAction">
<!-- 方法一
預設為轉發
* type:指定結果型別,預設為轉發"dispatcher"
-->
<result name="success" type="dispatcher">/resulttype/success.jsp</result>
</action>
</package>
</struts>
引入自定義配置檔案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>
<!-- 引入自定義配置檔案 -->
<include file="cn/itcast/primer/struts_primer.xml"></include>
<include file="cn/itcast/resulttype/struts_resulttype.xml"></include>
</struts>
jsp頁面
form.jsp頁面
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/resulttype/resulttypeAction.action"
name="form1" method="post">
<input type="submit" value="提交">
</form>
</body>
</html>
success.jsp頁面
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
resulttype : ${requestScope.username}
</body>
</html>
測試
轉發
方法一: 預設為轉發
<result name="success" type="dispatcher">/resulttype/success.jsp</result>
方法二:標準寫法
<!-- 方法二 :標準寫法 -->
<result name="success" type="dispatcher">
<!--
param:引數
* name:引數的名稱為"location"
實際上,是struts2框架底層的StrutsResultSupport類的setLocation()提供的
public void setLocation(String location) {
this.location = location;
}
* 所謂的引數,應該是set方法或者get方法後面跟的名稱才是引數名
-->
<param name="location">/resulttype/success.jsp</param>
</result>
重定向
重定向到jsp:
<!--
重定向到jsp:org.apache.struts2.dispatcher.ServletRedirectResult
-->
<result name="success" type="redirect">
<param name="location">/resulttype/success.jsp</param>
</result>
重定向到action:
<!--
重定向到action:org.apache.struts2.dispatcher.ServletActionRedirectResult
* 無論是重定向到jsp還是重定向到action,底層程式碼都是一樣的
-->
<result name="success" type="redirectAction">
<!--
param:
* actionName:指定 “目的地” 動作的名字。指定的是struts.xml檔案action標籤的name屬性的值
* namespace:指定的是struts.xml檔案action對應的package下的namespace屬性的值
-->
<param name="actionName">helloWorldAction</param>
<param name="namespace">/primer</param>
</result>
struts_resulttype.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>
<package name="resulttype" namespace="/resulttype" extends="struts-default">
<action name="resulttypeAction" class="cn.itcast.resulttype.ResulttypeAction">
<!-- 方法一
預設為轉發
* type:指定結果型別,預設為轉發"dispatcher"
-->
<!-- <result name="success" type="dispatcher">/resulttype/success.jsp</result> -->
<!-- 方法二 :標準寫法 -->
<!-- <result name="success" type="dispatcher">
param:引數
* name:引數的名稱為"location"
實際上,是struts2框架底層的StrutsResultSupport類的setLocation()提供的
public void setLocation(String location) {
this.location = location;
}
* 所謂的引數,應該是set方法或者get方法後面跟的名稱才是引數名
<param name="location">/resulttype/success.jsp</param>
</result> -->
<!--
重定向到jsp:org.apache.struts2.dispatcher.ServletRedirectResult
-->
<!--<result name="success" type="redirect">
<param name="location">/resulttype/success.jsp</param>
</result> -->
<!--
重定向到action:org.apache.struts2.dispatcher.ServletActionRedirectResult
* 無論是重定向到jsp還是重定向到action,底層程式碼都是一樣的
-->
<result name="success" type="redirectAction">
<!--
param:
* actionName:指定 “目的地” 動作的名字。指定的是struts.xml檔案action標籤的name屬性的值
* namespace:指定的是struts.xml檔案action對應的package下的namespace屬性的值
-->
<param name="actionName">helloWorldAction</param>
<param name="namespace">/primer</param>
</result>
</action>
</package>
</struts>
相關推薦
深度解析struts2結果型別之chain
前一段時間,有關chain的機制著實困繞了許久.儘管網上有許多關於chain的解說,但要不是隻談大理論,不結合例項;要不就是隻有示例,沒有挖出示例背後的意義. 先解釋下chain吧: Chain:基本用途是構造成一條動作鏈。前一個動作將控
Struts2之result結果型別
伺服器端跳轉 客戶端跳轉 <action name="r1" > <result type="dispatcher" >/r1.jsp</result> </action>
Struts2中的結果型別解析
在struts2-core-2.0.11.2.jar根目錄下的struts-default.xml中配置了struts2提供的一系列結果型別 struts2的結果型別實現了com.opensymphony.xwork2.Result介面 ~~~~~~~~~~~~~~~~~~~ ty
Struts2的結果型別
result 每個 action 方法都將返回一個 String 型別的值, Struts 將根據這個值來決定響應什麼結果. 每個 Action 宣告都必須包含有數量足夠多的 result 元素, 每個 result 元素分別對應著 action 方法的一個
Struts2-結果和結果型別
結果 在struts中,action封裝請求引數,處理請求,處理結束後僅僅返回一個字串,這個字串就是結果(檢視資源的名字),在struts.xml檔案中,配置了檢視資源。 result節點: name指定檢視資源的名稱,對應action的返回字元type
Struts2 自定義結果型別
1、編寫一個類,實現com.opensymphony.xwork2.Result介面。 在該方法中可以拿到ServletAPI去完成你的功能 2、宣告自定義的結果型別:先聲明後使用 3、使用 小技巧:自定義的結果檢視,大家都要用時
Struts2 結果和結果類型
exe const 翻頁 決定 標準 標簽 local 1.0 數位 正如前面提到的,<results>標簽在Struts2的MVC框架的視圖中所扮演的角色。動作是負責執行業務邏輯。執行業務邏輯後,接下來的步驟是使用<results>標簽顯示的視
Struts2結果頁面的配置
1 結果頁面的配置 1.1 全域性結果頁面 全域性結果頁面:全域性結果頁面指的是,在包中配置一次,其他的在這個包中的所有的action只要返回了這個值,都可以跳轉到這個頁面。 針對這個包下的所有的action的配置都有效。 區域性的優先與全域性的
Struts2的型別轉換器不起作用
看了書上關於struts2的型別轉換器後覺得挺明白,結果一試一大堆bug。發現使用模型驅動時區域性配置一直不起作用,先貼程式碼: 登錄檔單: <%@ page language="java" contentType="text/html; charset=U
hibernate hql 查詢返回結果型別
hql和sql區別/異同 HQL ————————————SQL 類名/屬性 ————————— 表名/列名 區分大小寫,關鍵字不區分大小寫———— 不區分大小寫 別名————————————————別名 ?,從下標0開始計算位置(hi
struts2之型別轉換
http沒有型別的概念。在html表單中,每一項表單輸入只可能是一個字串或者一個字元陣列,在伺服器端,必須把String轉為特定的資料型別。所以在struts2中,從一個表單到一個Action物件的過程中出現了型別轉換的概念。 struts2中有基本的資料轉換功能,如int
struts2檔案型別
'.a' : 'application/octet-stream', '.ai' : 'application/postscript', '.aif' : 'audio/x-aiff', '.aifc' : 'aud
struts2結果處理-4種結果處理方式
1.學習路線 接下來咱們一起來學一學struts2的幾種結果處理方式(關於struts2搭建、配置我會在之後慢慢發的),let`s go!
Struts2的型別轉換及輸入校驗(集合型別的使用)
action: package org.action; import java.util.List; import org.model.Tel; import com.opensymphony.xwork2.ActionSupport; public class MyTyp
Struts2返回型別
開始使用struts2的時候,想跳轉到另外一個action,而且要代引數過去,真是讓我費了一番周折,後來發現並沒有哪麼複雜,struts2幫我們定義了很多返回型別,我們去合理使用就可以了。chain:將一個action的執行與另外一個配置好的action串連起來。用第一個ac
Struts2的型別轉換及輸入校驗(自定義型別轉換器)
typeconverter2.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"
MyBatis呼叫帶有返回結果之output引數型別的儲存過程
儲存過程示例: ALTER PROCEDURE [WebApi_Login_SendPhoneCode ] ( @Action int, --1:查詢 2:新增一條記錄 @PhoneNo varchar(20), @Smscode varchar(10), @SendType
第04講 struts2設定資料-屬性驅動-基本資料型別
1,在 HeadFirstStruts2chapter02 中,新建包com.cruise.model包,新建bean:User,屬性分別為:userName,password,package com.cruise.model;public class User { &
正確生成浮點型的方法,解決sqlachemy Float浮點型的坑,生成float型別時,長度和精度均為0,導致查詢不到結果!
問題描述 在使用flask_sqlachemy時,給price欄位選擇了Float型別,資料庫用的mysql,生成資料庫表後,發現 from sqlalchemy import Float,Column price = Column(Float,default=0.00) &
Java中兩個byte型別相加結果賦值給byte型別的變數會報編譯錯誤,byte加byte的結果為什麼是int?
背景: 之前偶然看到有討論這個問題,在網上搜了半天,結果都不盡如人意,解釋沒有到位, 有的說byte加byte預設就是int,那為什麼這麼做呢? 這不是找麻煩麼?這種奇怪的預設還有哪些?帶來一些列疑問。。。。。。 有的說byte儲存的就是整型資料,這種說法的對錯姑且不論,至少我覺得難免有