国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Struts 2 自學(xué)之路: 2 Struts2 基本流程 - 落羽紛飛 - JavaEy...

內(nèi)容簡介:了解Struts2 的基本流程

說明: 此文只是我參看資料以及自己試驗以后的觀點

此文的代碼皆來自上篇文章中的項目,不過添加了些注釋,畢竟流程還是看個程序怎么運(yùn)行更直觀
(我個人就覺得看程序怎么走,再看那些枯燥的說明讓人更容易理解)




首先我們來看struts2 在web.xml配置文件里配置的信息,這是我們使用struts2要做的第一步工作
文件中我們配置了一個過濾器,處理的類是org.apache.struts2.dispatcher.FilterDispatcher,從url-pattern可以看出,此應(yīng)用程序的所有請求都會經(jīng)過該過濾器
Java代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.4"    
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">       
  7.     <display-name>Struts 2.0 Hello World</display-name>   
  8.     <filter>   
  9.         <filter-name>struts2</filter-name>           
  10.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>   
  11.     </filter>   
  12.     <filter-mapping>   
  13.         <filter-name>struts2</filter-name>   
  14.         <url-pattern>/*</url-pattern>   
  15.     </filter-mapping>   
  16. </web-app>  



接下來我們需要一個請求頁面和兩個分別表示成功和失敗的頁面
index.jsp,welcome.jsp,error.jsp
index.jsp代碼如下,welcome.jsp和error.jsp由于只需要顯示成功或失敗的文字
這里就不在列出代碼了

Java代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>   
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  4. <html>   
  5.   <head>       
  6.     <title>第一個Struts程序</title>   
  7.   </head>   
  8.      
  9.   <body>   
  10.     <!-- form 表單提交給Login.action去處理 -->   
  11.     <form action="Login.action" method="post">   
  12.         <table align="center">   
  13.         <caption><h3>用戶登錄</h3></caption>   
  14.             <tr>   
  15.                 <td>用戶名:<input type="text" name="username"/></td>   
  16.             </tr>   
  17.             <tr>   
  18.                 <td>密  碼:<input type="text" name="password"/></td>   
  19.             </tr>   
  20.             <tr align="center">   
  21.                 <td colspan="2"><input type="submit" value="登錄"/>   
  22.                 <input type="reset" value="重填"/></td>   
  23.             </tr>   
  24.         </table>   
  25.     </form>   
  26.   </body>   
  27. </html>  



然后我們需要處理action的類HelloAction
這個類只是個簡單java類,沒有繼承任何類和實現(xiàn)任何接口

Java代碼
  1. package yufei.hello;   
  2.   
  3. public class HelloAction   
  4.     {   
  5.     private String username;   
  6.     private String password;   
  7.     public String getPassword()   
  8.         {   
  9.         return password;   
  10.         }   
  11.     public void setPassword(String password)   
  12.         {   
  13.         this.password = password;   
  14.         }   
  15.     public String getUsername()   
  16.         {   
  17.         return username;   
  18.         }   
  19.     public void setUsername(String username)   
  20.         {   
  21.         this.username = username;   
  22.         }   
  23.     public String execute()   
  24.         {   
  25.         String strReturn = "error";   
  26.         if (username.equals("yufei"))   
  27.             strReturn = "success";   
  28.         return strReturn;   
  29.         }   
  30.     }  



最后我們配置struts.xml

Java代碼
  1. <?xml version="1.0" encoding="GBK"?>   
  2. <!DOCTYPE struts PUBLIC    
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">   
  5. <struts>   
  6.     <!--   
  7.         package 先不管,以后會講,目前知道下面那些就夠了   
  8.         name 屬性任意填,只要不出現(xiàn)重復(fù)的就行,該屬性必需有   
  9.         extends 屬性 目前 記住一定要是"struts-default"這個   
  10.                                該屬性必需有   
  11.   
  12.      -->   
  13.     <package name="yufei.hello" extends="struts-default">   
  14.         <!--    
  15.          action 標(biāo)簽里 name屬性代表我們要處理的.action的前面部分   
  16.                 例如,這里的Login代表Login.action,可以打開項目里的index.jsp   
  17.                 看表單的action屬性,注意name的值是不帶.action,只是前面部分   
  18.          action 標(biāo)簽里 class屬性代表我們需要哪個類來處理   
  19.          result 標(biāo)簽的 name屬性代表action類的執(zhí)行方法的返回值,   
  20.                 (即外層action標(biāo)簽里class屬性那個類的),struts2中   
  21.                 action類的默認(rèn)執(zhí)行方法是public String execute()   
  22.                 action類的執(zhí)行方法一定要是public String 和 無參數(shù)   
  23.                 標(biāo)簽對中的屬性代表,當(dāng)execute方法返回的字符串和name里的   
  24.                 相同時就跳轉(zhuǎn)到相應(yīng)那頁去,斜杠(/)是必需的   
  25.          -->   
  26.         <action name="Login" class="yufei.hello.HelloAction">   
  27.             <result name="error">/error.jsp</result>   
  28.             <result name="success">/welcome.jsp</result>   
  29.         </action>   
  30.     </package>   
  31. </struts>  



流程說明:
當(dāng)我們運(yùn)行程序在index.jsp頁面中提交表單后,(實際上就是讓頁面跳轉(zhuǎn)帶著表單參數(shù)到相應(yīng)的URL路徑)表單里的action是Login.action,當(dāng)我們提交表單實際就是將URL跳轉(zhuǎn)到
http://127.0.0.1:8888/Struts2Study/Login.action這個路徑上去
(http://127.0.0.1:8888/Struts2Study 這個為你的項目根路徑)
由于我們在web.xml里面配置了過濾器,該過濾器在本應(yīng)用程序的任何路徑下都會執(zhí)行,所以觸發(fā)了FilterDispatcher來處理,然后該過濾器將以action結(jié)尾的請求轉(zhuǎn)入Struts2框架處理。(struts2 配置文件中的默認(rèn)后綴標(biāo)記是action,當(dāng)然你要喜歡也可以改為其它的,以后講配置文件會提到)這里實際是截獲了Login.action的請求,然后將.action的前面部分和struts.xml文件里的action的name對比,當(dāng)找到相同的后,調(diào)用class屬性里的類來處理,這里實際就是調(diào)用的yufei.hello.HelloAction(說明,當(dāng)struts.xml里沒有明確配置處理方法時,默認(rèn)會去找execute方法來處理,而且處理的方法必需是公共(public) 返回字符串類型(String) 沒有參數(shù),關(guān)于方法配置在以后會提),最后根據(jù)action類的執(zhí)行方法的返回值(String)來和struts.xml里面的該action配置下的result標(biāo)簽的name屬性進(jìn)行比對,然后進(jìn)行相應(yīng)的跳轉(zhuǎn)
-
-
-
-
-
最后我將網(wǎng)上的關(guān)于Struts2 基本流程 比較理論化的說明放下面


--FilterDispatcher 是 Struts 2 框架的核心控制器,該控制器作為一個 Filter 運(yùn)行在 Web應(yīng)用中,它負(fù)責(zé)攔截所有的用戶請求(攔截所有還是部分是由url-pattern來決定的),當(dāng)用戶請求到達(dá)時,該 Filter 會過濾用戶請求。如果用戶請求以 action 結(jié)尾,該請求將被轉(zhuǎn)入 Struts 2 框架處理。
--Struts 2 框架獲得了*.action 請求后,將根據(jù)*.action請求的前面部分決定調(diào)用哪個業(yè)務(wù)邏輯組件,例如,對于 login.action 請求,Struts 2調(diào)用名為 login 的 Action來處理該請求。
--Struts 2 應(yīng)用中的 Action都被定義在 struts.xml 文件中,在該文件中定義 Action 時,定義了該 Action 的name 屬性和 class 屬性,其中 name 屬性決定了該 Action 處理哪個用戶請求,而 class屬性決定了該 Action 的實現(xiàn)類。
--Struts 2 用于處理用戶請求的 Action實例,并不是用戶實現(xiàn)的業(yè)務(wù)控制器,而是 Action代理——因為用戶實現(xiàn)的業(yè)務(wù)控制器并沒有和 Servlet API耦合,顯然無法處理用戶請求。而 Struts 2 框架提供了系列攔截器,該系列攔截器負(fù)責(zé)將 HttpServletRequest 請求中的請求參數(shù)解析出來,傳入到 Action 中,并回調(diào) Action 的 execute方法來處理用戶請求。
--顯然,上面的處理過程是典型的 AOP(面向切面編程)處理方式。圖 3.19 顯示了這
種處理模型。

--從圖3.19中可以看出,用戶實現(xiàn)的Action類僅僅是Struts 2的Action代理的代理目標(biāo)。用戶實現(xiàn)的業(yè)務(wù)控制器(Action)則包含了對用戶請求的處理。用戶的請求數(shù)據(jù)包含在HttpServletRequest 對象里,而用戶的 Action 類無需訪問 HttpServletRequest 對象。攔截器負(fù)責(zé)將 HttpServletRequest里的請求數(shù)據(jù)解析出來,并傳給業(yè)務(wù)邏輯組件 Action 實例
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Struts2教程
利用StrutsTestCase測試Struts應(yīng)用程序
第一次接觸struts2.......
Struts2入門配置
自己動手寫一個Struts2 - superleo - JavaEye技術(shù)網(wǎng)站
action接收請求復(fù)合類型參數(shù)(反射機(jī)機(jī)制原理)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服