Struts框架執行流程
上篇部落格Struts2,Hibernate,Spring 環境配置,介紹了三個框架各自的初始化配置,那麼單獨的Struts框架是如何執行的,通過一個例子分析一下整個流程。
在已經配置好環境的基礎上。
一.建立工程
1.建立action,直接執行方法返回頁面
package com.dynamic.oa.test;
import com.opensymphony.xwork2.ActionSupport;
public class ActionTest extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//返回input頁面
public String input() throws Exception
{
return "input";
}
//返回success頁面
public String success() throws Exception
{
return "success";
}
}
2.根據Struts-2.0.dtd中的內容配置,並結合業務配置Struts.xml
從Struts的核心開發包中,src\core\src\main\resources目錄下找到dtd檔案,該檔案介紹了整個Struts.xml的配置格式。
<package name="default" namespace="/" extends="struts-default">
<action name="actionTest_*" class="com.dynamic.oa.test.ActionTest" method="{1}">
<result name="input">WEB-INF/jsp/input.jsp</result>
<result name="success">WEB-INF/jsp/success.jsp</result>
</action>
</package>
3.在WEB-INF,建立jsp資料夾,並建立2個jsp頁面
將jsp頁面放到WEB-INF下,這樣客戶端直接請求jsp頁面是訪問不到的。必須通過action請求來訪問。
input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<body>
<form action="actionTest_success.action">
username:<input name="username" type="text"> <br>
password:<input name="password" type="text"> <br>
<input type="submit" value="submit">
</form>
</body>
</html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<body>
username:${requestScope.username}<br>
password:${requestScope.password}
</body>
</html>
二.執行流程
三.分析:
1.當客戶端發出請求後,所有的請求都會通過web.xml,通過StrutsPrepareAndExecuteFilter過濾器被Struts管轄。該過濾器處理Struts排程過程的準備和執行階段.prepare與execute,前者表示準備,可以說是指filter中的init方法,即配製的匯入;後者表示進行過濾,指doFilter方法,即將request請求,轉發給對應的 action去處理。
2.找到對應的action,上面的程式碼使用了萬用字元對映的方式
在struts.xml檔案中配置<action…>元素時,它的name、class、method屬性都可支援萬用字元,這種萬用字元的方式是另一種形式的動態方法呼叫。
當我們使用萬用字元定義Action的name屬性時,相當於用一個元素action定義了多個邏輯Action:
<action name="actionTest_*" class="com.dynamic.oa.test.ActionTest" method="{1}">
<result name="input">WEB-INF/jsp/input.jsp</result>
<result name="success">WEB-INF/jsp/success.jsp</result>
</action>
如上,<action name=”actionTest_*”>定義一系列請求URL是actionTest_*.action模式的邏輯Action。同時method屬性值為一個表示式{1},表示它的值是name屬性值中第一個*的值。例如:使用者請求URL為actionTest_input.action時,將呼叫到ActionTest類的input方法;使用者請求URL為actionTest_success.action時,將呼叫到ActionTest類的success方法。3.在ActionTest中執行方法後,返回字串,該字串配置Struts.xml檔案中<action>元素下的<result>元素的name屬性的值,並轉到對應的jsp頁面。
四.總結
通過一個簡單的例子,從流程上分析了Struts框架的基本執行過程,有了這個瞭解,再分析原始碼的執行流程。
相關文章
- 框架執行流程總結框架
- thinkphp6框架執行流程(生命週期)PHP框架
- Lararel 框架執行流程詳解(1) 入口檔案框架
- Struts1.1執行錯誤!
- Mysql 執行流程MySql
- HA執行流程
- MapReduce執行流程
- php執行流程PHP
- MyBatis執行流程MyBatis
- 「MySQL」 MySQL執行流程MySql
- SpringMVC執行流程SpringMVC
- MapReduce程式執行流程
- javaWeb的執行流程JavaWeb
- PostgreSQL SQL執行流程SQL
- [提問交流]ThinkPHP 框架執行應用的標準流程分析PHP框架
- SSM三大框架的執行流程、原理、核心技術詳解SSM框架
- 理解struts流程和actionservletServlet
- 一個請求在Struts2框架中的處理流程框架
- struts2_專案執行報404
- PHP執行流程回顧PHP
- MapReduce的執行流程概述
- thinkphp3.2 執行流程PHP
- SQL 解析與執行流程SQL
- Ansible playbook 執行流程
- angularjs基本執行流程AngularJS
- java的執行流程(轉)Java
- Dapr Outbox 執行流程
- 執行流程原始碼分析原始碼
- Spark學習(一)——執行模式與執行流程Spark模式
- 深入理解執行緒池的執行流程執行緒
- Struts框架_9 Struts2的驗證框架
- 執行時框架,編譯時框架框架編譯
- Struts2的框架框架
- 深入Mybatis原始碼——執行流程MyBatis原始碼
- 【java學習】控制執行流程Java
- WEB程式執行的基本流程Web
- Mybatis執行流程原始碼分析MyBatis原始碼
- VUE 執行流程 個人筆記Vue筆記