最近大家都在找工作,我好迷茫,覺得自己會的東西太少了。所以決定開始學習SSH三大框架。 首先是struts. struts是基於mvc模式的框架。(struts其實也是servlet封裝,提高開發效率!) Servlet起到控制器作用!主要可以: 》 獲取請求數據封裝 【BeanUtils可以優化, ...
最近大家都在找工作,我好迷茫,覺得自己會的東西太少了。所以決定開始學習SSH三大框架。
首先是struts.
struts是基於mvc模式的框架。(struts其實也是servlet封裝,提高開發效率!)
Servlet起到控制器作用!主要可以:
----》 獲取請求數據封裝 【BeanUtils可以優化,(調用方法?)】
----》 調用Service處理業務邏輯
----》 跳轉(轉發/重定向) 【跳轉代碼寫死】
傳統mvc開發:
1. 跳轉代碼寫死,不靈活
2. 每次都去寫servlet,web.xml中配置servlet!
(配置目的: 請求, Servlet處理類)
軟體中的框架,是一種半成品; 我們項目開發需要在框架的基礎上進行!
因為框架已經實現了一些功能,這樣就可以提高開發效率!
下麵是我做的struts的一個helloworld.簡要介紹開發步驟:
1.引jar包。
一種很方便的引法:工程上右鍵BuildPath-->Add Libraries-->UserLibrary-->next-->右邊的library-->點進去 直接new .加入你需要加入的jar包。這樣只需加一次,後邊的開發就可以直接引用了,不需要再拷貝。
struts需要引入:大家自己網上下載。
commons-fileupload-1.2.2.jar 【文件上傳相關包】
commons-io-2.0.1.jar
struts2-core-2.3.4.1.jar 【struts2核心功能包】
xwork-core-2.3.4.1.jar 【Xwork核心包】
ognl-3.0.5.jar 【Ognl表達式功能支持表】
commons-lang3-3.1.jar 【struts對java.lang包的擴展】
freemarker-2.3.19.jar 【struts的標簽模板庫jar文件】
javassist-3.11.0.GA.jar 【struts對位元組碼的處理相關jar】
在這裡說一下tomcat啟動時,對於struts的調用順序,就知道為什麼這樣配置了。
伺服器啟動:
1. 載入項目web.xml
2. 創建Struts核心過濾器對象, 執行filter à init()
struts-default.xml, 核心功能的初始化
struts-plugin.xml, struts相關插件
struts.xml 用戶編寫的配置文件
訪問:
3. 用戶訪問Action, 伺服器根據訪問路徑名稱,找對應的aciton配置, 創建action對象
4. 執行預設攔截器棧中定義的18個攔截器
5. 執行action的業務處理方法
2.web.xml的過濾器的配置。寫法基本固定。 struts2配置 ,struts核心功能的初始化,通過過濾器完成
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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> </web-app>
3.開發action
處理請求的類 (struts中的action類取代之前的servlet)
處理請求, execute()必須返回String,方法不能有參數
import com.opensymphony.xwork2.ActionSupport; public class hello extends ActionSupport{//必須繼承ActionSupport @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("訪問action,,正在 處理 請求");
System.out.println("調用service");
return "success";//返回跳轉的標記
}
}
4.配置action
在src下建立一個struts.xml. 一個類需要在struts.xml中配置一個action.
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <!DOCTYPE struts PUBLIC 4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 5 "http://struts.apache.org/dtds/struts-2.3.dtd"> 6 <struts>
//必須繼承struts-default,核心功能的初始化。下邊有解釋 7 <package name="xxxx" extends="struts-default">
//name是訪問路徑 class是對於哪個action 8 <action name="hello" class="action.hello" method="execute">
//返回標記是success 9 <result name="success" type=" ">/success.jsp</result> 10 </action> 11 </package> 12 </struts>
訪問http://localhost:8080/工程名/hello;會返回success.jsp的內容。
struts-default.xml, 詳解
struts2-core-2.3.4.1.jar/ struts-default.xml
內容:
1. bean節點指定struts在運行的時候創建的對象類型
2.指定struts-default包 【用戶寫的package(struts.xml)一樣要繼承此包 】
package struts-default 包中定義了:
a. 跳轉的結果類型
dispatcher 轉發,不指定預設為轉發
redirect 重定向
redirectAction 重定向到action資源
stream (文件下載的時候用)
b. 定義了所有的攔截器
定義了32個攔截器!
為了攔截器引用方便,可以通過定義棧的方式引用攔截器,
此時如果引用了棧,棧中的攔截器都會被引用!
defaultStack 預設的棧,其中定義預設要執行的18個攔截器!
c. 預設執行的攔截器棧、預設執行的action
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
<interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
過濾器與攔截器
攔截器功能與過濾器功能類似。
區別:
共同點: 都攔截資源!
區別:
過濾器,攔截器所有資源都可以; (/index.jsp/servlet/img/css/js)
攔截器,只攔截action請求。
攔 截器是struts的概念,只能在struts中用。
過濾器是servlet的概念,可以在struts項目、servlet項目用。