日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

struts2教程(2)--配置

發(fā)布時(shí)間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2教程(2)--配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Struts2配置

一、Struts2配置文件加載順序

struts2 配置文件 由核心控制器加載 StrutsPrepareAndExecuteFilter ?(預(yù)處理,執(zhí)行過(guò)濾)

??????????

init_DefaultProperties(); // [1] ---------- org/apache/struts2/default.propertiesinit_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xmlinit_LegacyStrutsProperties(); // [3] --- 自定義struts.propertiesinit_CustomConfigurationProviders(); // [5] ----- 自定義配置提供init_FilterInitParameters() ; // [6] ----- web.xmlinit_AliasStandardObjects() ; // [7] ---- Bean加載

結(jié)論

1、default.properties 該文件保存在 struts2-core-2.3.7.jar中 org.apache.struts2包里面 ?(常量的默認(rèn)值)

2、struts-default.xml 該文件保存在 struts2-core-2.3.7.jar ?(Bean、攔截器、結(jié)果類型 )

3、struts-plugin.xml 該文件保存在struts-Xxx-2.3.7.jar ?(在插件包中存在 ,配置插件信息 )

4、struts.xml 該文件是web應(yīng)用默認(rèn)的struts配置文件 (實(shí)際開(kāi)發(fā)中,通常寫struts.xml)

5、struts.properties 該文件是Struts的默認(rèn)配置文件 ?(配置常量)

6、web.xml 該文件是Web應(yīng)用的配置文件(配置常量)

?后加載文件中struts2常量會(huì)覆蓋之前加載文件 常量?jī)?nèi)容

二、Struts2的Action配置

1)必須要為<action>元素 配置<package>元素 ?(struts2圍繞package進(jìn)行Action的相關(guān)配置 )

配置package 三個(gè)常用屬性

<package name="default" namespace="/" extends="struts-default">

1、name 包名稱,在struts2的配置文件文件中 包名不能重復(fù) ,name并不是真正包名,只是為了管理Action

2、namespace 和 <action>的name屬性,決定Action的訪問(wèn)路徑 ?(以/開(kāi)始 )

3、extends 繼承哪個(gè)包,通常開(kāi)發(fā)中繼承 struts-default包 (struts-default包在struts-default.xml定義 ),例如,如果需要使用json,則需要繼承json的包。

? 繼承struts-default包后,可以使用 包中定義攔截器和結(jié)果類型

?2)Action的通過(guò)<action>元素配置

<action name="hello" class="com.sihai.struts2.demo1.HelloAction">

<action>的name和 <package>的namespace屬性 共同決定Action的訪問(wèn)路徑 !!!!!!!!

例如 :

<package name="default" namespace="/user" extends="struts-default"><action name="hello" class="com.sihai.struts2.demo1.HelloAction">

?訪問(wèn)路徑 /user/hello.action

?3) <action> 元素配置默認(rèn)值

????<package> 的namespace默認(rèn)值 “”?

??? <action> 的class默認(rèn)值 ActionSupport類

??? <result> 的 name默認(rèn)值 success

默認(rèn)Action和 Action的默認(rèn)處理類

1) 默認(rèn)Action, 解決客戶端訪問(wèn)Action不存在的問(wèn)題 ,客戶端訪問(wèn)Action,Action找不到,默認(rèn)Action就會(huì)執(zhí)行

<default-action-ref name="action元素的name" />

2) 默認(rèn)處理類 ,客戶端訪問(wèn)Action,已經(jīng)找到匹配<action>元素,但是<action>元素沒(méi)有class屬性,執(zhí)行默認(rèn)處理類

??

<default-class-ref class="完全類名" />

*在struts-default.xml配置默認(rèn)處理類 ActionSupport

三、Struts2的常量配置

1) struts2默認(rèn)常量 在 default.properties中配置

2) 開(kāi)發(fā)者自定義常量

struts.xml (要求)

格式 : <constant name="struts.devMode" value="true" />

struts.properties (要求)

????格式 : struts.devMode = true

web.xml

????格式?:

<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>struts.devMode</param-name><param-value>true</param-value></init-param></filter>

3) 常用常量

<constant name="struts.i18n.encoding" value="UTF-8"/> ----- 相當(dāng)于request.setCharacterEncoding("UTF-8"); 解決post請(qǐng)求亂碼<constant name="struts.action.extension" value="action"/> --- 訪問(wèn)struts2框架Action訪問(wèn)路徑 擴(kuò)展名 (要求)struts.action.extension=action,, 默認(rèn)以.action結(jié)尾擴(kuò)展名 和 不寫擴(kuò)展名 都會(huì)分發(fā)給 Action<constant name="struts.serve.static.browserCache" value="false"/> false不緩存,true瀏覽器會(huì)緩存靜態(tài)內(nèi)容,產(chǎn)品環(huán)境設(shè)置true、開(kāi)發(fā)環(huán)境設(shè)置false<constant name="struts.devMode" value="true" /> 提供詳細(xì)報(bào)錯(cuò)頁(yè)面,修改struts.xml后不需要重啟服務(wù)器 (要求)

