Struts2笔记2

Posted 胡广勤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2笔记2相关的知识,希望对你有一定的参考价值。

一.请求参数封装
1.属性驱动:
     (1).无实体类情况:属性和动作类在一起
         a.编写jsp页面,提交数据,例如name和age
           

  1  <form action="${pageContext.request.contextPath}/demo1.action" method="post">
  2                  用户名:<input type="text" name="name"/><br/>
  3                  年龄:<input type="text" name="age"/><br/>
  4                  <input type="submit" value="提交"/>
  5              </form>

        b.编写动作类
            

  1 package huguangqin.com.cnblogs.action;
  2              import com.opensymphony.xwork2.ActionSupport;
  3               //它要想封装成功,有如下要求: 表单元素的name属性取值必须和动作类中的属性一致(get/set方法后面的部分)
  4             public class UserAction extends ActionSupport {
  5                  private String name;
  6                  private Integer age;// struts2会自动转为String.表单可以提交的数据类型包括:String/String[]/资源
  7 
  8                 public String demo1() {
  9                      System.out.println("name=" + name + ",age=" + age);
 10                      return this.SUCCESS;
 11                  }
 12 
 13                 public String getName() {
 14                      return name;
 15                  }
 16 
 17                 public void setName(String name) {
 18                      this.name = name;
 19                  }
 20 
 21                 public Integer getAge() {
 22                      return age;
 23                  }
 24 
 25                 public void setAge(Integer age) {
 26                      this.age = age;
 27                  }
 28 
 29             }
 30 

        c.编写struts.xml配置
           

  1  <?xml version="1.0" encoding="UTF-8"?>
  2              <!-- 导入dtd约束 -->
  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>
  7                  <package name="u" extends="struts-default">
  8                  <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
  9                      <result name="success">/success.jsp</result>
 10                 </action>
 11              </package>
 12              </struts>

    (2).有实体类情况
             动作类和模型数据分开
              * 使用要求:
              *  首先动作类中需要提供模型的get/set方法
              *  模型中要提供私有成员变量的get/set方法
              *  并且这些get/set方法必须和表单的name属性取值能对应上。
         a.编写jsp--注意OGNL语语
           

  1  <form action="${pageContext.request.contextPath}/demo1.action" method="post">
  2                  用户名:<input type="text" name="user.name"/><br/>
  3                  年龄:<input type="text" name="user.age"/><br/>
  4                  <input type="submit" value="提交"/>
  5              </form>

        b.编写实体类
        

  1 package huguangqin.com.cnblogs.entity;
  2          public class User {
  3              private String name;
  4              private Integer age;
  5 
  6             public String getName() {
  7                  return name;
  8              }
  9 
 10             public void setName(String name) {
 11                  this.name = name;
 12              }
 13 
 14             public Integer getAge() {
 15                  return age;
 16              }
 17 
 18             public void setAge(Integer age) {
 19                  this.age = age;
 20              }
 21 
 22             @Override
 23              public String toString() {
 24                  return "User [name=" + name + ", age=" + age + "]";
 25              }
 26 
 27         }
 28 

        c.编写动作类
       

  1  package huguangqin.com.cnblogs.action;
  2          import com.opensymphony.xwork2.ActionSupport;
  3          import huguangqin.com.cnblogs.entity.User;
  4 
  5         //使用要求:首先动作类中需要提供模型的get/set方法;
  6          //模型中要提供私有成员变量的get/set方法
  7         //并且这些get/set方法必须和表单的name属性取值能对应上
  8         public class UserAction extends ActionSupport {
  9              // 提供模型的实例化对象
 10             private User user = new User();
 11 
 12             // 提供get/set方法
 13             public User getUser() {
 14                  return user;
 15              }
 16 
 17             public void setUser(User user) {
 18                  this.user = user;
 19              }
 20 
 21             public String demo1() {
 22                  System.out.println(user);
 23                  return this.SUCCESS;
 24              }
 25 
 26         }
 27 

        d.编写struts.xml
            

  1 <?xml version="1.0" encoding="UTF-8"?>
  2              <!-- 导入dtd约束 -->
  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>
  7                  <package name="u" extends="struts-default">
  8                  <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
  9                      <result name="success">/success.jsp</result>
 10                  </action>
 11              </package>
 12              </struts>


     (3)封装到list
         a.编写jsp--注意模型属性取值
           

  1  <form action="${pageContext.request.contextPath}/demo1.action" method="post">
  2                  用户名1:<input type="text" name="users[0].name"/><br/>
  3                  年龄1:<input type="text" name="users[0].age"/><br/>
  4                  用户名2:<input type="text" name="users[1].name"/><br/>
  5                  年龄2:<input type="text" name="users[1].age"/><br/>
  6                  用户名3:<input type="text" name="users[2].name"/><br/>
  7                  年龄3:<input type="text" name="users[2].age"/><br/>
  8              <input type="submit" value="提交"/>
  9              </form>

         b.编写实体类
           
  1  package huguangqin.com.cnblogs.entity;
  2              public class User {
  3                  private String name;
  4                  private Integer age;
  5 
  6                 public String getName() {
  7                      return name;
  8                  }
  9 
 10                 public void setName(String name) {
 11                      this.name = name;
 12                  }
 13 
 14                 public Integer getAge() {
 15                      return age;
 16                  }
 17 
 18                 public void setAge(Integer age) {
 19                      this.age = age;
 20                  }
 21 
 22                 @Override
 23                  public String toString() {
 24                      return "User [name=" + name + ", age=" + age + "]";
 25                  }
 26 
 27             }
 28 


         c.编写动作类
            

  1 package huguangqin.com.cnblogs.action;
  2              import java.util.List;
  3              import com.opensymphony.xwork2.ActionSupport;
  4              import huguangqin.com.cnblogs.entity.User;
  5              //使用要求: 首先动作类中需要提供模型的get/set方法; 模型中要提供私有成员变量的get/set方法
  6             //并且这些get/set方法必须和表单的name属性取值能对应上
  7             public class UserAction extends ActionSupport {
  8                  private List<User> users;
  9 
 10                 public List<User> getUsers() {
 11                      return users;
 12                  }
 13 
 14                 public void setUsers(List<User> users) {
 15                      this.users = users;
 16                  }
 17 
 18                 public String demo1() {
 19                      System.out.println(users);
 20                      return this.SUCCESS;
 21                  }
 22 
 23             }
 24 

        d.编写Struts
           

  1  <?xml version="1.0" encoding="UTF-8"?>
  2              <!-- 导入dtd约束 -->
  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>
  7                  <package name="u" extends="struts-default">
  8                  <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
  9                      <result name="success">/success.jsp</result>
 10                  </action>
 11              </package>
 12              </struts>

    (4)封装到map
         a.编写jsp--注意模型属性
          

  1   <form action="${pageContext.request.contextPath}/demo1.action" method="post">
  2                  用户名1:<input type="text" name="users[‘one‘].name"/><br/>
  3                  年龄1:<input type="text" name="users[‘one‘].age"/><br/>
  4                  用户名2:<input type="text" name="users[‘two‘].name"/><br/>
  5                  年龄2:<input type="text" name="users[‘two‘].age"/><br/>
  6                  用户名3:<input type="text" name="users[‘three‘].name"/><br/>
  7                  年龄3:<input type="text" name="users[‘three‘].age"/><br/>
  8                  <input type="submit" value="提交"/>
  9              </form>

        b.编写实体类
           

  1  package huguangqin.com.cnblogs.entity;
  2              public class User {
  3                  private String name;
  4                  private Integer age;
  5 
  6                 public String getName() {
  7                      return name;
  8                  }
  9 
 10                 public void setName(String name) {
 11                      this.name = name;
 12                  }
 13 
 14                 public Integer getAge() {
 15                      return age;
 16                  }
 17 
 18                 public void setAge(Integer age) {
 19                      this.age = age;
 20                  }
 21 
 22                 @Override
 23                  public String toString() {
 24                      return "User [name=" + name + ", age=" + age + "]";
 25                  }
 26 
 27             }
 28 


         c.编写动作类
            

  1 package huguangqin.com.cnblogs.action;
  2              import java.util.Map;
  3              import com.opensymphony.xwork2.ActionSupport;
  4              import huguangqin.com.cnblogs.entity.User;
  5              // 使用要求: 首先动作类中需要提供模型的get/set方法; 模型中要提供私有成员变量的get/set方法
  6             // 并且这些get/set方法必须和表单的name属性取值能对应上
  7             public class UserAction extends ActionSupport {
  8                  private Map<String, User> users;
  9 
 10                 public Map<String, User> getUsers() {
 11                      return users;
 12                  }
 13 
 14                 public void setUsers(Map<String, User> users) {
 15                      this.users = users;
 16                  }
 17 
 18                 public String demo1() {
 19                      System.out.println(users);
 20                      return this.SUCCESS;
 21                  }
 22 
 23             }
 24 

         d.编写struts.xml
           
  1  <?xml version="1.0" encoding="UTF-8"?>
  2              <!-- 导入dtd约束 -->
  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>
  7                  <package name="u" extends="struts-default">
  8                  <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
  9                      <result name="success">/success.jsp</result>
 10                  </action>
 11              </package>
 12              </struts>


2.模型驱动
a.编写jsp
    

  1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
  2          用户名:<input type="text" name="name"/><br/>
  3          年龄:<input type="text" name="age"/><br/>
  4          <input type="submit" value="提交"/>
  5      </form>

b.编写实体类
   

  1  package huguangqin.com.cnblogs.entity;
  2      public class User {
  3          private String name;
  4          private Integer age;
  5 
  6         public String getName() {
  7              return name;
  8          }
  9 
 10         public void setName(String name) {
 11              this.name = name;
 12          }
 13 
 14         public Integer getAge() {
 15              return age;
 16          }
 17 
 18         public void setAge(Integer age) {
 19              this.age = age;
 20          }
 21 
 22         @Override
 23          public String toString() {
 24              return "User [name=" + name + ", age=" + age + "]";
 25          }
 26 
 27     }
 28 


c.编写动作类
    

  1 package huguangqin.com.cnblogs.action;
  2      import com.opensymphony.xwork2.ActionSupport;
  3     import com.opensymphony.xwork2.ModelDriven;
  4      import huguangqin.com.cnblogs.entity.User;
  5 
  6     //* 使用要求:
  7     //*  1.动作类必须实现ModelDriven接口,其中泛型提供的是模型对象
  8     //*   2.在动作类中需要定义一个模型对象,并且必须由我们自己来实例化
  9     //*   3.提供接口中抽象方法的实现,方法的返回值是我们定义的模型对象
 10     //*  模型驱动没有要求生成get/set方法
 11 
 12     public class UserAction extends ActionSupport implements ModelDriven<User> {
 13          //实例化模型对象
 14         private User user = new User();
 15 
 16         public String demo1() {
 17              System.out.println(user);
 18              return this.SUCCESS;
 19          }
 20          //实现抽象方法,返回模型对象
 21         @Override
 22          public User getModel() {
 23              return user;
 24          }
 25 
 26     }
 27 

d.编写struts
   

  1  <?xml version="1.0" encoding="UTF-8"?>
  2      <!-- 导入dtd约束 -->
  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>
  7          <package name="u" extends="struts-default">
  8          <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
  9              <result name="success">/success.jsp</result>
 10          </action>
 11      </package>
 12      </struts>

二.结果视图的配置
     1.result标签:
         name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。
         type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。
             type的常用取值:
                 dispatcher:(默认值)
                     使用请求转发,转向一个页面。
                 redirect:
                     使用重定向,转向一个页面。它可以用于重定向到另外一个动作。
                 redirectAction:
                     使用重定向,前往指定的动作。
     2.全局结果视图:<global-results>

  1         <package name="myDefault" extends="struts-default" abstract="true">
  2              <global-results>
  3                  <result name="login">/login.jsp</result>
  4              </global-results>
  5          </package>
 

三.访问Servlet的API的三种方式
1.使用ServletActionContext
   

  1  public class HelloAction extends ActionSupport{
  2 
  3     private HttpServletRequest request;
  4      private HttpServletResponse response;
  5      private HttpSession session;
  6      private ServletContext application;
  7 
  8      public String sayHello(){
  9          request = ServletActionContext.getRequest();
 10          response = ServletActionContext.getResponse();
 11          session = request.getSession();
 12          application = ServletActionContext.getServletContext();
 13 
 14          System.out.println(request);
 15          System.out.println(response);
 16          System.out.println(session);
 17          System.out.println(application);
 18          return SUCCESS;
 19      }
 20  }
 21 

2.使用ActionContext的方式(ActionContext 是一个map结构的对象)
   

  1  public class Hello2Action extends ActionSupport{
  2 
  3         private HttpServletRequest request;
  4          private HttpServletResponse response;
  5          private HttpSession session;
  6          private ServletContext application;
  7 
  8         public String sayHello(){
  9              request = (HttpServletRequest) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletRequest");
 10              response = (HttpServletResponse) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
 11              session = request.getSession();
 12              application = (ServletContext) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.ServletContext");
 13 
 14              System.out.println(request);
 15              System.out.println(response);
 16              System.out.println(session);
 17              System.out.println(application);
 18              return SUCCESS;
 19          }
 20      }
 21 

3.通过实现接口的方式

  1 public class Hello3Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
  2 
  3     private HttpServletRequest request;
  4      private HttpServletResponse response;
  5      private HttpSession session;
  6      private ServletContext application;
  7 
  8     public String sayHello(){
  9 
 10          session = request.getSession();
 11 
 12          System.out.println(request);
 13          System.out.println(response);
 14          System.out.println(session);
 15          System.out.println(application);
 16          return SUCCESS;
 17      }
 18 
 19      @Override
 20      public void setServletRequest(HttpServletRequest request) {
 21          this.request = request;
 22      }
 23      @Override
 24      public void setServletResponse(HttpServletResponse response) {
 25          this.response = response;
 26      }
 27      @Override
 28      public void setServletContext(ServletContext application) {
 29          this.application = application;
 30      }
 31 
 32 
 33  }
 34 






















































以上是关于Struts2笔记2的主要内容,如果未能解决你的问题,请参考以下文章

Struts 2 学习笔记

struts2--笔记

Struts2学习笔记

我的struts2笔记(不含代码)

struts的学习笔记

[Struts2学习笔记] -- 输入校验