更新時間:2022-12-20 11:11:10 來源:動力節點 瀏覽855次
整個實現過程分為兩部分:
1.服務器啟動->初始化過濾器->加載struts.xml
2.瀏覽器發送請求->過濾->struts.xml中查找動作類名->實例化動作類
每次發送請求都會實例化action類,所以發現struts的action類是多個的。(所以spring集成struts 2后,還需要配置action類為多個example。)
實現一個簡單的struts 2案例
1.在web.xml中配置filter,過濾所有路徑
<!-- 配置 struts 前端控制器 -->
< filter >
< filter-name > struts </ filter-name >
< filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter- class >
</ filter >
< filter-mapping >
< filter-name > struts </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
2.準備Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts 配置 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
< struts >
< package name = " 22p1 " extends = " struts-default " >
< action name = " hello " class = " cn.itcast.action.HelloAction " method = " hello " >
< result name = " success " 類型= “調度員” > /success.jsp </結果>
</動作>
</包>
</ struts >
3.編寫HelloAction
公共 類 HelloAction {
/**
* 被請求到一個類后要執行的方法:action方法
* @返回
*/
public String hello ( ) {
System . 出來。println ( "你好,方法執行了……" ) ;
返回 “成功” ;
}
}
4.索引.jsp
< html >
< head >
< title > $Title$ </ title >
</ head >
< body >
<!-- struts2默認*.action的核心過濾器有無后綴url請求-->
< a href = " ${pageContext.request.contextPath }/hello.action " >訪問 hello.action </ a > < br >
< a href = " ${pageContext.request.contextPath }/hello ">訪問你好</a>
< /
body > < / html >
5.成功.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html >
< head >
< title > $Title$ </ title >
</ head >
< body >
< h1 >執行成功!</ h1 >
</ body >
</ html >
如何從struts獲取request、response、session和ServletContext
包cn . 投射。動作;
進口組織。阿帕奇。支柱2 。攔截器。ServletRequestAware ;
進口組織。阿帕奇。支柱2 。攔截器。Servlet響應意識;
進口組織。阿帕奇。支柱2 。攔截器。會話感知;
進口組織。阿帕奇。支柱2 。效用。Servlet上下文感知;
導入javax 。小服務程序。服務小程序上下文;
導入javax 。小服務程序。網址。HttpServletRequest ;
導入javax 。小服務程序。網址。HttpServlet 響應;
導入javax 。小服務程序。網址。HTTPSession ;
進口爪哇。效用。地圖;
公共 類 HelloAction 實現 ServletRequestAware 、 ServletResponseAware 、 SessionAware 、 ServletContextAware {
private HttpServletRequest httpServletRequest ;
私人HttpServletResponse httpServletResponse ;
私人地圖<字符串,對象>會話;
私有ServletContext servletContext ;
公共字符串你好(){
系統。出來。println ( "你好,方法執行了……" ) ;
返回 “成功” ;
}
@Override
public void setServletRequest ( HttpServletRequest httpServletRequest ) {
這個。httpServletRequest = httpServletRequest ;
}
@Override
public void setServletResponse ( HttpServletResponse httpServletResponse ) {
這個。httpServletResponse = httpServletResponse ;
}
@Override
public void setSession ( Map < String , Object > map ) {
這個。會話=地圖;
}
@Override
public void setServletContext ( ServletContext servletContext ) {
這個。servletContext = servletContext ;
}
}
struts 2的六個配置文件
Struts2的核心配置文件有兩類,一共六個。按照加載順序分別描述如下:
I類:內置配置文件,不可修改。
(1)default.properties
位置:struts 2-core-2.3.24.jar\ org.apache.struts2 目錄
功能:定義一些常量(鍵值對)。一些功能開關。
(2)struts-default.xml
位置:struts 2-core-2.3.24.jar目錄末尾
功能:定義Bean元素、結果集類型、攔截器等。
(3)struts-plugin.xml
位置:插件包根目錄
功能:用于擴展的一些配置。
第二類:用戶自定義配置文件,可修改
(1)struts.xml
位置:用戶項目src下。
功能:用于用戶開發的配置,如action、result等。
(2)struts.properties
位置:一般在用戶項目的src下。
作用:只能用來配置一些常量(覆蓋內置的default.properties中的常量配置)
也不是很好用。可以在struts.xml中直接配置常量
(3)web.xml
位置:WEB-INF目錄下作用可以配置struts 2的核心filter和struts 2的一些常量(一般不用來配置常量)
注:這里的加載順序是指常量的加載順序struts 2配置的,不是整個web.xml文件,web.xml會在tomcat啟動的時候加載。
所有配置文件的讀取順序為:1 default.properties —2、struts-default.xml —3、struts-plugin.xml —4、struts.xml —5、struts.properties —6、web.xml中的常量配置
當然,常量的配置并不是在struts.properties和web.xml中配置,在struts.xml中配置即可。
這些加載順序都體現在struts 2的核心控制器中,源碼如下:
在init方法中,調用init的initDispatcher方法加載配置文件,進入代碼:
我們會發現這個方法調用調度員的 init 方法再次。進入init方法:
這一系列代碼用于加載struts 2的配置文件。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習