Struts2---入門

Struts2---入門

1、概念

Struts是一個流行和成熟的基於MVC模式下的Web應用程序框架,使用Struts的目的是爲了幫助我們減少在運用MVC設計模型來開發Web應用的時間

MVC是模型(Model)、視圖(View)和控制器(Controller)的縮寫;MVC是一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。在Struts中,Controller就是action。

搭建Struts2環境步驟:
1、下載相關jar包;
2、創建Web項目;
3、創建並完善相關配置文件;
4、創建Action並測試啓動;

2、配置文件

解析struts.xml:
1、.dtd就是約束struts.xml中可以有哪些標籤不能有哪些標籤。
2、<include>
<!-- 可以通過 <include file="">包含其他文件,include節點是struts2中組件化的方式,可以將每個功能模塊獨立到一個xml配置文件中,然後用Include節點引用 -->
<include file="struts-default.xml"></include>
3、<package>
package提供了將多個Action組織成爲一個模塊的方式。
package的名字必須是唯一的(配置文件中可以有多個包,但包名要唯一),可以在這個包上加一些拓展的包。
abstract設置package的屬性爲抽象,抽象的package不能定義action的值,ture或false。
namespace="/test":http://localhost:8080/項目名/test/xx.action
namespace="/":http://localhost:8080/項目名/xx.action
<package name="包名" extends="繼承的父類的名稱" namespace="包的命名空間">
4、攔截器
<interceptors>
<!-- 攔截器定義name(名稱)和class(類路徑) -->
<interceptor name="" class=""></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="">
<interceptor-ref name=""></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定義默認的攔截器,每個Action都會自動引用。如果Action中引用了其他的攔截器,默認的攔截器將無效 -->
<default-interceptor-ref name=""></default-interceptor-ref>
5、<global-results>
<!-- 全局results配置 -->
<global-results>
<result name="">/xxx.jsp</result>
</global-results>
6、<action>
<!-- 
Action配置:一個Action可以被多次映射(只要action配置中的name不同)
name:action名稱,如(假設namespace="/"):http://localhost:8080/項目名/<action>中屬性name值.action
class:對應的類的路徑
method:調用Action中的方法名
Ps:每個package包裏可以定義多個action
-->
<action name="" class="" method="" converter="">
<!-- 引用攔截器:name:攔截器名稱或攔截器棧名稱 -->
<interceptor-ref name=""></interceptor-ref>

<!-- 節點配置:name:result名稱,和Action中返回的值相同(如果不寫name,默認SUCCESS或"success");
type:result類型,不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher -->
<result name="" type="">/xxx.jsp</result>

<!-- 參數設置:name:對應Action中的get/set方法 -->
<param name="">值</param>
</action>
7、<constant>
<!-- struts.properties文件中的語句:struts.i18n.reload=true,則對應struts.xml文件中語法如下 -->
<constant name="struts.i18n.reload" value="true"></constant>

3、深入

深入講解struts的八個主要步驟:
1.訪問Servlet API

2.Action搜索順序

3.動態方法調用
動態方法調用是爲了解決一個Action對應多個請求的處理,以免Action太多。
三種方式:指定method屬性、感嘆號方式、通配符方式
1:<action name="addAction" method="add" class="com.imooc.action.HelloWorldAction">
http://localhost:8080/HelloWorld/addAction.action
2:<constant name="struts.enable.DynamicMethodInvocation" value="false"> </constant>
<action name="helloworld" class="com.imooc.action.HelloWorldAction">
<result >/result.jsp</result>
<result name="add">/add.jsp</result>
<result name="update">/update.jsp</result>
</action>
http://localhost:8080/HelloWorld/helloworld!add.action
3: <action name="*_*" method="{2}" class="com.imooc.action.{1}Action">
<result >/{2}.jsp</result>
<result name="add">/{2}.jsp</result>
<result name="update">/{2}.jsp</result>
</action>
http://localhost:8080/HelloWorld/HelloWorld_add.action
4.指定多個配置文件
<include file="com/imooc/xml/helloworld.xml"></include>
5.默認Action
<default-action-ref name="error"></default-action-ref>
<action name="error">
<result>/error.jsp</result>
</action>

注意:<default-action-ref name="error">和<action name="error">必須要一致以及package——name不要一樣。

Ps:設置默認Action大前提:後綴正確範圍內有效以及不許有通配符出現。如“_”。
6.Struts2後綴
<!-- Struts2後綴方式一:struts.xml -->
<constant name="struts.action.extension" value="action,do"></constant>
<!-- Struts2後綴方式二:struts.properties -->
struts.action.extension=action,do,struts2
<!-- Struts2後綴方式三:web.xml -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>do</param-value>
</init-param>
</filter>

注意:如果值什麼都不寫,則後綴不加纔可以正常顯示。如果這條語法都沒有設置,則默認.action或什麼都不加後綴
7.接受參數
<!-- 使用Action的屬性接收參數 -->
@login.jsp
<form action="LoginAction.action" method="post">
用戶名:<input name="user" type="text" />
密碼:<input name="pwd" type="password" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport {
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}

public String login(){
System.out.println(user);
System.out.println(pwd);
return SUCCESS;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

<!-- 使用DomainModel接收參數 -->
@login.jsp
<form action="LoginAction.action" method="post">
用戶名:<input name="user1.user" type="text" />
密碼:<input name="user1.pwd" type="password" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport {
private User user1;

public User getUser1() {
return user1;
}

public void setUser1(User user1) {
this.user1 = user1;
}

public String login(){
System.out.println(user1.getUser());
System.out.println(user1.getPwd());
return SUCCESS;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

@User.java
public class User {
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

<!-- 使用ModelDriven接收參數(推薦) -->
@login.jsp
<form action="LoginAction.action" method="post">
用戶名:<input name="user" type="text" />
密碼:<input name="pwd" type="password" />
書籍1:<input name="bookList[0].user" type="text" />
書籍2:<input name="bookList[1].user" type="text" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user1 =new User();	
public String login(){
System.out.println(user1.getUser());
System.out.println(user1.getPwd());
System.out.println(user1.getBookList().get(0).getUser());
System.out.println(user1.getBookList().get(1).getUser());
return SUCCESS;
}
public User getModel() {
return user1;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

@User.java
public class User {
private String user;
private String pwd;
private List<User> bookList;
//setter/getter...
}

注意:request方式接收參數也行。


8.輸入數據校驗

@LoginAction.java
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user1 =new User();

public String login(){

/*if(user1.getUser()==null||"".equals(user1.getUser())){方法一
this.addFieldError("error_user", "用戶名不能爲空!");
return INPUT;
}*/

System.out.println(user1.getUser());
System.out.println(user1.getPwd());
System.out.println(user1.getBookList().get(0).getUser());
System.out.println(user1.getBookList().get(1).getUser());
System.out.println(user1.getAge());
return SUCCESS;
}

public User getModel() {
return user1;
}

@Override
public void validate() {//方法二:推薦
if(user1.getUser()==null||"".equals(user1.getUser())){
this.addFieldError("error_user", "用戶名不能爲空!");
}
}
}

@User.java
public class User {
private String user;
private String pwd;
private int age;
private List<User> bookList;
//setter/getter...
}

@login.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<form action="LoginAction.action" method="post">
用戶名:<input name="user" type="text" /><s:fielderror name="error_user"></s:fielderror>
密碼:<input name="pwd" type="password" />
書籍1:<input name="bookList[0].user" type="text" />
書籍2:<input name="bookList[1].user" type="text" />
年齡:<input name="age" type="text" />
<input value="提交" type="submit" />
</form>

9.處理結果類型



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章