S2.3_Struts2_ActionGetInputFormData Action动作类接收用户输入表单数据的3种实现方式
来源:互联网 发布:最终幻想14神优化 编辑:程序博客网 时间:2024/06/07 23:54
由项目S2.2_Struts2_ActionImplementation (如何下载它:点击打开链接)复制粘贴生成一个新项目 ------ S2.3_Struts2_ActionGetInputFormData
详细操作截图参考S1.2_Struts2_ByManual 手工编写第一个Struts2范例篇,位置在项目目录结构图下面。
Action动作类接收用户输入表单数据的3种实现方式
1. 使用Action动作类带get和set字段方法的属性接收用户输入的表单数据
2. 使用Action动作类带get和set对象方法的属性接收用户输入的表单数据(推荐)
3. 使用ModelDriven模式接收用户输入的表单数据 ------ Action类需要实现ModelDriven<T>接口提供的getModel()方法,本例需要实现的接口是ModelDriven<User>
1. 使用Action动作类带get和set方法的属性接收用户输入的表单数据
第1步:在文件WebRoot/login_success.jsp中添加如下一行代码:
<%@ taglib uri="/struts-tags" prefix="s" %>
为何设置uri="/struts-tags" 和 prefix="s"
答:浏览struts2-core-2.2.1.jar/META-INF/struts-tags.tld此文件如下两行内容:
<short-name>s</short-name>
<uri>/struts-tags</uri>
它们之间是一一对应关系。
使用Struts2的值栈技术显示用户输入的内容,login_success.jsp页面代码如下,注意红色字体标识的代码行:
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录成功</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<h1>登录成功</h1>
<hr>
欢迎用户:<s:property value="username"/><br>
密码是:<s:property value="password"/><br>
</center>
</body>
</html>
第2步:浏览一下LoginAction.java类代码,它就是使用了Action动作类带get和set方法的属性接收用户输入的表单数据的实现方式:
package net.nw.action;
import net.nw.dao.UserDao;
import net.nw.vo.User;
public class LoginAction {
private String username;//必须与html标签中的名称一样,此处私有变量的值直接来自html标签对应名称填充过来的值
private String password;//必须与html标签中的名称一样,此处私有变量的值直接来自html标签对应名称填充过来的值
public LoginAction(){
System.out.println("构造方法LoginAction ......");
}
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;
}
//调用业务层操作类的方法
public String execute(){
User u = new User();
u.setUsername(this.getUsername());
u.setPassword(this.getPassword());
UserDao dao = new UserDao();
if(dao.userLogin(u)){
return "login_success";
} else{
return "login_failure";
}
}
}
第3步:浏览一下src/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>
<package name="default" namespace="/" extends="struts-default">
<!-- action的name值必须等于LoginAction.java类命名规范(XxxxAction)中Xxxx,即是Login(首字母要小写) -->
<action name="login" class="net.nw.action.LoginAction">
<!-- result的name值必须等于LoginAction.java类里面被重写的execute方法的返回值 -->
<result name="login_success">/login_success.jsp</result>
<result name="login_failure">/login_failure.jsp</result>
</action>
</package>
</struts>
第4步:发布项目运行程序
此步操作的详细过程参考S1.1_Struts2_Model2 手动创建一个简单的servlet项目,未使用Struts技术 点击打开链接 位置在最下面------发布项目运行程序
若成功发布运行本项目代码,启动后您会看到欢迎页地址:http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
用户名称:admin
用户密码:123456
点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
登录成功显示页如下图所示:
输入错误密码或者不输入密码点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
控制台输出以下信息:
... ...
INFO: Parsing configuration file [struts.xml]
Dec 10, 2016 2:38:28 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /root/Workspaces/MyEclipse2015/.metadata/.me_tcat7/webapps/S2.3_Struts2_ActionGetInputFormData has finished in 2,983 ms
Dec 10, 2016 2:38:28 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Dec 10, 2016 2:38:28 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 10, 2016 2:38:28 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3851 ms
构造方法LoginAction ......
Dec 10, 2016 2:38:31 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
注意:跳转到了目标页面,无论登录成功还是失败,浏览器地址栏都是
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
浏览器地址栏并没有出现我们想象地JSP页面地址:
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_success.jsp
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_failure.jsp
2. 使用Action动作类带get和set对象方法的属性接收用户输入的表单数据(推荐)
第1步:修改LoginAction2.java类代码,让Action动作类的对象属性接收表单填充的对象数据,注意html表单字段标签的命名格式:对象 . 字段
package net.nw.action;
import com.opensymphony.xwork2.Action;
import net.nw.dao.UserDao;
import net.nw.vo.User;
public class LoginAction2 implements Action {
private User user;//必须与html标签中对象的名称一样,此处私有对象的值直接来自html标签对应对象名称填充过来的值
public LoginAction2() {
System.out.println("构造方法LoginAction2 ......");
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// 调用业务层操作类的方法
public String execute() {
UserDao dao = new UserDao();
if (dao.userLogin(user)) {
return "login_success";
} else {
return "login_failure";
}
}
}
第2步:修改WebRoot/login.jsp表单字段name属性值的格式: 对象.字段,注意红色字体标识字段name属性值的格式,WebRoot/login.jsp页面代码如下:
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>系统登录</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<h1>系统登录</h1>
<hr>
<form name="loginForm" action="<%=path%>/login.action" method="post" >
用户名称:<input type="text" name="user.username"/><br>
用户密码:<input type="password" name="user.password"/><br>
<input type="submit" value="登录"/><br>
</form>
</center>
</body>
</html>
第3步:修改WebRoot/login_success.jsp页面值栈显示用户输入的内容,不能用字段名称显示,也要使用 对象.字段 的格式来读取用户输入的内容
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录成功</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<h1>登录成功</h1>
<hr>
欢迎用户:<s:property value="user.username"/><br>
密码是:<s:property value="user.password"/><br>
<s:debug></s:debug><br>
</center>
</body>
</html>
第4步:为了让LoginAction2.java 动作类被调用,我们需要同步调整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>
<package name="default" namespace="/" extends="struts-default">
<!-- action的name值必须等于LoginAction.java类命名规范(XxxxAction)中Xxxx,即是Login(首字母要小写) -->
<action name="login" class="net.nw.action.LoginAction2">
<!-- result的name值必须等于LoginAction.java类里面被重写的execute方法的返回值 -->
<result name="login_success">/login_success.jsp</result>
<result name="login_failure">/login_failure.jsp</result>
</action>
</package>
</struts>
第5步:发布项目运行程序
此步操作的详细过程参考S1.1_Struts2_Model2 手动创建一个简单的servlet项目,未使用Struts技术 点击打开链接 位置在最下面------发布项目运行程序
若成功发布运行本项目代码,启动后您会看到欢迎页地址:http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
用户名称:admin
用户密码:123456
点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
登录成功显示页如下图所示:
输入错误密码或者不输入密码点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
控制台输出以下信息:
... ...
INFO: Parsing configuration file [struts.xml]
Dec 10, 2016 3:33:31 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /root/Workspaces/MyEclipse2015/.metadata/.me_tcat7/webapps/S2.3_Struts2_ActionGetInputFormData has finished in 1,870 ms
Dec 10, 2016 3:33:31 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Dec 10, 2016 3:33:31 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 10, 2016 3:33:31 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2655 ms
构造方法LoginAction2 ......
Dec 10, 2016 3:33:37 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
注意:跳转到了目标页面,无论登录成功还是失败,浏览器地址栏都是
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
浏览器地址栏并没有出现我们想象地JSP页面地址:
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_success.jsp
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_failure.jsp
3. 使用ModelDriven模式接收用户输入的表单数据 ------ Action类需要实现ModelDriven<T>接口提供的getModel()方法,本例需要实现的接口是ModelDriven<User>
第1步:编辑LoginAction3.java动作类,实现ModelDriven<T>接口提供的getModel()方法,代码如下:
package net.nw.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import net.nw.dao.UserDao;
import net.nw.vo.User;
public class LoginAction3 extends ActionSupport implements ModelDriven<User>{
/**
* 对象序列化需要此serialVersionUID
*/
private static final long serialVersionUID = 1L;
private User user = new User();//注意:此处user一定要实例化
public LoginAction3() {
System.out.println("构造方法LoginAction3 ......");
}
//调用业务层操作类的方法
public String execute(){
UserDao dao = new UserDao();
if(dao.userLogin(user)){
return "login_success";
} else{
return "login_failure";
}
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
第2步:编辑WebRoot/login.jsp输入表单标签name属性的值,我们不再需要领域对象格式(第2种接收方式)的属性值格式,直接使用字段名称作为html标签的名称值:
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>系统登录</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<h1>系统登录</h1>
<hr>
<form name="loginForm" action="<%=path%>/login.action" method="post" >
用户名称:<input type="text" name="username"/><br>
用户密码:<input type="password" name="password"/><br>
<input type="submit" value="登录"/><br>
</form>
</center>
</body>
</html>
第3步:编辑WebRoot/login_success.jsp值栈读取用户输入的内容,直接使用字段名称读取即可,其代码如下:
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登录成功</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<h1>登录成功</h1>
<hr>
欢迎用户:<s:property value="username"/><br>
密码是:<s:property value="password"/><br>
<s:debug></s:debug><br>
</center>
</body>
</html>
第4步:为了让LoginAction3.java 动作类被调用,我们需要同步调整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>
<package name="default" namespace="/" extends="struts-default">
<!-- action的name值必须等于LoginAction.java类命名规范(XxxxAction)中Xxxx,即是Login(首字母要小写) -->
<action name="login" class="net.nw.action.LoginAction3">
<!-- result的name值必须等于LoginAction.java类里面被重写的execute方法的返回值 -->
<result name="login_success">/login_success.jsp</result>
<result name="login_failure">/login_failure.jsp</result>
</action>
</package>
</struts>
第5步:发布项目运行程序
此步操作的详细过程参考S1.1_Struts2_Model2 手动创建一个简单的servlet项目,未使用Struts技术 点击打开链接 位置在最下面------发布项目运行程序
若成功发布运行本项目代码,启动后您会看到欢迎页地址:http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
用户名称:admin
用户密码:123456
点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
登录成功显示页如下图所示:
输入错误密码或者不输入密码点击登录按钮跳转到 http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
控制台输出以下信息:
... ...
INFO: Parsing configuration file [struts.xml]
Dec 10, 2016 4:26:33 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /root/Workspaces/MyEclipse2015/.metadata/.me_tcat7/webapps/S2.3_Struts2_ActionGetInputFormData has finished in 2,198 ms
Dec 10, 2016 4:26:33 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Dec 10, 2016 4:26:33 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 10, 2016 4:26:33 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3048 ms
构造方法LoginAction3 ......
注意:跳转到了目标页面,无论登录成功还是失败,浏览器地址栏都是
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login.action
浏览器地址栏并没有出现我们想象地JSP页面地址:
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_success.jsp
http://localhost:8080/S2.3_Struts2_ActionGetInputFormData/login_failure.jsp
- S2.3_Struts2_ActionGetInputFormData Action动作类接收用户输入表单数据的3种实现方式
- S2.2_Struts2_ActionImplementation 创建Action动作类的3种实现方式
- struts2接收表单数据的3中方式
- Action 中接收表单参数的3种方法总结
- ASP.NET MVC Action以强类型的方式接收表单数据
- struts2中Action接收前台数据的三种方式
- Struts2中接收表单数据的三种驱动方式
- SpringMVC 接收表单数据的方式
- SpringMVC 接收表单数据的方式
- Action 中获取表单数据的三种方式
- Action 中获取表单数据的三种方式
- action里获取表单数据的三种方式
- Action如何接收jsp页面form表单提交的数据?
- Action如何接收jsp页面form表单提交的数据?
- struts2中的Action接收表单传递过来参数的3种方法
- struts2中的Action接收表单传递过来的参数有3种方法
- struts2中的Action接收表单传递过来的参数有3种方法
- struts2中的Action接收表单传递过来的参数有3种方法
- Maven手动添加JAR 包到本地仓库
- android.mk 文件 这个先存下来 在看
- 宏函数
- 异步脚本
- 蓝桥杯嵌入式输入捕获
- S2.3_Struts2_ActionGetInputFormData Action动作类接收用户输入表单数据的3种实现方式
- JavaIO流基础学习
- php对多维数组的某个键值排序方法
- Java 环境搭建 —— Git 从无到有
- mac自带计算器 进制转换
- Eclipse一点击右键就卡死
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 动态规划
- KL距离
- 制作三级菜单