Action接收请求参数的方式

以一个简单的登录案例来讲解

创建JavaEE项目,选择Web application,勾选struts2

选择稍后自行添加jar包

导入jar包

注意这里面的struts-core-2.5.20已经整合了xwork-core.jar相关插件,所以在官方下载的zip包的lib目录下找不到xwork-core.jar包

设置web.xml过滤器,为struts2方式

如下:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

注意这里面的过滤器类的位置,在struts 2.5版本之上就已经修改为上面这样,否则为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

1. 通过以前的Servlet来获取

Index.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>login</title>
  </head>
  <body>
      <form action="${pageContext.request.contextPath}/user/login.action">
        用户名:<input type="text" name="username"/><br>
        密码:<input type="password" name="password">
          <input type="submit" value="登录">
      </form>
  </body>
</html>

2. 创建一个action

LoginAction

第一种获取参数方式:通过request对象

package action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

public class LoginAction extends ActionSupport {
    public String login(){
        //虎丘请求参数
        //第一种方法:通过request对象
        HttpServletRequest request = ServletActionContext.getRequest();
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        //NONE 不跳转
        return NONE;
    }
}

第二种获取方式:通过属性的set注入

LoginAction

package action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

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

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

    public String login(){
        //获取请求参数
        //第二种方式:通过set注入
        System.out.println(username);
        System.out.println(password);
        //NONE 不跳转
        return NONE;
    }
}

struts.xml与第一种方法一样

为什么会注入,是因为struts在调用action之前会经过一些拦截器,这其中就包括一个名为 params的拦截器,这个拦截器会判断提供的action中是否存在setter,如果存在,会将对应的params注入到这一变量中。

第三种方式:通过javabean注入(原理:为action添加一个bean的set和get方法)

login.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>login</title>
  </head>
  <body>
      <form action="${pageContext.request.contextPath}/user/login_3.action">
        用户名:<input type="text" name="user.username"/><br>
        密码:<input type="password" name="user.password">
          <input type="submit" value="登录">
      </form>
  </body>
</html>

注意这里面的name属性值应该写为javabean名.属性名

LoginAction

package action;

import com.opensymphony.xwork2.ActionSupport;
import module.User;

public class LoginAction_3 extends ActionSupport {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    public String login(){
        System.out.println(user.getUsername()+" "+user.getPassword());
        return NONE;
    }
}

这里面提供user的set和get方法,在访问该action之前的时候,struts拦截器会自动拦截,将这一参数user注入action里面的user

User(javabean里面提供对应的属性和setter、getter、toString方法)

package module;

public class User {
    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 toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

第四种方法:通过模型驱动,在action里面实现一个模型驱动接口,这种方法最常用

原理:在调用action之前会经过拦截器ModuleDriven

通过这种方式,简化了之前的javabean注入

实现步骤:

1. 在action里面实现一个模型驱动接口

2. 提供一个模型属性,并且一定要赋值

LoginAction

package action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import module.User;

public class LoginAction_4 extends ActionSupport implements ModelDriven<User> {
    public String login(){
        System.out.println(user);
        return NONE;
    }
    private User user=new User();
    @Override
    public User getModel() {
        return user;
    }
}

login.jsp不用像之前那样写user.属性名,直接写上属性名就可以了


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>login</title>
  </head>
  <body>
      <form action="${pageContext.request.contextPath}/user/login_4.action">
        用户名:<input type="text" name="username"/><br>
        密码:<input type="password" name="password">
          <input type="submit" value="登录">
      </form>
  </body>
</html>

第五种方法:通过静态参数注入(少用)

在action里面将params写死

struts.xml

<package name="p2" extends="struts-default" namespace="/test">
        <action name="login_5" class="action.LoginAction_5"  method="login">
            <param name="username">zjas</param>
            <param name="password">zjas</param>
        </action>
    </package>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值