一.用户注册功能

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

Struts2(五.用户注册的实现及整合Action的配置方法)的更多相关文章

  1. asp.net mvc整合Nhibernate的配置方法

    http://blog.csdn.net/xz2001/article/details/8452794 http://www.cnblogs.com/GoodHelper/archive/2011/0 ...

  2. struts2的占位符*在action中的配置方法

    转自:https://blog.csdn.net/u012546338/article/details/68946633 在配置<action> 时,可以在 name,class,meth ...

  3. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  4. struts开发&lt;struts中的action详细配置. 二&gt;

    在eclipse中新建项目StrutsDemo1[struts的配置见]struts开发<在eclipse中配置struts. 一> 详细文件夹结构例如以下 第一种配置方法 新建UserA ...

  5. java struts2入门学习实例--用户注册和用户登录整合

    需求: 1.用户注册(user_register.jsp)-->注册成功(UserRegister.action)-->显示注册信息(register_success.jsp)2.用户登录 ...

  6. Spring整合Struts2框架的第二种方式(Action由Spring框架来创建)(推荐大家来使用的)

    1. spring整合struts的基本操作见我的博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2框架整 ...

  7. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  8. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.2

    作者: hzboy192@192.com Blog: http://my.csdn.net/peng_hao1988 版本总览:http://blog.csdn.net/peng_hao1988/ar ...

  9. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts251 ...

随机推荐

  1. Android学习笔记_42_各种图形的炫酷效果的实现和使用

    一.文档位置: 这里在android中的图形,在帮助文档的这个页面,  android-sdk-windows\docs\guide\topics\resources\drawable-resourc ...

  2. HDU 1099 Lottery (求数学期望)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1099 Lottery Time Limit: 2000/1000 MS (Java/Others)   ...

  3. 匿名union

    #include <stdio.h> enum node_type{    t_int,t_double}; struct node{    enum node_type type;   ...

  4. js点赞效果图

    点赞时点赞图标会发生变化. html部分: <img src="img/icon_thumb_up.png" id="imgs1" style=" ...

  5. c#常用数据库封装再次升级

    c#封装的几类数据库操作: 1.sqilte 2.berkeleydb 3.一般数据库 4.redis 包含其他项目: 1.序列化 2.通信 3.自定义数据库连接池 再次升级内容: 1.新增redis ...

  6. (第01节)IDEA快速搭建web项目

    在配置好环境,熟悉了IDEA的基本操作后,就要开始搭建WEB项目了: File——>new——>project——>然后选择Maven 点击Create from archetype ...

  7. mysql 导出数据字典

    使用Navicat工具 查询: SELECT TABLE_SCHEMA AS '数据库', TABLE_NAME AS '表名', COLUMN_NAME AS '字段名', COLUMN_TYPE ...

  8. 微信小程序 - 生命周期 - 参数传递

    ​ 现在WEB开发门槛越来越高,不想java 会了就可以有工作,前端不行 ,不仅JavaScript要求不低,基础的HTML+CSS还要扎实,jquery也是必须要会,现在的前端框架 Vue Ng R ...

  9. svg在html的使用

    <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <defs&g ...

  10. Spring笔记1

    Spring Spring特点 1. 方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户 ...