Struts2(五.用户注册的实现及整合Action的配置方法)

一.用户注册功能

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}">
posted @ 2018-07-17 10:35  塔卡哈西KSK  阅读(361)  评论(0编辑  收藏  举报