Java之struts2框架基礎知識
阿新 • • 發佈:2019-01-29
struts2
struts2的寫法
Action類
public class HelloAction {
public String hello() {
System.out.println("Hello Struts!");
return "success";
}
}
配置 struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 在struts核心包的dtd檔案裡找 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- struts根標籤 -->
<!--
package
name 標籤 隨便寫 只要不重複就行 一般可以進行模組化區分
namespace 名稱空間 (訪問Action網址前的一個網址部分)
extends 繼承一個包 struts-default 預設配置 預設提供的功能
-->
<!--
action
name 是你這個類的訪問的路徑
class 類的全限定類名
method 類方法被訪問的方法
result
name 方法的返回值(匹配)
type 請求跳轉的方式 預設請求轉發dispatcher
值部分:跳轉網站資源
-->
<struts>
<package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.lanou3g.hello.HelloAction" method="hello">
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
</package >
<!-- 引入其他struts配置檔案 -->
<include file="com/lanou3g/def/struts.xml"></include>
<include file="com/lanou3g/dynamic/struts.xml"></include>
<include file="com/lanou3g/dynamic/struts.xml"></include>
<include file="com/lanou3g/test/struts.xml"></include>
</struts>
配置struts2的核心過濾器
在web.xml中配置:
<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>
使用快捷鍵(command + shift + t)搜尋StrutsP
struts2執行流程
localhost:8080/sh-struts2-01/hello/HelloAction
1.通過網址請求中的hello
2.找到對應的名稱空間(網址)
3.找到後 再通過網址中的HelloAction去匹配Action標籤中的name
4.匹配上,用class標籤建立其類的物件
5.呼叫該類中的方法
6.拿到類中的方法的返回值去匹配result標籤的name
7.返回值匹配上,就呼叫標籤中的頁面
struts架構圖
常量配置修改
指定Web應用的預設編碼集
<!-- name:鍵值 value:值 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
指定需要Struts2處理的請求字尾
<!--
action,,
表示訪問路徑的字尾名,可以是.action或者無後綴
-->
<constant name="struts.action.extension" value="action,,"></constant>
給配置檔案提供熱載入(更改完了不用重啟伺服器)
<!--預設為false struts.devMode = false -->
<constant name="struts.devMode" value="true"></constant>
這些常量配置都可以去default.properties檔案找到你要修改的配置
動態方法呼叫
Action類
public class Demo02Action {
public String add() {
System.out.println("增加");
return "success";
}
public String delete() {
System.out.println("刪除");
return "success";
}
public String update() {
System.out.println("修改");
return "success";
}
public String find() {
System.out.println("查詢");
return "success";
}
}
配置struts.xml
<struts>
<!-- 常量配置 動態方法 (不常用 搜尋引擎抓取不好 網址過於複雜) -->
<!-- struts.enable.DynamicMethodInvocation = false -->
<!-- 預設 動態方法是關閉的 -->
<!-- 使用 !方法名 http://localhost:8080/sh-struts2-01/dynamic/Demo02Action!delete-->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<package name="dynamic" namespace="/dynamic" extends="struts-default">
<!--
使用萬用字元配置訪問路徑,星號是方法名
method 標籤中填{1} 代表取到前面的星獲取的方法名
http://localhost:8080/sh-struts2-01/dynamic/Demo02Action_delete
-->
<action name="Demo02Action_*" class="com.lanou3g.dynamic.Demo02Action" method="{1}">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
Action類的建立方式
建立方式一
public class Demo03Action {
}
隨便一個普通類都可以作為一個Action類
只需要你去配置struts.xml檔案
相比於servlet減少程式碼的侵入性
建立方式二
public class Demo04Action implements Action {
@Override
public String execute() throws Exception {
return null;
}
}
實現Action介面
意義在於提醒你Action類中的方法該怎麼寫
建立方式三(常用方式)
public class Demo05Action extends ActionSupport{
}
因為該類實現了很多介面,一個介面就有一個功能
Action標籤的預設值
Action類
public class Demo06Action {
public String execute() {
System.out.println("測試 action標籤的預設值");
return "success";
}
}
struts.xml
<struts>
<!--
預設使用的類ActionSupport類
(如果你這個類找不到 就去struts-default檔案下 找預設的類)
預設的執行方法 execute()
預設接收返回值 "success"
預設的跳轉方式 請求轉發
-->
<package name="test" namespace="/test" extends="struts-default">
<action name="Demo06Action">
<result>/hello.jsp</result>
</action>
</package>
</struts>
使用struts2實現篩選
CustomerAction類
public class CustomerAction extends ActionSupport{
public String findByName() {
// 獲取引數
HttpServletRequest request = ServletActionContext.getRequest();
String string = request.getParameter("cust_name");
if (StringUtils.isNotBlank(string)) {
// 建立離線物件
DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
// 新增查詢條件
criteria.add(Restrictions.like("cust_name", "%"+string+"%"));
// 呼叫service方法
CustomerService service = new CustomerServiceImpl();
List<Customer> list = service.find(criteria);
// 存域
request.setAttribute("list", list);
}
return "success";
}
}
配置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="web" namespace="/" extends="struts-default">
<action name="CustomerAction" class="com.lanou3g.web.CustomerAction" method="findByName">
<result name="success">/jsp/customer/list.jsp</result>
</action>
</package>
</struts>
web.xml 配置核心過濾器
<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>/CustomerAction</url-pattern>
</filter-mapping>
service層
public List<Customer> find(DetachedCriteria criteria) {
// 開啟事務
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 呼叫dao層方法
CustomerDao dao = new CustomerDaoImpl();
List<Customer> list = dao.find(criteria);
// 提交事務
transaction.commit();
return list;
}
dao層
public List<Customer> find(DetachedCriteria criteria) {
<!--獲取當前session-->
Session session = HibernateUtils.getCurrentSession();
<!--組裝離線查詢物件(賦值session)-->
Criteria c = criteria.getExecutableCriteria(session);
<!--獲取查詢結果 並返回-->
List<Customer> list = c.list();
return list;
}