<?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="default" namespace="/" extends="struts-default"><!-- <default-action-ref name="default" /> --> <!-- 處理其它的action處理不了的請(qǐng)求路徑 --><default-class-ref class="com.sihai.action.DefaultAction" /><!-- 用于設(shè)置action默認(rèn)處理類 --><action name="good"><result>/index.jsp</result></action><action name="hello" class="com.sihai.action.HelloAction"><result>/hello.jsp</result></action><action name="default" class="com.sihai.action.DefaultAction"><result>/default.jsp</result></action></package></struts>

四、struts2 配置文件分離

通過(guò) <include file="struts-part1.xml"/> 將struts2 配置文件 拆分

五、Action

HTTP請(qǐng)求 提交 Struts2 StrutsPrepareAndExecuteFilter核心控制器 ------請(qǐng)求分發(fā)給不同Action

Action書寫的的三種格式

第一種 Action可以是POJO ?((PlainOldJavaObjects)簡(jiǎn)單的Java對(duì)象)---- 不需要繼承任何父類,實(shí)現(xiàn)任何接口

??? struts2框架 讀取struts.xml獲得 完整Action類名

??? obj = Class.forName("完整類名").newInstance();

???? Method m = Class.forName("完整類名").getMethod("execute"); ?m.invoke(obj);通過(guò)反射 執(zhí)行 execute方法

第二種 編寫Action 實(shí)現(xiàn)Action接口

Action接口中,定義默認(rèn)五種 邏輯視圖名稱

public static final String SUCCESS = "success"; ?// 數(shù)據(jù)處理成功 (成功頁(yè)面)

public static final String NONE = "none"; ?// 頁(yè)面不跳轉(zhuǎn) ?return null;效果一樣

public static final String ERROR = "error"; ?// 數(shù)據(jù)處理發(fā)送錯(cuò)誤(錯(cuò)誤頁(yè)面)

public static final String INPUT = "input"; // 用戶輸入數(shù)據(jù)有誤,通常用于表單數(shù)據(jù)校驗(yàn) (輸入頁(yè)面)

public static final String LOGIN = "login"; // 主要權(quán)限認(rèn)證(登陸頁(yè)面)

第三種 編寫Action ?繼承ActionSupport ?(推薦)

???在Action中使用 表單校驗(yàn)、錯(cuò)誤信息設(shè)置、讀取國(guó)際化信息 三個(gè)功能

六、Action的配置method(通配符)

1) 在配置 <action>元素時(shí),沒(méi)有指定method屬性, 默認(rèn)執(zhí)行Action類中execute方法

<action name="request1" class="com.sihai.struts2.demo3.RequestAction1" />

2) 在<action>元素內(nèi)部 添加 method屬性,指定執(zhí)行Action中哪個(gè)方法

??

<action name="regist" class="cn.itcast.struts2.demo4.RegistAction" method="regist"/> 執(zhí)行 RegistAction 的regist方法

? 將多個(gè)請(qǐng)求 業(yè)務(wù)方法 寫入到一個(gè)Action類中

<action name="addBook" class="com.sihai.struts2.demo4.BookAction" method="addBook" ></action><action name="delBook" class="com.sihai.struts2.demo4.BookAction" method="delBook" ></action>

3) 使用通配符*,簡(jiǎn)化struts.xml配置

<a href="${pageContext.request.contextPath }/user/customer_add.action">添加客戶</a><a href="${pageContext.request.contextPath }/user/customer_del.action">刪除客戶</a>

struts.xml

<action name="customer_*" class="com.sihai.struts2.demo4.CustomerAction" method="{1}"></action> --- {1}就是第一個(gè)* 匹配內(nèi)容

七、動(dòng)態(tài)方法調(diào)用

訪問(wèn)Action中指定方法,不進(jìn)行配置

???1) 在工程中使用 動(dòng)態(tài)方法調(diào)用 ,必須保證 struts.enable.DynamicMethodInvocation = true常量值 為true

???2) 在action的訪問(wèn)路徑 中 使用"!方法名"

頁(yè)面

<a href="${pageContext.request.contextPath }/user/product!add.action">添加商品</a>

配置

<action name="product" class="com.sihai.struts2.demo4.ProductAction"></action>

執(zhí)行 ProductAction 中的 add方法

八、Action訪問(wèn)Servlet

1、 在Action中解耦合方式 間接訪問(wèn) Servlet API ?---------使用 ActionContext對(duì)象

在struts2 中 Action API 已經(jīng)與Servlet API 解耦合 (沒(méi)有依賴關(guān)系 )

Servlet API 常見(jiàn)操作 : 表單提交請(qǐng)求參數(shù)獲取,向request、session、application三個(gè)范圍存取數(shù)據(jù)

actionContext = ActionContext.getContext();

1) actionContext.getParameters(); 獲得所有請(qǐng)求參數(shù)Map集合

2) actionContext.put("name", "sihai"); / actionContext.get("company")對(duì)request范圍存取數(shù)據(jù)

3) actionContext.getSession(); 獲得session數(shù)據(jù)Map,對(duì)Session范圍存取數(shù)據(jù)

