ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册

小编 2026-07-14 阅读:1495 评论:0
  在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详...

  在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题贴过来.在使用struts2+ajax时候,通常我们会返回json类型的数据,但是像上面的例子,我们只希望返回一个1和0有助于进行后续判断即可,没必要返回json类型,返回一个text字符串就可以了.

  regist.jsp(这里只提供<script>部分):

<script type="text/javascript">    $(function() {        $("#userNiName").blur(function() {            var val = $(this).val();            val = $.trim(val);            var $this = $(this);            if (val != "") {                //把当前节点后面的所有 font 兄弟节点删除                $this.nextAll("font").remove();                var url = "user_checkName";                var args = {                    "userNiName" : val,                    "time" : new Date()                };                $.post(url, args, function(data) {                    //表示可用                    if (data == "1") {                        $this.after("<font color='green'>用户名可用!</font>");                    }                    //不可用                    else if (data == "0") {                        $this.after("<font color='red'>用户名已被注册!</font>");                    }                    //服务器错误                    else {                        alert("服务器错误!");                    }                });            } else {                $(this).val("");                $this.focus();            }        });    })</script>

  这里我是用了Jquery.post(url,args,function(data){..})函数提交ajax请求到指定url,并且携带参数args,最后用一个回调函数处理请求返回结果data.

  UserAction:

public class UserAction extends ActionSupport implements ModelDriven<User>{    private User user=new User();    private UserService userService;        private InputStream inputStream;    public InputStream getInputStream() {        return inputStream;    }    //检验用户昵称是否存在    public String checkName() throws UnsupportedEncodingException{        System.out.println("进入ajax检验");        String userNiName=user.getUserNiName();        if(userService.findUserByName(userNiName)==null){            inputStream=new ByteArrayInputStream("1".getBytes("UTF-8"));        }else{            inputStream=new ByteArrayInputStream("0".getBytes("UTF-8"));        }                return "ajax_succ";    }        @Override    public User getModel() {        return user;    }    public void setUserService(UserService userService) {        this.userService = userService;    }        }

注意:这里我用的是ModelDriven的方式获取表单数据,而在使用ajax的时候,直接传了一个userNiName(昵称)过来,于是我在UserAction中加了一个私有字符串变量userNiName,并设置了set方法.结果死活传不过值来,传过来的是一个null,于是我将私有变量删掉,然后直接用user.getUserNiName()直接获取就得到了.切记.

UserService(省略).

User类(省略).

UserDao:

package com.wang.shop.user.dao;import java.util.List;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import com.wang.shop.user.entity.User;public class UserDao extends HibernateDaoSupport{    /**     * 通过用户昵称查询User     * @param userNiName     * @return     */    public User findUserByName(String userNiName){        List<User> list = (List<User>) this.getHibernateTemplate().find("select u from User u where u.userNiName=?", userNiName);        if(list!=null&&list.size()>0){            System.out.println("list:"+list.get(0));            return list.get(0);        }        return null;    }}

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="shop" namespace="/" extends="struts-default">        <!-- UserAction -->        <action name="user_*" class="userAction" method="{1}">            <result name="regist_succ">/WEB-INF/jspForUser/login.jsp</result>            <result type="stream" name="ajax_succ">                <param name="contentType">text/html</param>                <param name="inputStream">inputStream</param>            </result>        </action>    </package>   </struts>

  注意在result标签中,type="stream".

  最后顺带说一句,我在调试的时候习惯使用输出语句,但每次加一句输出语句都需要重启Tomcat,好烦.于是参考网上的方式,将Tmocat安装目录下,conf->server.xml中在<host>标签下添加了以下代码,就可以修改类(细微的修改)的时候,不需要重启服务器了:

<!--docBase就是你的项目工程所在的全路径,path就是写你的项目名,reloadable="true",可以自动重新加载修改过的class文件--><Context  debug="0" docBase="D:Tomcat 7.0webappsSSH_shop01" path="/SSH_shop01" reloadable="true" />

需要特别注意的是,当在Tomcat中卸载了该项目后,一定要回来将这个标签删除.

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表