1. 程式人生 > >struts2的瑣碎知識點

struts2的瑣碎知識點

default del 方法名 ret action 動作 div println apach

servlet:
void init(ServletConfig cfg):// 讀取servlet的配置參數
void service(ServletRequest request, ServletResponse response);// 服務方法,用戶每次訪問都會被執行
void destroy();// 銷毀方法
filter:
void init(FilterConfig cfg);// 讀取filter的配置參數
void doFilter(ServletRequest request, ServletResponse response,FilterChain chain);// 過濾方法,每次訪問被過濾的資源都被執行
void destroy();// 銷毀方法
OGNL:STRUTS2通過其讀寫對象的屬性
搭建struts2的開發環境:
1.下載官方的struts2的發行包:struts2-2.3.15.3-all
2.導入jar包到lib目錄下:直接拷貝struts2發行包的app\struts2-blank\WEB-INF\lib下的jar即可
3.在構建目錄的頂端,建立一個struts2.xml配置文件
4.在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>
5.驗證,部署到tomcat服務器,啟動,沒有錯誤提示,成功
// 規範
// 指定訪問是添加的後綴名字,多個後綴名以英文逗號(,)隔開
<constant name="struts.action.extension" value="action,"/>
// 當struts2的配置文件修改後,系統是否加載修改後的文件,默認為false
<constant name="struts.configuration.xml.reload" value="false"/>
// 開發模式開啟
<constant name="struts.devModel" value="true"/>
// 設置視圖的主題
<constant name="struts.ui.theme" value="simple">
// 長傳文件大小的設置
<constant name="struts.multipart.maxSize" value="1073930"/>
package元素:
name:必須唯一
extends:必須繼承struts-default,否則struts2的核心功能將無法使用
namespace:命名空間,一般以"/" 開頭,表示動作的訪問路徑:命名空間+動作名,不寫默認為訪問的該項目下的動作名
action元素:
name:動作名
class:動作類的完整路徑名,會根據反射機制實例化.反射獲得構造方法,獲得普通方法,獲得字段屬性
method:方法名,默認是execute();
反射機制:反著來,有對象得到類名,Class.forName():獲取類對象
在實際的操作過程中,凡是看到有參數傳遞了一個完整的"包.類"的形式,一般都是使用的反射機制作用的
有重大數據,或者除了美元之外,所有的指數都在跌,之前多頭行情大漲,一出現跌,你就可以去買跌,因為買跌
是大趨勢,在大趨勢面前才可以穩定的賺錢

// 獲取ServletAPI相關對象的實例
public class ActionDemo extend ActionSupport{
public String execute(){
HttpServletContext request = ServletActionContext.getRequest();
HttpServletContext response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getServletContext();
return null;
}
}
獲取ServletAPI的原因:攔截器(ServletConfig)會給你註入這些實例
結果視圖:
1.局部視圖:服務於當前動作的結果
<action name="upload" class="com.deng.UploadAction" method="execute">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
2.全局視圖:動作訪問,當在局部視圖中沒有找到時候,去全局視圖找
<package name="p1" extends="struts-default">
<global-results>
<result name="success" type="dispatcher">1.jsp</result>
</global-results>
</package>

result元素
name:邏輯視圖的名稱,他對應的是動作方法的返回值,默認為success
type:達到目標的形式,默認為dispatcher,轉發

struts2的結果類型
在struts-default.xml中
1.chain:用戶轉發到另一個動作
<action name="c1" class="com.deng.Ac1" method="m1">
<result name="success" type="chain">c2</result>
</action>
<action name="c2" class="com.deng.Ac2" method="m2">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
轉發到不同命名空間的另外一個動作
<action name="c1" class="com.deng.Ac1" method="m1">
<result name="success" type="chain">
<!--給chain對應類型的處理類,註入參數值,調用的是setter方法
<param name="namespace">/n2</param>
<param name="actionName">c2</param>
</result>
</action>
<action name="c2" class="com.deng.Ac2" method="m2">
<result name="success" type="dispatcher">/1.jsp</result>
</action>
2.dispatcher:轉發到另外一個jsp頁面
<action name="upload" class="com.deng.UploadAction" method="execute">
方法一:<result name="success" type="dispatcher">/1.jsp</result>
方法二:<result name="success" type="dispatcher">
<param name="location">/1.jsp</param>
</result>
</action>
3.freemarker:用於轉發到另外一個freemarker模板,頁面靜態化,一種用來生成靜態文本的工具
4.velocity:用於轉發到另外一個velocity模板
5.httpheader:用來輸出http協議的消息頭
6.redirect:用於重定向到另外一個頁面
7.redirectAction:用於重定向到另外一個動作
8.stream:用於文件下載
9.plainText:以純文本的形式展現

--------------------------------------
封裝用戶請求參數,very important
1.動態參數(用戶請求的參數)註入
方式一:用Action的動作類作為模型對象
login.jsp
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="username" type="text">
password:<input name="password" type="text">
<input type="submit" value="ok"
</form>
struts.xml配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package>
動作類,動作類當作模型對象
public class RegistAction extend ActionSupport{
private String password;
private String username;
public String getUsername(){
return username;
}
// 框架會按照表單的提交的參數值,調用對應的setter屬性
public void setUsername(String username){
this.username = username;
}
。。。

public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
}
方式兩:模型和動作類分開
模型就是一個javaBean
public class Person implements Serializable{
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(){
this.password = password;
}
@override
public String toString(){
return "Person[username="+"username+",password="+password+"]";
}
}

動作類
public class RegistAction extends ActionSupport{
// new 一個對象
Person person = new Person();
// 生成對象的getter和setter方法
public String getPerson(){
return person;
}
public void setPerson(Person person){
this.person = person;
}

public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
}
配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package>

表單
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="person.username" type="text">
password:<input name="person.password" type="text">
<input type="submit" value="ok"
</form>

方法三:模型驅動ModelDriven
一個javaBean
public class Person implements Serializable{
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(){
this.password = password;
}
@override
public String toString(){
return "Person[username="+"username+",password="+password+"]";
}
}

動作類
public class RegistAction implements ModelDriven<Person>{
// new 一個對象
private Person person = new Person();
// 生成對象的getter和setter方法
public String getPerson(){
return person;
}
public void setPerson(Person person){
this.person = person;
}

public String regist(){
System.out.println(username+":"+password);
if("abc".equals(username)&&"123".equals(password))
return SUCCESS;
else
return LOGIN;
}
public Person getModel(){
return person;
}
}

配置文件
<package name="p1" extends="struts-default">
<action name="regist" class="comg.deng.ResigtAction" method="regist">
<result name="success">/success.jsp</result>
<reuslt name="login">/login.jsp</result>
</action>
</package>

表單
<form action="${pageContext.request.contextPath}/regist.action" method="post">
username:<input name="username" type="text">
password:<input name="password" type="text">
<input type="submit" value="ok"
</form>

// 靜態參數註入
<package name="p1" extend="struts-default" namespace="/usr">
<action name="a1" class="com.deng.TomorrowAction" method="m1">
<param name="name">student</param>
<action>
</package>
public class TomorrowAction extends ActionSupport{
private String name;// 這個name的值就是:student
public String getName(String name){
return name;
}
public void setName(){
this.name = name;
}
public String m1(){
System.out.println(name);
return null;
}
}

struts2的瑣碎知識點