4) actionContext.getApplication(); 獲得ServletContext數(shù)據(jù)Map,對(duì)應(yīng)用訪問(wèn)存取數(shù)據(jù)

package com.sihai.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)ActionContext獲取 public class ServletDemo1Action extends ActionSupport {@Overridepublic String execute() throws Exception {// 1.獲取ActionContextActionContext context = ActionContext.getContext();// 2.獲取Servlet api// 2.1 獲取application中數(shù)據(jù)// Map<String, Object> applicationMap = context.getApplication();// System.out.println(applicationMap.get("aname"));//// // 2.2 獲取session中數(shù)據(jù)// Map<String, Object> sessionMap = context.getSession();// System.out.println(sessionMap);//// // 2.3 獲取請(qǐng)求參數(shù)// Map<String, Object> paramMap = context.getParameters();// //request.getParameterMap();// System.out.println(((String[])paramMap.get("username"))[0]);// 2.4 向request范圍存儲(chǔ)數(shù)據(jù)context.put("username", "tom");// context.get("username");return SUCCESS;} } com.sihai.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)ActionContext獲取 public class ServletDemo1Action extends ActionSupport {@Overridepublic String execute() throws Exception {// 1.獲取ActionContextActionContext context = ActionContext.getContext();// 2.獲取Servlet api// 2.1 獲取application中數(shù)據(jù)// Map<String, Object> applicationMap = context.getApplication();// System.out.println(applicationMap.get("aname"));//// // 2.2 獲取session中數(shù)據(jù)// Map<String, Object> sessionMap = context.getSession();// System.out.println(sessionMap);//// // 2.3 獲取請(qǐng)求參數(shù)// Map<String, Object> paramMap = context.getParameters();// //request.getParameterMap();// System.out.println(((String[])paramMap.get("username"))[0]);// 2.4 向request范圍存儲(chǔ)數(shù)據(jù)context.put("username", "tom");// context.get("username");return SUCCESS;} }

2、 使用接口注入的方式,操作Servlet API(耦合)

ServletContextAware : 注入ServletContext對(duì)象

ServletRequestAware :注入 request對(duì)象

ServletResponseAware : 注入response對(duì)象

package com.sihai.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)注入方式 public class ServletDemo2Action extends ActionSupport implementsServletRequestAware {private HttpServletRequest request;@Overridepublic String execute() throws Exception {System.out.println(request.getParameter("username"));return null;}public void setServletRequest(HttpServletRequest request) {this.request = request;} } com.sihai.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)注入方式 public class ServletDemo2Action extends ActionSupport implementsServletRequestAware {private HttpServletRequest request;@Overridepublic String execute() throws Exception {System.out.println(request.getParameter("username"));return null;}public void setServletRequest(HttpServletRequest request) {this.request = request;} }

3、 在Action中直接通過(guò)ServletActionContext 獲得Servlet API

ServletActionContext.getRequest() : 獲得request對(duì)象 (session)

ServletActionContext.getResponse() : 獲得response對(duì)象

ServletActionContext.getServletContext() : 獲得ServletContext對(duì)象

靜態(tài)方法沒(méi)有線程問(wèn)題,ThreadLocal

package com.sihai.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)ServletActionContext獲取 public class ServletDemo3Action extends ActionSupport {@Overridepublic String execute() throws Exception {HttpServletRequest request = ServletActionContext.getRequest();System.out.println(request.getParameter("username"));return SUCCESS;}} com.sihai.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware;import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;//獲取servlet api 通過(guò)ServletActionContext獲取 public class ServletDemo3Action extends ActionSupport {@Overridepublic String execute() throws Exception {HttpServletRequest request = ServletActionContext.getRequest();System.out.println(request.getParameter("username"));return SUCCESS;}}

九、Result結(jié)果類型

Action處理請(qǐng)求后, 返回字符串(邏輯視圖名),需要在struts.xml提供 <result>元素定義結(jié)果頁(yè)面

1、 局部結(jié)果頁(yè)面 和 全局結(jié)果頁(yè)面

<action name="result" class="com.sihai.struts2.demo6.ResultAction"><!-- 局部結(jié)果 當(dāng)前Action使用 --><result name="success">/demo6/result.jsp</result></action><global-results><!-- 全局結(jié)果 當(dāng)前包中 所有Action都可以用--><result name="success">/demo6/result.jsp</result></global-results>


?

2、 結(jié)果頁(yè)面跳轉(zhuǎn)類型

* 在struts-default.xml定義了 一些結(jié)果頁(yè)面類型

* 使用默認(rèn)type是 dispatcher轉(zhuǎn)發(fā) (request.getRequestDispatcher.forward)

1) dispatcher :Action轉(zhuǎn)發(fā)給 JSP

2) chain :Action調(diào)用另一個(gè)Action(同一次請(qǐng)求)

<result name="success" type="chain">hello</result> hello是一個(gè)Action的name

3) redirect: Action重定向到JSP

4) redirectAction:Action重定向到另一個(gè)Action

<result name="success" type="redirectAction">hello</result>

總結(jié)

以上是生活随笔為你收集整理的struts2教程(2)--配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。