Struts2学习第二天——获取参数与数据校验

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.06.14 lutianfei none

struts2中获取请求参数

  • 在struts2中action是什么?(struts2是一个mvc框架)
    • View : jsp
    • Model : action
    • Control : action & StrutsPrepareAndExecuteFilter
1.属性驱动
  • 1.直接将action做一个model(类似bean结构),就可以得到请求参数.

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


    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。

    • 在页面上使用ognl来描述
    • 注意修改:<input type="text" name="user.username">
      • 优点:简单,解决了第一种封装的问题
      • 缺点:在页面上使用了ognl表达式,页面不通用了。
    • 问题:这种方式,数据是怎样封装的?
      • 通过struts2中的interceptor进行了数据封装.<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
  • Login2Action.java

//获取请求参数  属性驱动  第二种,直接在action声明一个model
public class Login2Action 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";
        }
    }
}


  • login2.jsp
  <body>
      ${requestScope["login.message"] }<br>
    <form action="${pageContext.request.contextPath}/login2" method="post">
        username:<input type="text" name="user.username"><br>
        password:<input type="password" name="user.password"><br>
        <input type="submit" value="登录">
    </form>
  </body>


2.模型驱动(在开发中应用比较多)
  • 开发步骤:
    • 1.让action类实现 ModelDriven
    • 2.重写getModel方法
    • 3.在action中实例化一个model对象,让getModel方法返回这个对象。
public class Login3Action extends ActionSupport implements ModelDriven<User> {
    //第一步:implements ModelDriven<User>



private User user = new User(); //第三步

public User getModel() { //第二步
return user;
}

}


//jsp
  <body>
      ${requestScope["login.message"] }<br>
    <form action="${pageContext.request.contextPath}/login3" method="post">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
  </body>


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

  • struts2 有很多围绕模型驱动的特性

    • <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值