05-struts2中获取请求参数

在struts2中action是什么?(struts2是一个mvc框架)

V:jsp
M:action
C:action StrutsPrepareAndExecuteFilter


在struts2中获取请求参数:

    jsp表单:

<form action="${pageContext.request.contextPath}/login" method="post">
        用户名:<input type="text" name="username"><br>
        密码<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>

    

  1.属性驱动

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

          LoginAction中:

            

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;
    }

          

问题1:action封装请求参数,会不会存在线程安全问题?
不会:因为每一次请求,都是一个新的action。
缺点:需要单独定义javaBean,将action中属性copy到javaBean中。
优点:简单。
这种方式 ,底层是通过反射来实现的。

          

      • 在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"/>

  2.模型驱动(在开发中应用比较多)

        

步骤:
1.让action类实现ModelDriven
2.重写getModel方法
3.在action中实现化一个model对象,让getModel方法返回这个对象。

public class LoginAction extends ActionSupport implements ModelDriven<User> {
	private User user = new User();
	
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println(user.getUsername() + ":" + user.getPassword());
		return "success";
	}

}

  

优点:解决了属性驱动存在的问题
缺点:一次只能封装一个model对象.

 

扩展:


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

原文地址:https://www.cnblogs.com/1963942081zzx/p/6486020.html