zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    spring mvc + kafka实战
    springboot 实现文件下载功能
    vue前端文件下载
    父类和子类初始化顺序
    几种单例模式
    全链路压测注意点
    压力测试-ab
    压力测试-locust讲解
    Java httpClient 中get, post ,put(form-data & raw), delete方法使用
    RequestBody 和RequestEntity使用
  • 原文地址:https://www.cnblogs.com/1963942081zzx/p/6486020.html
Copyright © 2011-2022 走看看