package cn.bdqn.bean; /** * *用户的实体类 */ public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(String name, String password) { super(); this.name = name; this.password = password; } public User() { super(); } }
一:前台传递单个属性
01.创建登录界面
<%@ page language="java" import="java.util.*" pageEncoding="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>My JSP 'index.jsp' starting page</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> <form action="user/login" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="name"/></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"/></td> </tr> <tr> <td></td> <td><input type="submit" value="登录"/></td> </tr> </table> </form> </body> </html>
02.在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="/user" extends="struts-default"> <!--用户登录的action --> <action name="login" class="cn.bdqn.action.LoginAction"> <!--如果返回值是success,则可以省略name属性 --> <result name="success">/loginSuccess.jsp</result> </action> </package> </struts>
03.创建对应的Action
package cn.bdqn.action; import cn.bdqn.bean.User; import com.opensymphony.xwork2.ActionSupport; /** * * 用户登录的action */ public class LoginAction extends ActionSupport { /** * 01.定义和表单中name属性值一致的成员变量,并且具有get和set */ private String name; private String password; @Override public String execute() throws Exception { System.out.println("用户名:"+name); System.out.println("密码:"+password); return "success"; //"success" SUCCESS super.execute() } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
04.创建登录成功 页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</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> =============== 通过el表达式获取后台的数据 默认的作用是 request===============<br/> ${requestScope.name} <br/> ${password}<br/> =============== 通过struts2的标签获取===============<br/> <s:property value="name"/><br/> <s:property value="password"/><br/> <s:debug/> </body> </html>
二:前台传递对象
修改login.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="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>My JSP 'index.jsp' starting page</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> <form action="user/login" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="user.name"/></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="user.password"/></td> </tr> <tr> <td></td> <td><input type="submit" value="登录"/></td> </tr> </table> </form> </body> </html>
02.struts.xml文件中的代码不需要改变
03.修改LoginAction中的代码
package cn.bdqn.action; import cn.bdqn.bean.User; import com.opensymphony.xwork2.ActionSupport; /** * * 用户登录的action */ public class LoginAction extends ActionSupport { /** * 02.直接定义前台表单中的对象!并且具有get和set! 这是我们常使用的方式 */ private User user; @Override public String execute() throws Exception { System.out.println("用户名:"+user.getName()); System.out.println("密码:"+user.getPassword()); return "success"; //"success" SUCCESS super.execute() } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
04.修改loginSuccess.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</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> =============== 通过el表达式获取后台的数据 默认的作用是 request===============<br/> ${requestScope.user.name} <br/> ${user.password}<br/> =============== 通过struts2的标签获取===============<br/> <s:property value="user.name"/><br/> <s:property value="user.password"/><br/> <s:debug/> </body> </html>
三:实现ModelDriven接口
其他代码和单个属性传递 一致!
只需要更改LoginAction中的代码即可!
package cn.bdqn.action; import cn.bdqn.bean.User; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; /** * 用户登录的action */ public class LoginAction extends ActionSupport implements ModelDriven { /** * 03.实现ModelDriven 前台的name属性值 必须要和user对象中的属性名一致!不需要user. */ private User user=new User(); @Override public String execute() throws Exception { System.out.println("用户名:"+user.getName()); System.out.println("密码:"+user.getPassword()); return "success"; //"success" SUCCESS super.execute() } @Override public Object getModel() { return user; } }
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> <!-- struts2的默认扩展名 struts.action.extension=action,, 01.以action结尾 02.什么都不写 <constant name="struts.action.extension" value="do,t10"/> ### - struts.i18n.reload = true ### - struts.configuration.xml.reload = true struts.devMode = false //手动重启 01.开发模式: 修改代码多 struts.devMode =true 自动重启 02.生产模式: 项目发布 struts.devMode = false 手动重启 --> <constant name="struts.devMode" value="true"/><!-- 设置开发模式 --> <package name="default" namespace="/user" extends="struts-default"> <!--用户登录的action --> <action name="login" class="cn.bdqn.action.LoginAction"> <!--如果返回值是success,则可以省略name属性 type:的默认值 是转发! 怎么验证转发? 看浏览器中的url是不是action的属性值!是!就是转发! 如果是 loginSuccess.jsp说明是重定向! type="redirect":重定向! --> <result name="success">/loginSuccess.jsp</result> </action> </package> </struts>