您的位置:首页 > 编程语言 > Java开发

在struts2中获取请求参数

2016-10-09 22:56 295 查看
在struts2中获取请求参数:

1.属性驱动

(1)方式一:直接将action做一个model,就可以得到请求参数.

问题1:action封装请求参数,会不会存在线程安全问题?

不会:因为每一次请求,都是一个新的action。

缺点:需要单独定义javaBean,将action中属性copy到javaBean中。

优点:简单。

这种方式 ,底层是通过反射来实现的。

(2)方式二:在action中声明一个model。

private User user;提供get/set方法

在页面上使用ognl来描述

优点:简单,解决了第一种封装的问题

缺点:在页面上使用了ognl表达式,页面不通用了。

问题:这种方式,数据是怎样封装的?

是通过struts2中的interceptor进行了数据封装.

2.方式三:模型驱动(在开发中应用比较多)

步骤:

1.让action类实现ModelDriven

2.重写getModel方法

3.在action中实例化一个model对象,让getModel方法返回这个对象。

public class Login3Action extends ActionSupport implements ModelDriven<User> {

private User user = new User();

public User getModel() {
return user;
}
}

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


以下为三个案例的struts.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!-- 开启开发模式 -->
<constant name="struts.devMode" value="true" />
<package name="p1" extends="struts-default">
<!-- 配置一个动作 -->
<action name="sayHello" class="com.itheima.action.HelloAction" method="sayHello">
<!-- 配置结果视图  -->
<result name="success">/success.jsp</result>
</action>
</package>

<package name="default" namespace="/" extends="struts-default">
<action name="login" class="cn.itcast.action.LoginAction">
<result name="failer">/login.jsp</result>
<result type="redirect">/success.jsp</result>
</action>

<action name="login1" class="cn.itcast.action.Login1Action">
<result name="failer">/login1.jsp</result>
<result type="redirect">/success.jsp</result>
</action>

<action name="login2" class="cn.itcast.action.Login2Action">
<result name="failer">/login2.jsp</result>
<result type="redirect">/success.jsp</result>
</action>
<action name="login3" class="cn.itcast.action.Login3Action">
<result name="failer">/login3.jsp</result>
<result type="redirect">/success.jsp</result>
</action>
</package>
</struts>


方式一案例:

Login1Action.java文件:

package cn.itcast.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

//获取请求参数  属性驱动  第一种,直接将action做为model
public class Login1Action extends ActionSupport {

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";
}
}
}


login1.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
</head>

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


运行:http://localhost:8080/Struts2_Project/login1.jsp

结果:


输入tom和123得到tom用户名

方式二案例:

Login2Action.java文件:

package cn.itcast.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import cn.itcast.domain.User;

import com.opensymphony.xwork2.ActionSupport;

//获取请求参数  属性驱动  第二种,直接在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";
}
}
}


User.java文件:

package cn.itcast.domain;

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 + "]";
}
}


login2.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
</head>

<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>
</html>


运行:http://localhost:8080/Struts2_Project/login2.jsp

结果:


输入tom和123得到tom用户名

方式三案例:

Login3Action.java文件:

package cn.itcast.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import cn.itcast.domain.User;

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

//获取请求参数  模型驱动
public class Login3Action extends ActionSupport implements ModelDriven<User> {

private User user = new User();

public User getModel() {
return 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";
}
}

}


login3.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
</head>

<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>
</html>


运行:http://localhost:8080/Struts2_Project/login3.jsp

结果:


输入tom和123得到tom用户名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts