struts2如何获取请求参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2如何获取请求参数相关的知识,希望对你有一定的参考价值。

  主要有两种方式:

  1. 在action中定义跟表单的name字段同名的field,并生成相应的set方法,这样struts就会自动将参数值设好。

  2. 可以在action中获取原生的HttpServletRequest 对象,通过该对象的getParameter(String param) 方法也可以。获取HttpServletRequest的方法是:在action方法(如execute方法)中调用:


  

HttpServletRequest request = ServletActionContext.getRequest();

即可。

参考技术A 在action中生成与表单的name 同名的属性的set 方法 就行了 参考技术B 通过表单。。。也可以通过url传值 参考技术C post get

Struts2 -- 获取请求参数

1.直接将action做一个model,就可以得到请求参数.

      缺点:需要单独定义javaBean,将action中属性copy到javaBean中。    
                 优点:简单。                
                 这种方式 ,底层是通过反射来实现的。

//获取请求参数  属性驱动  第一种,直接将action做为model
public class DemoAction extends ActionSupport {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        // 2.判断用户名与密码是否正确
        if ("tom".equals(username) && "123".equals(password)) {

            request.getSession().setAttribute("username", username);

            return SUCCESS;
        } else {
            request.setAttribute("login.message", "用户名或密码错误");
            return "failer";
        }
    }
}

 

 

2.在action中声明一个model。

2.在action中声明一个model。
       private User user;提供get/set方法
                
         在页面上使用ognl来描述
        <input type="text" name="user.username">
                
          优点:简单,解决了第一种封装的问题
          缺点:在页面上使用了ognl表达式,页面不通用了。
                
          问题:这种方式,数据是怎样封装的?
          是通过struts2中的interceptor进行了数据封装.
          <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

//获取请求参数  属性驱动  第二种,直接在action声明一个model
public class DemoAction  extends ActionSupport {

    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        // 2.判断用户名与密码是否正确
        if ("tom".equals(user.getUsername()) && "123".equals(user.getPassword())) {

            request.getSession().setAttribute("username", user.getUsername());

            return SUCCESS;
        } else {
            request.setAttribute("login.message", "用户名或密码错误");
            return "failer";
        }
    }
}

 

3.模型驱动

步骤:
                1.让action类实现ModelDriven
                2.重写getModel方法
                3.在action中实现化一个model对象,让getModel方法返回这个对象。
                 
            优点:解决了属性驱动存在的问题
            缺点:一次只能封装一个model对象.
            
             struts2 有很多围绕模型驱动的特性
            * <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性

 

public class Login1Action extends ActionSupport implements ModelDriven<User>{
    
    private User user = new User();
    @Override
    public User getModel() {
        return user;
    }
    
    @Override
    public String execute() throws Exception {
System.out.println(user.getUsername()
+" --> "+user.getPassword());
return null; } }

 


 

扩展:
        1.将数据封装到List集合
            页面:
                username1:<input type="text" name="users[0].username"><br>
                password1:<input type="password" name="users[0].password"><br>
                
                username2:<input type="text" name="users[1].username"><br>
                password2:<input type="password" name="users[1].password"><br>
            
            action类:
                private List<User> users;
                get/set方法
                
        2.将数据封装到Map集合
            页面:
                username1:<input type="text" name="map[‘aaa‘].username"><br>
                password1:<input type="password" name="map[‘aaa‘].password"><br>
                
                username2:<input type="text" name="map[‘bbb‘].username"><br>
                password2:<input type="password" name="map[‘bbb‘].password"><br>
            
            action类:
                private Map<String, User> map;
                提供get/set

 

以上是关于struts2如何获取请求参数的主要内容,如果未能解决你的问题,请参考以下文章

struts2中获取请求参数和类型转换

如何获取HttpServletResponse里面的内容

java的框架struts2的Action如何接收超链接的参数

Struts2 -- 获取请求参数

struts2怎样获取AJAX post请求传递的数据

Java实现一个HTTP基于xml的post请求 如何在struts2 action获取