1. 程式人生 > >struts2技術要點

struts2技術要點

cut row exec lai def name dev 配置 jsp

1,MVC框架完成的事情

ServLet做哪些事情: 處理用戶提交的數據 調用業務方法 處理業務結果 控制視圖顯示 用戶請求映射到一個Java類 MVC框架做的事情 將用戶請求映射到一個Java類 獲取用戶提交的數據 渲染數據(將數據封裝到前臺顯示(request)) 控制視圖跳轉 註:
ServLet strtus2
默認執行方法 service execute
方法參數 HttpServLetRequest, HttpServletRespones
返回值 String
方法 都是public
配置action類,在strtus.xml文件中,配置He‘llAction Strtus2是基於包管理的 當配置時找不到<package>時: Windows-----Preference---XML---XMl CataLog----ADD(location:C:\Users\cy\Desktop\struts-2.3.32\src\core\src\main\resources\_.dtd,ket type:URI,key:struts.xml頭文件Http),配置完就有了
<struts>
<!--extends必須寫,直接或間接繼承struts-default name自定義-->
 <package name="hello" extends="struts-default"> 
<!--name是請求名稱,不要寫/;class對應action完全限定名==包名+類名-->
  <action name="hello" class="包名.類名">
<!--result是結果集,name和對應action中-->
   <result name="success">/index.jsp</result>
  </action>
 </package>
</struts>
小註:當修改表單action的後綴名時,做以下操作: 找到/Web App Libraries/struts2-core-2.3.32.jar/org.apache.struts2/default.properties,打開後,找到struts.action.extension=action,,往後添加即可 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1,struts2線程安全
線程安全:在一個線程中有多個線程並發執行,每個線程執行過程中,變量值是相同的,執行結果也是相同的. struts2線程是安全的,因為每次請求都會重新創建新的action對象 由於action對象是struts2,反射生成的,所以要求Action類要有一個公共的無參構造方法. 2,配置文件詳解 ①常量配置方式一 1)亂碼問題: 若是有亂碼:查看/org/apache/struts2/default.properties下的struts.i18n.encoding=UTF-8,可以再strtus.xml裏面配置 <constant name="struts.i18n.encoding" value="UTF-8"></constant> 2)自定義擴展名: 查看/org/apache/struts2/default.properties下的struts.action.extension=action,, , 可以再strtus.xml裏面配置 <constant name="struts.action.extension" value="action,,cy"></constant> 3)友好提示信息 查看/org/apache/struts2/default.properties下的struts.devMode = false , 可以再strtus.xml裏面配置,設置開發模式 <constant name="struts.devMode" value="true"></constant> 4)設置配置文件修改後自動加載---推薦在開發中使用 查看/org/apache/struts2/default.properties下的struts.configuration.xml.reload = true , 可以再strtus.xml裏面配置 <constant name="struts.configuration.xml.reload" value="true"></constant> ②常量配置方式二 在src下添加struts.properties配置文件 ③團隊協作開發配置 通過include添加不同人員的配置文件
<include file="文件位置"></include>
配置文件的加載順序 struts-default.xml-->struts-plugin.xml-->struts.xml package的配置
<!--name: 包的名稱自定義,可以配置多個包;
    namespace命名空間:不同模塊可以指定不同的空間
    extends 值是直接或者間接繼承struts-default
-->
	<package name="default" namespace="/" extends="struts-default">	
	</package>
action的配置
<!--
name:是URL請求名,不需要加後綴(.action)
class:是處理URL請求對應的Java類,class要求包名+類名,並且該類是由公共的無參構造方法的
method:配置處理請求類的處理方法,默認是execute;方法必須滿足是公共的,返回值類型是String,無參
-->
<action name="login" class="cn.cy.action.LoginAction" method="">
</action>

result的配置
<!--
name:匹配請求處理方法的返回值,默認是success
type:結果處理類型,默認是dispather轉發
type有哪些:
        <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
chain:指action鏈,鏈接下一個action,執行actionA以後直接執行actionB直接執行actionC;
地址欄是執行的第一action
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
dispatcher:轉發:和ServLet一致,若request中有數據要多視圖顯示,那麽就是用
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
freemarker:模板
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
httpheader:頭文件
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
redirect:重定向;如果重定向到jsp頁面,可以直接重定向,如果重定向到另一個action,需註意是否配置了action的後綴名,如果                          要求有後綴名,那麽重定向的action一定要加上後綴名.
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
redirectAction:重定向到另一個action,不用加action的後綴名,會將前一個action的後綴名自動加上
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
stream:以流的形式顯示----文件下載
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
-->
<result name="success" type="">/success.jsp</result>

全局配置 只要namelogin的,都跳到login.jsp 全局結果集
 <global-results>
<result name="login">/login.jsp</result>
</global-results>
在action的配置中,如果不去配置class屬性,將會由默認的action來執行,默認的action是ActionSupport類
<!-- 配置默認執行的class -->
<default-class-ref class="包名+類名"></default-class-ref>
<!-- 配置默認的action,當所請求的action不存在時,那麽執行默認的action -->
<default-action-ref name="default"></default-action-ref>
<action name="default">
<result>error.jsp</result>
</action>
通配符的配置
<!-- 使用通配符來配置action,可以減少action的配置,*表示匹配所有,占位符用{1}表示第一個*所代表的內容 -->
<action name="*user*" class="包+類" method="{1}">
<result name="ss">ss.jsp</result>
</action>
通配符可以有兩個,但是method只能有一個{1}; 減少action的配置還可以使用DMI(動態方法調用),不推薦使用,存在安全隱患. 3,action的實現方式 1), 定義一個pojo類 好處:自定義一個普通的Java類即可,不具有侵入性
public class PojoAction {
public String execute(){
~~~
return "success";
}
}
2),實現action接口 好處:室編寫的代碼更加規範
import com.opensymphony.xwork2.Action;
 
public class InterfaceAction implements Action{
 
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
 
}
3)繼承ActionSupport類
import com.opensymphony.xwork2.ActionSupport;
 
public class ExtendsAction extends ActionSupport{
 
}

struts2技術要點