一.用户注册功能
register.jsp页面
若是jquery ajax方式提交给action,还要回到jquery,控制权在jquery
若是表单方式提交给action,控制权交给action
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注册</title> <script type="text/javascript" src="jslib/jquery-1.11.1.js"></script> <script type="text/javascript"> $(function(){ $("[name='user.userName']").blur(function(){ if($.trim($(this).val())=="") { $("[name='user.userName']").select(); $("[name='user.userName']").focus(); $("#msg").html("请输入用户名!"); return false; } $.post("${pageContext.request.contextPath}/user/checkExists",{"user.userName":$(this).val()},function(data){ $("[name='isExists']").val(data) if(data=="1") { $("#msg").html("用户名已存在,请重新输入!"); } }); }); $("[type='submit']").click(function(){ if($.trim($("[name='user.userName']").val())=="") { $("[name='user.userName']").select(); $("[name='user.userName']").focus(); $("#msg").html("请输入用户名!"); return false; } if($("[name='isExists']").val()=="1") { $("[name='user.userName']").select(); $("[name='user.userName']").focus(); $("#msg").html("用户名已存在,请重新输入!"); return false; } if($.trim($("[name='user.pwd']").val())=="") { $("[name='user.pwd']").select(); $("[name='user.pwd']").focus(); $("#msg").html("请输入密码!"); return false; } return true; }); }); </script> </head> <body> 用户注册 <br> <br> <!-- 表单提交后控制权就在Action中了 --> <form method="post" action="${pageContext.request.contextPath}/user/add"> <table> <tr><td>用户名:</td><td><input type="text" name="user.userName"></td></tr> <tr><td>密码:</td><td><input type="password" name="user.pwd"></td></tr> <tr><td colspan="2"><input type="submit" value="提交"></td></tr> </table> </form> <!-- 隐藏变量,用来判断用户名是否重复,不写在表单中,因为action中没有接收的属性--> <input type="hidden" name="isExists" value="0"/> <div id="msg"></div> <br> <br> <a href="${pageContext.request.contextPath}/main.jsp">返回主页面</a> </body> </html>
2.UserAction
/** * 注册用户 * @return * @throws Exception */ public String add() throws Exception { UserDAO dao=new UserDAO(); dao.addUser(user); return "userlist"; }
3.UserDAO
/** * 注册用户 * @param user * @throws SQLException */ public void addUser(User user) throws SQLException { sql="insert into users(userName,pwd) value(?,?)"; ps=conn.prepareStatement(sql); ps.setString(1, user.getUserName()); ps.setString(2, user.getPwd()); ps.execute(); conn.close(); }
4.struts.xml
在struts2.x中,action中return转走需要在struts.xml中配置result
<?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常量 --> <!-- 控制请求action时的后缀,默认为空或者.action --> <constant name="struts.action.extension" value="action,,"/> <!-- 控制开发模式,默认为false,若为true则表示改了action后可以不重启--> <constant name="struts.devMode" value="true"/> <!-- 控制上传文件大小 3个0表示Kb,6个0表示Mb,这里为10Mb--> <constant name="struts.multipart.maxSize" value="10000000"/> <!-- package:管理action name:名称,今后别的人可以继承这个package namespace:路径,调action的时候也要加上才能调用 extends:继承于哪个包 --> <package name="all" namespace="" extends="struts-default"> <!-- 控制action中全局跳转 --> <global-results> <!-- redirectAction容器外跳转,跳action --> <result name="userlist" type="redirectAction"> <param name="namespace">/user</param> <param name="actionName">list</param> </result> </global-results> </package> <include file="user.xml"></include> <include file="picture.xml"></include> </struts>
5.user.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="user" namespace="/user" extends="all"> <!-- 通配符方式配置action,解决action太多的问题 --> <action name="*" class="myuser.UserAction" method="{1}"> <!-- 控制action中局部跳转 --> <result name="main">${pageContext.request.contextPath}/main.jsp</result> <result name="login">${pageContext.request.contextPath}/login.jsp</result> <!-- 加了type="redirect"代表,容器外跳转 容器外跳转跳不到userlist.jsp中去 在这里只能用容器内跳转(同一个request范围之内) --> <result name="list">/WEB-INF/user/userlist.jsp</result> <result name="modify">/WEB-INF/user/modify.jsp</result> </action> </package> </struts>
二.整合Action的配置方法(解决action太多的问题)
建立UserAction类
方法一:method方式
建立一个Action类,在类中编写不同的方法,在不同的方法中处理不同的请求。
在struts.xml中配置method属性,让不同的action指向同一个Action类的不同方法。
ex:
xml:
<action name="adduser" class="myuser.UserAction" method="add">
方法二:感叹号方式
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
不需要配置method,直接用!方法名的方式来调用。
DynamicMethodInvocation =动态方法调用
ex:
xml:
<action name="user" class="myuser.UserAction">
调用:
$.post("user!checkExists",{"user.userName":$(this).val()},function(data){
}
方法三:通配符方式(官网推荐) “约定大于配置”(本项目使用此方法)
<action name="*" class="myuser.UserAction" method="{1}">