一: struts2概述:
JavaEE三大框架之一的web層框架,每次訪問action的時候,都會創建一次,是線程安全的,內置攔截器,數據操作,值棧等
二:
struts2解決問題:
三: 創建一個HellowWord程序:
1 :導入jar包:
2 創建action:
package cn.hr.action.demo;
import com.opensymphony.xwork2.ActionSupport;
public class HellowAction extends ActionSupport {
/**
* 每次訪問Servlet,都會執行service()方法
* 每次訪問action,默認執行名稱excute方法
*/
@Override
public String execute() throws Exception {
System.out.println("execute....");
return "ok";
}
}
3 創建struts.xml配置文件,引入dtd約束和action訪問路徑配置,其中struts.xml核心配置文件名稱和位置都是固定的,位置必須在src下面,名稱爲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>
<package name="hellow" extends="struts-default" namespace="/">
<!-- name訪問名稱 -->
<action name="hellowAction" class="cn.hr.action.demo.HellowAction">
<!-- 配置方法的返回值到頁面 -->
<result name="ok">/hellow.jsp</result>
</action>
</package>
</struts>
4 配置struts2過濾器:
在web.xml下面加入過濾器, web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>struts2_day01</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
5 在WebContent目錄下新建一個訪問成功的hellow.jsp頁面。 啓動tomcat訪問,得到結果:
二:圖解struts2的執行過程:
三: struts2核心配置文件:
1 名稱和位置固定的
2 在配置文件中主要三個標籤 package、action、result,標籤裏面的屬性
標籤package
1 類似於代碼包,區別不同的action,要配置action,必須首先寫package標籤,在package裏面才能 配置action
2 package標籤屬性
(1)name屬性
- name屬性值根功能本身沒有關係的,
- 在一個配置文件中可以寫多個package標籤,name屬性值不能相同的
(2)extends屬性
- 屬性值固定的,struts-default
- 寫了這個屬性之後,在package裏面配置的類具有action功能
(3)namespace屬性
- namespace屬性值和action標籤裏面的name屬性值構成訪問路徑
標籤package
1 action標籤配置action訪問路徑
2 action標籤屬性
(1)name屬性
- namespace屬性值和action標籤裏面的name屬性值構成訪問路徑
- 在package標籤裏面寫多個action標籤,但是action的name屬性值不能相同的
(2)class屬性
- action全路徑
(3)method屬性
- 比如在action裏面默認執行的方法execute方法,但是在action裏面寫其他的方法
- 讓action裏面多個方法執行,使用method進行配置
標籤result
1 根據action的方法返回值,配置到不同的路徑裏面
2 result標籤屬性
(1)name屬性
- 和方法返回值一樣
(2)type屬性
- 配置如何到路徑中(轉發或者重定向)
- type屬性默認值 做轉發操作
分模塊開發
1 單獨寫配置文件,把配置文件引入到核心配置文件中
Action編寫方式
開發中一般使用創建類,繼承類ActionSupport
訪問action的方法(重點)
1 有三種方式實現
第一種 使用action標籤的method屬性,在這個屬性裏面寫執行的action的方法
第二種 使用通配符方式實現
第三種 動態訪問實現(不用)
2 演示錯誤
(1)如果action方法有返回值,在配置文件中沒有配置,出現錯誤
(2)在action裏面的方法有返回值,如果有返回值時候類型必須是String
(3)action裏面的方法可以沒有返回值,沒有返回值時候,在result標籤不需要配置
- 把方法寫成void
- 讓返回值,返回 ”none”
使用action標籤method屬性
1 創建action,創建多個方法
2 使用method配置
缺陷:action每個方法都需要配置,如果action裏面有多個方法,配置很多的action
使用通配符實現(重點)
1 在action標籤裏面name屬性,name屬性值裏面寫 符號 * 星號
(1)* 理解: 表示匹配任意內容
- 比如訪問hello,* 可以匹配到
- 比如訪問add,* 可以匹配到