Struts2框架的搭建以及核心配置

Struts2一個mvc框架 採用攔截器機制來處理用戶的請求。

工具/原料

myeclipse/eclipse
jdk環境
tomcat
電腦

jar包的引入

第一步、引入13個jar包到web項目的lib文件夾下面

每個jar包都有著不同的作用,附圖有詳解

注意commons-lang要引入3.0以上的版本,不然啟動的時候回報錯

攔截器配置

struts2的核心就是攔截器

怎麼配置攔截器呢?

在web.xml裡面配置,

<!--攔截器在工作  -->  <filter>  <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.Struts2PrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>

注意:

<filter-name>struts2</filter-name>中的struts2可以是任何名稱,但是要和下面的  <filter-mapping>裡面的<filter-name>一致

當然,由於做項目的時候程序比較複雜,struts2這個名稱比ssh這個名稱更有辨識度!

Action類

這個類繼承了ActionSupport類,ActionSupport類好處很多,以後會重點解釋

但是這個類在這裡是沒有起到什麼作用的!

看這個類,我們要知道,這個類的包名、方法名,返回的是yes就可以了

package cn.com.day01;import com.opensymphony.xwork2.ActionSupport;public class ActionSupportClass extends ActionSupport{    /**     *      */    private static final long serialVersionUID = 1L;/*author:命運的信徒     * date:2019/3/9     * arm:了解struts2的運作流程     */public String helloworld(){    System.out.println("Action類執行了");    return "yes";}}

struts.xml文件的配置

struts.xml直接放在src的根目錄下面就可以了

基礎模板如下

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" ><struts><!-- 設置後綴名為action --><constant name="struts.action.extension" value="action"></constant><package name="tjn" namespace="/" extends="struts-default"><action name="hello" class="cn.com.day01.ActionSupportClass" method="helloworld"><result name="yes">/succese.jsp</result></action></package></struts>

也可以不用模板,自己新建

1、在src上面,右鍵-new xml(basic tempalet)

2、命名為struts.xml

3、next-選擇第一個

4、next-選擇第二個-只要找到Struts Configuration的字眼的都可以,版本隨意

如果myelicpse/eclispe裝了struts就更簡單了

項目上右鍵-myeclispe-add struts ....

根據提示一步步的就可以了

我們開始講struts.xml裡面的配置欄位

<constant name="struts.action.extension" value="action"></constant>

的意思就是設置Action請求的後綴名為action,

什麼意思?

當前台的一個請求,如hello.action,hello.kk,struts.xml只識別.action後綴名的為我這個配置文件的請求,其他的不是!

當然欄位的配置可以放在src下面的一個struts.properties文件夾裡面

也可以放在web.xml的init-param裡面,

三種欄位的配置,一般都是把欄位放在struts.xml文件裡面配置

附圖為其他的配置欄位的樣式,三選一就可以了!

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

name="tjn"是包名,因為到後來項目的複雜,一個struts.xml中有多個package

所以name是唯一的標識符

namespace是命名空間,沒什麼用處

extends是繼承的意思,一般都是繼承struts-default,這個struts-default裡面有許多的攔截器機制

也可以繼承其他的包名!

<action name="hello" class="cn.com.day01.ActionSupportClass" method="helloworld"></action>

這個action中name="hello"對於的就是前台頁面jsp中的請求的名稱

如  <a href="hello.action">點我</a>

class就是要處理用戶請求類的地址,一般ctrl+滑鼠點擊就可以進去

method就是這個類裡面的方法

如果沒有method,默認方法名是execute

<result name="yes">/succese.jsp</result>

name是類中的方法返回的字符串,如果沒有name="yes"的話,默認返回的是success

/success.jsp:如果類中的方法返回的字符串==success的話,執行成功的話,頁面就會跳轉到success.jsp頁面

前台頁面jsp

<a href="hello.action">點我</a>

頁面效果如下

struts執行的流程

1、當web項目啟動的時候,StrutsPrepareAndExecuteFilter機制就開啟了;

2、當前台頁面jsp發送一個httpservlet請求的時候,可以是

<a href="success.jsp"></a>

或<a href="hello.action">點我</a>

或<a href="/項目名/LoginServlet">點我</a>

3、這一切都有ActionMapping來判斷是不是Action請求,不是的話,就直接去http相應,如果是的話,就會把請求處理交給ActionProxy;

4、ActionProxy會通過配置管理器找到struts.xml文件,怎麼找相應的action呢?通過創建Action ActionInvocation實例,Action ActionInvocation根據請求的名稱<action name="hello"來找到Action類,在調用Action類之前,會經過各類的攔截器機制,這個攔截器機制是核心,後面會有很多的用處;

5、一旦Action執行結束,就會返回一個字符串,Action ActionInvocation就會負責查找result中name和字符串相符的result ,執行result;

6、產生的result信息返回給ActionInvocation,這個過程也會經過攔截器機制

注意:struts.xml文件可以有多個,但是web項目啟動的時候,從前台都後台默認的都是struts.xml文件,如果你想調用struts-demo.xml文件的話,可以在struts.xml文件中包含

<include file="struts-demo.xml"/>

這個寫法是默認struts-demo.xml也在src根目錄下面

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場