Struts2中Action接收请求参数的方式
以登录案例说明Struts2中Action接收请求参数的方式。
1、以Servlet的方式获取
1.1、新建登录页面
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/login.do">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" name="登录">
</form>
</body>
</html>
1.2、配置action
<package name="user" extends="struts-default" namespace="/user">
<action name="login" class="com.fu.controller.LoginAction" method="login">
</action>
</package>
<!--修改struts的后缀名-->
<constant name="struts.action.extension" value="do"></constant>
<!--是否是开发模式-->
<constant name="struts.devMode" value="true"></constant>
1.3、创建LoginAction类
public class LoginAction extends ActionSupport {
public String login() {
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"-"+password);
return null;
}
}
1.4、启动项目
在浏览器中输入:http://localhost:8080/Struts2/login.jsp
在控制器中查看输出结果与登录页面输入的用户名、密码是否一致;
2、Action模型驱动封装参数
1、在struts.xml配置文件添加如下代码:
<package name="model" extends="struts-default" namespace="/user">
<action name="login2" class="com.fu.controller.ModelAction" method="login">
</action>
</package>
新增后台方法:
User.java:
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;
}
}
ModelAction.java:
public class ModelAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public String login() {
String username = user.getUsername();
String password = user.getPassword();
System.out.println(username+"-"+password);
return null;
}
@Override
public User getModel() {
return user;
}
}
将login.jsp中请求地址进行调整:
<body>
<form action="${pageContext.request.contextPath}/user/login2.do">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" name="登录">
</form>
</body>
重启tomcat,访问如下地址:
在浏览器中输入:http://localhost:8080/Struts2/login.jsp
在控制器中查看输出结果与登录页面输入的用户名、密码是否一致;
3、参数注入原理
参数会自动注入是因为有两个拦截器在工作:
查看struts-default.xml源码可以看到下面两个拦截器:
<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
修改包下的拦截器: