struts2.0学习笔记(三)--Action

Struts 2.0 笔记
2008 08 21

一.标准Action的编写
    1.将action描述为ActionSupport的子类,用于实现execut的缺省方法
    2.自定义Action的返回值(默认仍使用的返回值是:SUCCESS,ERROR,INPUT,LOGIN,NONE),
        (1)重新编写映射路径
        (2)以http访问地址的区别Action的使用方法
二.Action获取页面提交信息(两种方法)
    1.将页面的提交信息直接封装在Action的控制器中
    2.便用标准的POJO类进行页面数据的封装.(必须有无参的构造方法,否则无法生成action实例)[推荐]
三.获取Servlet API中的一些对象
    1.非IoC方式
    (1)HttpServletRequest request = ServletActionContext.getRequest();
    (2)Http response = ServletActionContext.getResponse();
    (3)HttpSession session = ServletActionContext.getSession()
    2.IoC方法(使用ActionContext对象获取Servlet API对象)
        使用接口:
        (1)SessionAware
        (2)ServletRequestAware
        (3)ServletResponseAware

src/struts.xml
 1 <? xml version="1.0" encoding="GBK" ?>
 2 <! DOCTYPE struts PUBLIC
 3          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4          "http://struts.apache.org/dtds/struts-2.0.dtd" >
 5 < struts >
 6      < include  file ="struts-default.xml"   /> <!--  使用缺省的struts的配置文件  -->
 7
 8      <!--  包空间 ActionDemo 继承 struts-default  -->
 9      < package  name ="ActionDemo"  extends ="struts-default" >
10
11          <!--  映射名name="HelloAction" ,使用com.Action.HelloAction来实现  -->
12          < action  name ="HelloAction"  class ="com.Action.HelloAction" >
13              < result > /HelloAction.jsp </ result > <!--  转到的页面为HelloAction.jsp -->
14          </ action >
15
16          <!--
17             1. method="aliasAction"对应 HelloAction.java 中的aliasAction()方法
18             2.访问AliasHelloWord Action方法:在地址栏中输入:
19             (1)http://localhost:8080/Action/aliasAction.action
20             (2)http://localhost:8080/Action/HelloAction!aliasAction.action
21          -->
22          < action  name ="AliasHelloWord"  class ="com.Action.HelloAction"
23             method ="aliasAction" >
24              < result > /HelloAction.jsp </ result >
25          </ action >
26
27          <!--  映射名name="Login" 与 Login.jsp 中的 action="Login" 对应,使用com.Action.LoginAction来实现  -->
28          < action  name ="Login"  class ="com.Action.LoginAction" >
29              < result > /Hello.jsp </ result >
30          </ action >
31
32          <!--  映射名name="Loginx" 与 Loginx.jsp 中的 action="Login" 对应,使用com.Action.LoginActionx来实现  -->
33          < action  name ="Loginx"  class ="com.Action.LoginActionx" >
34              < result > /Hello.jsp </ result >
35          </ action >
36      </ package >
37 </ struts >
38
39

WebRoot/WEB-INF/web.xml
 1 <? xml version="1.0" encoding="UTF-8" ?>
 2 < web-app  id ="WebApp_ID"  version ="2.4"
 3     xmlns ="http://java.sun.com/xml/ns/j2ee"
 4     xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
 6      < display-name > Struts2Hello </ display-name >
 7      < filter >
 8          < filter-name > struts2 </ filter-name >
 9          < filter-class >
10             org.apache.struts2.dispatcher.FilterDispatcher
11          </ filter-class > <!--  以过虑器的形式出现  -->
12      </ filter >
13      < filter-mapping >
14          < filter-name > struts2 </ filter-name >
15          < url-pattern > /* </ url-pattern > <!--  过虑所有内容  -->
16      </ filter-mapping >
17      < welcome-file-list >
18          < welcome-file > index.html </ welcome-file >
19          < welcome-file > index.htm </ welcome-file >
20          < welcome-file > index.jsp </ welcome-file >
21          < welcome-file > default.html </ welcome-file >
22          < welcome-file > default.htm </ welcome-file >
23          < welcome-file > default.jsp </ welcome-file >
24      </ welcome-file-list >
25 </ web-app >
26

WebRoot/Hello.jsp
 1 <% @page contentType="text/html;charset=GBK" %>
 2 <% @taglib prefix="s" uri="/struts-tags" %>
 3 < html >
 4      < head >
 5          < title > HelloAction </ title >
 6      </ head >
 7      < body >
 8
 9          < h2 >
10              < s:property  value ="msg"   />
11          </ h2 >
12         ${test} < br >
13         ${nameA} < br >
14         ${nameB} < br >
15      </ body >
16 </ html >

WebRoot/HelloAction.jsp
 1 <% @page contentType="text/html;charset=GBK" %>
 2 <% @taglib prefix="s" uri="/struts-tags" %>
 3 < html >
 4      < head >
 5          < title > HelloAction </ title >
 6      </ head >
 7      < body >
 8
 9          < h2 >
10              < s:property  value ="message"   />
11          </ h2 >
12      </ body >
13 </ html >

WebRoot/Login.jsp
 1 <% @ page language="java" import="java.util.*" pageEncoding="ISO-8859-1" %>
 2 <%
 3String path = request.getContextPath();
 4String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5
%>
 6 <% @taglib prefix="s" uri="/struts-tags" %>
 7
 8 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
 9 < html >
10    < head >
11
12      < title > Login page </ title >
13    </ head >
14   
15    < body >
16      < s:form  action ="Login"  method ="POST" >
17      < s:textfield  name ="name"  label ="User name" />
18      < s:password  name ="pass"  label ="Password" />
19      < s:submit  value ="Submit" ></ s:submit >
20      </ s:form >
21    </ body >
22 </ html >
23

WebRoot/Loginx.jsp
 1 <% @ page language="java" import="java.util.*" pageEncoding="GBK" %>
 2 <%
 3    String path = request.getContextPath();
 4    String basePath = request.getScheme() + "://"
 5            + request.getServerName() + ":" + request.getServerPort()
 6            + path + "/";
 7
%>
 8 <% @taglib prefix="s" uri="/struts-tags" %>
 9
10 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
11 < html >
12      < head >
13
14          < title > Login page </ title >
15      </ head >
16
17      < body >
18          <!--  action="Loginx"中与struts.xml中映射名name="Loginx"相同, name="user.name"表示使用com.Action.LoginActionx类的user对象的name属性 -->
19          < s:form  action ="Loginx"  method ="POST" >
20              < s:textfield  name ="user.name"  label ="User name"   />
21              < s:password  name ="user.pass"  label ="Password"   />
22              < s:submit  value ="Submit" ></ s:submit >
23          </ s:form >
24      </ body >
25 </ html >
26

src/com.Action/HelloAction.java
 1 package  com.Action;
 2
 3 import  java.text.DateFormat;
 4 import  java.util.Date;
 5
 6 import  com.opensymphony.xwork2.ActionSupport;
 7
 8 /** */ /**
 9 * @author ∪∩BUG E-mail: [email protected]
10 * @version Aug 20, 2008 1:45:28 PM 类说明
11 */

12 @SuppressWarnings( " serial " )
13 public   class  HelloAction  extends  ActionSupport  {
14
15    private String message;
16
17    // getMessage()方法对应的是页面的显示
18    public String getMessage()
19    {
20        return message;
21    }

22    
23    //缺省的方法,将被默认执行
24    public String execute(){
25        
26        message = "HelloAction, Now is" + DateFormat.getInstance().format(new Date());
27        
28        //SUCCESS返回的是String类型,
29        System.out.println(SUCCESS);
30        return SUCCESS;
31    }

32    
33    //自定义的业务方法
34    public String aliasAction(){
35        message ="自定义的Action方法";
36        return SUCCESS;
37    }

38}

39

src/com.Action/LoginAction.java
 1 package  com.Action;
 2
 3 import  com.opensymphony.xwork2.ActionSupport;
 4
 5 /** */ /**
 6 * @author ∪∩BUG E-mail: [email protected]
 7 * @version Aug 21, 2008 11:31:00 PM 类说明
 8 */

 9 public   class  LoginAction  extends  ActionSupport  {
10    @Override
11    public String execute() throws Exception {
12        if("admin".equals(this.name)&"123".equals(this.pass)){
13            this.msg="欢迎" + this.name;
14    
15        }

16        else {
17            this.msg="非法输入!";
18        }
    
19        return SUCCESS;
20    }

21
22    private String name;
23    private String pass;
24    private String msg;
25
26    // 默认构造方法是必须的.否则无法生成action实例
27    public LoginAction() {
28
29    }

30
31    public LoginAction(String name, String pass, String msg) {
32        super();
33        this.name = name;
34        this.pass = pass;
35        this.msg = msg;
36    }

37
38    public String getName() {
39        return name;
40    }

41
42    public void setName(String name) {
43        this.name = name;
44    }

45
46    public String getPass() {
47        return pass;
48    }

49
50    public void setPass(String pass) {
51        this.pass = pass;
52    }

53
54    public String getMsg() {
55        return msg;
56    }

57
58    public void setMsg(String msg) {
59        this.msg = msg;
60    }

61
62}

63

src/com.Action/LoginActionx.java
 1 package  com.Action;
 2
 3 import  java.util.Map;
 4
 5 import  javax.servlet.http.HttpServletRequest;
 6 import  javax.servlet.http.HttpServletResponse;
 7
 8 import  org.apache.struts2.interceptor.ServletRequestAware;
 9 import  org.apache.struts2.interceptor.ServletResponseAware;
10 import  org.apache.struts2.interceptor.SessionAware;
11
12 import  com.opensymphony.xwork2.ActionContext;
13 import  com.opensymphony.xwork2.ActionSupport;
14 import  com.pojo.User;
15
16 /** */ /**
17 * @author ∪∩BUG E-mail: [email protected]
18 * @version Aug 21, 2008 11:31:00 PM 类说明
19 */

20
21 // IoC方法获取Servlet API(implements是一个类实现一个接口用的关键字, 他是用来实现接口中定义的抽象方法)
22 public   class  LoginActionx  extends  ActionSupport  implements  ServletRequestAware,ServletResponseAware,SessionAware {
23    private String msg;
24    private User user;
25    private HttpServletRequest request;
26    private HttpServletResponse response;
27    private Map session;
28    
29    @Override
30    public String execute() throws Exception {
31        if("admin".equals(user.getName())&"123".equals(user.getPass())){
32            this.msg="欢迎" + user.getName()+"对象化的提交";
33    
34        }

35        else {
36            this.msg="非法输入!";
37        }
    
38        //ServletActionContext.getRequest().setAttribute("test","Just Test!" );//非IoC方法获取Servlet API
39        
40        //获取session
41        Map map = ActionContext.getContext().getSession();
42        map.put("nameA""name1");
43        session.put("nameB""name2");
44        
45        
46        return SUCCESS;
47    }

48
49    // 默认构造方法是必须的.否则无法生成action实例
50    public LoginActionx() {
51
52    }

53
54    public String getMsg() {
55        return msg;
56    }

57
58    public void setMsg(String msg) {
59        this.msg = msg;
60    }

61
62    public User getUser() {
63        return user;
64    }

65
66    public void setUser(User user) {
67        this.user = user;
68    }

69
70    //IoC方法获取Servlet API
71    //实现接口中定义的抽象方法setServletRequest(HttpServletRequest arg0)
72    public void setServletRequest(HttpServletRequest request) {
73        this.request=request;
74        request.setAttribute("test","Just Test!" );
75        
76    }

77
78    //实现接口中定义的抽象方法setServletResponse(HttpServletResponse arg0)
79    public void setServletResponse(HttpServletResponse response) {
80        this.response=response;
81        
82    }

83    
84    //实现接口中定义的抽象方法setSession(Map arg0)
85    public void setSession(Map e) {
86        this.session=e;
87        
88    }

89
90
91}

92

src/com.pojo/User.java
 1 package  com.pojo;
 2
 3 import  java.io.Serializable;
 4
 5 /** */ /**
 6 * @author ∪∩BUG E-mail: [email protected]
 7 * @version Aug 22, 2008 11:01:56 AM 类说明
 8 */

 9 public   class  User  implements  Serializable  {
10    private String name;
11    private String pass;
12
13    public User(String name, String pass) {
14        super();
15        this.name = name;
16        this.pass = pass;
17    }

18
19    public User() {
20
21    }

22
23    public String getName() {
24        return name;
25    }

26
27    public void setName(String name) {
28        this.name = name;
29    }

30
31    public String getPass() {
32        return pass;
33    }

34
35    public void setPass(String pass) {
36        this.pass = pass;
37    }

38}

39

你可能感兴趣的:(struts2.0学习笔记(三)--Action)