Struts2框架之Action获取请求参数的四种方式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41855420/article/details/102651029

方式一:通过request获取

①、LoginAction.java文件
package cn.hestyle.web.action;

import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

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

    public String login(){
        //通过ServletActionContext获取request
        HttpServletRequest request = ServletActionContext.getRequest();
        //通过request获取参数
        username = request.getParameter("username");
        password = request.getParameter("password");
        System.out.println("username=" + username + "\tpassword=" + password);
        return "success";
    }
}

②、对应的struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="user" extends="struts-default">
        <!-- 申明login动作,并使用LoginAction类中的login方法进行处理 -->
        <action name="login" class="cn.hestyle.web.action.LoginAction" method="login"></action>
    </package>
</struts>
③、前端index.jsp界面
<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2019/10/20
  Time: 2:35 下午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/login.action" method="post">
        <table border="1px">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>

④、浏览器访问

在这里插入图片描述
在这里插入图片描述

方式二:通过Action的属性的set方法注入

①、LoginAction.java文件
package cn.hestyle.web.action;


public class LoginAction {
	//通过set注入必须实现属性的setter方法!!!
    private String username;
    private String password;

    public String login(){
        System.out.println("username=" + username + "\tpassword=" + password);
        return "success";
    }

    public void setUsername(String username) {
        this.username = username;
        System.out.println("调用了setUsername方法");
    }

    public void setPassword(String password) {
        this.password = password;
        System.out.println("调用了setPassword方法");
    }
}

②、对应的struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="user" extends="struts-default">
        <!-- 申明login动作,并使用LoginAction类中的login方法进行处理 -->
        <action name="login" class="cn.hestyle.web.action.LoginAction" method="login"></action>
    </package>
</struts>
③、前端index.jsp界面
<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2019/10/20
  Time: 2:35 下午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/login.action" method="post">
        <table border="1px">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>

④、浏览器访问

在这里插入图片描述
在这里插入图片描述

方式三:通过Action的属性的set模型注入

该方法特点,需要将表单封装成一个model(类),并且前端表单项需要加上模型属性的前缀。

①、LoginAction.java文件
package cn.hestyle.web.action;


import cn.hestyle.model.User;
public class LoginAction {
    //user的各个属性必须实现getter、setter方法
    private User user;

    public User getUser() {
        System.out.println("调用了getUser方法");
        return user;
    }

    public void setUser(User user) {
        System.out.println("调用了setUser方法");
        this.user = user;
    }

    public String login(){
        System.out.println(user);
        return "success";
    }
}

②、对应的struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="user" extends="struts-default">
        <!-- 申明login动作,并使用LoginAction类中的login方法进行处理 -->
        <action name="login" class="cn.hestyle.web.action.LoginAction" method="login"></action>
    </package>
</struts>
③、前端index.jsp界面
<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2019/10/20
  Time: 2:35 下午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/login.action" method="post">
        <table border="1px">
            <tr>
                <td>用户名</td>
                <!-- 表单参数username需要加上user前缀 -->
                <td><input type="text" name="user.username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <!-- 表单参数password需要加上user前缀 -->
                <td><input type="password" name="user.password"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>
④、浏览器访问

在这里插入图片描述
在这里插入图片描述

方式四:通过Action模型驱动封装( \color{red}推荐

该方法特点,需要将表单封装成一个model(类),需要实现ModelDriven接口。

①、LoginAction.java文件
package cn.hestyle.web.action;


import cn.hestyle.model.User;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 通过实现ModelDriven<User>接口
 */
public class LoginAction implements ModelDriven<User> {
    //user的各个属性必须实现getter、setter方法,并且user需要手动new出来
    private User user = new User();
    
    public String login(){
        System.out.println(user);
        return "success";
    }

    @Override
    public User getModel() {
        System.out.println("调用了getModel方法");
        return user;
    }
}
②、对应的struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="user" extends="struts-default">
        <!-- 申明login动作,并使用LoginAction类中的login方法进行处理 -->
        <action name="login" class="cn.hestyle.web.action.LoginAction" method="login"></action>
    </package>
</struts>
③、前端index.jsp界面
<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2019/10/20
  Time: 2:35 下午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/login.action" method="post">
        <table border="1px">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>
④、浏览器访问

在这里插入图片描述
在这里插入图片描述

参数注入原理:

ParametersInterceptorModelDrivenInterceptor两个拦截器
在这里插入图片描述
在这里插入图片描述
第四种方式最为简介,推荐使用第四种。
以上就是Struts2框架之Action获取请求参数的四种方式,各位道友给个关注、点个赞再走呗~

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/102651029