使用struts2+Ajax+jquery验证用户名是否已被注册

yizhihongxing

下面我将详细讲解如何使用struts2+Ajax+jquery验证用户名是否已被注册的完整攻略:

1. 准备工作

首先需要准备以下工具和环境:

  • struts2-web框架:用于接收和处理请求,在返回结果时可以返回json字符串。
  • jquery:用于发送Ajax请求。
  • 验证用户名是否已被注册的代码功能。

2. 编写struts.xml配置文件

首先需要在struts2的配置文件struts.xml中添加以下配置:

<package name="json" extends="json-default">
    <result-types>
        <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    <interceptors>
        <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
        <interceptor-stack name="jsonInterceptionStack">
            <interceptor-ref name="json"/>
        </interceptor-stack>
    </interceptors>
</package>

这样就可以在Struts2中支持返回json格式的数据。

3. 编写前端页面

在前端页面中需要添加一个输入框和一个按钮,输入框用于输入要查询的用户名,按钮用于进行查询,同时需要引入jquery库:

<html>
<head>
    <script src="//cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script>
        function checkUser() {
            var username = $("#username").val();
            $.ajax({
                type: "POST",
                url: "checkUserAction.action",
                data: {username: username},
                success: function(data) {
                    if (data.result == "true") {
                        $("#msg").html(username + ":用户名已存在");
                    } else {
                        $("#msg").html(username + ":用户名不存在");
                    }
                }
            });
        }
    </script>
</head>
<body>
    <label>用户名:</label><input type="text" id="username" name="username"/>&nbsp;&nbsp;
    <input type="button" name="button" value="检查" onclick="checkUser();"/>
    <p id="msg"></p>
</body>
</html>

在点击检查按钮时,会通过jquery发送Ajax请求到checkUserAction.action,并传递用户名参数username,在回调处理中可根据返回值判断用户名是否已被注册,从而更新页面中的提示消息。

4. 编写Action类

在Struts2中需要编写一个Action类,用于接受来自前端页面的请求:

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class CheckUserAction extends ActionSupport {
    private String username;

    @Override
    public String execute() throws Exception {
        boolean exist = checkUser(username);
        return SUCCESS;
    }

    public boolean checkUser(String username) {
        // 略去验证用户名是否已被注册的代码
        return true;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

在执行execute()方法时,会调用checkUser()方法将收到的用户名进行验证,如果用户名已被注册,则返回true,否则返回false

5. 编写返回json数据的拦截器

这里需要编写一个拦截器,用于将execute()方法的返回值转换为json字符串,代码如下:

package com.example;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class JsonInterceptor extends MethodFilterInterceptor implements Result {
    @Override
    public void execute(ActionInvocation actionInvocation) throws Exception {
        actionInvocation.setResult(this);
    }

    @Override
    public void execute(ActionInvocation actionInvocation, HttpServletResponse httpServletResponse) throws Exception {
        Object returnValue = actionInvocation.getResultCode();
        if (null != returnValue && returnValue instanceof Boolean) {
            PrintWriter writer = ServletActionContext.getResponse().getWriter();
            writer.write("{\"result\": \"" + returnValue.toString() + "\"}");
            writer.close();
        }
    }
}

6. 在struts.xml中配置Action和Interceptor

struts.xml中配置Action和JsonInterceptor:

<package name="user" namespace="/user" extends="json">
    <action name="checkUserAction" class="com.example.CheckUserAction">
        <interceptor-ref name="json"/>
        <interceptor-ref name="defaultStack"/>
        <result name="success" type="json"/>
    </action>
</package>

这里配置了Action的名称为checkUserAction,使用了名为json的Interceptor,同时使用默认的拦截器栈,并在返回成功时使用Json格式的数据进行返回。

至此,整个流程已经完成。当在前端页面上输入用户名并点击检查按钮时,会通过jquery发送Ajax请求到服务器端的Action,Action会调用验证用户名的逻辑代码进行判断,然后通过Json格式的数据将结果返回到前端页面,并进行处理展示。

示例

下面给出两个示例的源码:

示例1:在jsp中直接嵌入jquery

页面代码:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>基于Struts2+JQuery实现的异步验证示例</title>
    <script type="text/javascript" src="jquery-1.9.1.js"></script>
    <script type="text/javascript">
        function checkUserName() {
            var username = $("#username").val();
            if (username.trim() == '') {
                alert("用户名不能为空!");
                $("#username").focus();
                return;
            }
            $.ajax({
                type: "POST",
                url: "checkUserName.action",
                data: "username=" + encodeURI(username),
                success: function(result) {
                    if (result == "true") {
                        $("#result").html(username + " 已经被注册。");
                    } else if (result == "false") {
                        $("#result").html(username + " 可以注册。");
                    }
                }
            });
        }
    </script>
</head>
<body>
    <form>
        用户名:<input type="text" name="username" id="username"><br>
        <br>
        <input type="button" value="检查用户名" onclick="checkUserName();">
        <p id="result"></p>
    </form>
</body>
</html>

Action代码:

package demo.action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;


public class CheckUserNameAction extends ActionSupport {

    private String username;

    @Override
    public String execute() throws Exception {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        if ("admin".equals(username)) {
            out.println("true");
        } else {
            out.println("false");
        }
        out.close();
        return null;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

示例2:在jsp中不嵌入jquery

页面代码中只引入jquery-x.x.x.min.js,但在jsp中不嵌入任何jquery代码,而是在外部的js文件中编写代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>基于Struts2+JQuery实现的异步验证示例</title>
    <script type="text/javascript" src="jquery-1.9.1.js"></script>
    <script type="text/javascript" src="checkUserName.js"></script>
</head>
<body>
    <form>
        用户名:<input type="text" name="username" id="username"><br>
        <br>
        <input type="button" value="检查用户名" onclick="checkUserName();">
        <p id="result"></p>
    </form>
</body>
</html>

checkUserName.js代码:

/**
 * 异步检查用户名是否已存在
 */
function checkUserName() {
    var username = $("#username").val();
    if (username.trim() == '') {
        alert("用户名不能为空!");
        $("#username").focus();
        return;
    }
    $.ajax({
        type: "POST",
        url: "checkUserName.action",
        data: "username=" + encodeURI(username),
        success: function(result) {
            if (result == "true") {
                $("#result").html(username + " 已经被注册。");
            } else if (result == "false") {
                $("#result").html(username + " 可以注册。");
            }
        }
    });
}

Action代码与示例1中的代码相同。

注意:如果您要尝试示例2,还需要在web.xml文件中启用Struts2的拦截器:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这样Struts2能够正确处理请求和响应,并将更改写回到服务器端。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用struts2+Ajax+jquery验证用户名是否已被注册 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 什么是线程调度?

    以下是关于线程调度的完整使用攻略: 什么是线程调度? 线程调度是指操作系统或者虚拟机在多线程环境下,按照一定的策略配 CPU 时间片给各个线程执行的过程。在多线程编程中,线程调度是非常重要的,它直接影到程序的性能和响应速度。 线程调度的主要任务是: 分配 CPU 时间片给各个线程执行; 确定的优先级; 确定线程的状态,如就绪、运行、阻塞等。 线程调度的实现方…

    Java 2023年5月12日
    00
  • java JDBC主要组件连接数据库及执行SQL过程示例全面详解

    Java JDBC主要组件连接数据库及执行SQL过程示例全面详解 简介 Java JDBC(Java Database Connectivity)是Java语言访问数据库的基本方式,它提供了一套API,用于连接和处理关系型数据库。在Java开发中,使用JDBC连接数据库是一项必须掌握的技术。 JDBC主要组件 JDBC的主要组件包括: 驱动管理器(Drive…

    Java 2023年6月16日
    00
  • Java实现的mysql事务处理操作示例

    当我们想要在Java应用程序中使用MySQL数据库时,需要处理事务操作。这里,我将向您展示如何使用Java和JDBC来处理MySQL事务。下面是一个完整攻略: 1. 添加MySQL JDBC驱动 在使用MySQL数据库之前,我们需要在Java项目中添加相应的MySQL JDBC驱动。您可以从官方网站下载最新的JDBC驱动程序,也可以使用第三方依赖管理工具,如…

    Java 2023年5月19日
    00
  • 解决Eclipse中java文件的图标变成空心J的问题

    当在Eclipse中新建.java文件时,如果其图标变成了一个空心的J字形状,这通常是由于Eclipse中缺少对JDT插件的支持所致。这可能会导致某些功能无法正常工作,例如无法生成Java文档和错误的代码提示。 以下是解决Eclipse中java文件的图标变成空心J的问题的完整攻略: 安装JDT插件 要解决此问题,需要在Eclipse中安装Java Deve…

    Java 2023年5月26日
    00
  • ae常用表达式语句的使用和解析

    介绍 AE(After Effects)常用表达式语句是AE软件中非常重要的一部分,它可以帮助用户自动化处理图层、特效等多种操作。本攻略将介绍AE常用表达式语句的使用和解析,帮助用户更好地掌握AE表达式技术。 表达式语句的基本使用 在AE中,表达式语句可以应用于各种图层属性,例如位置、旋转、缩放、不透明度等等。下面是一个简单的例子,应用表达式语句实现一个循环…

    Java 2023年5月26日
    00
  • Java函数式编程(五):闭包

    让我们来详细讲解“Java函数式编程(五):闭包”。 什么是闭包 闭包是指一个函数能够记住并访问其词法作用域中的变量,即使在函数被定义之后,该词法作用域中的变量已经不存在了。通俗的说,就是在内部函数中引用了外部函数的变量,这个内部函数就是闭包。 闭包的应用 闭包的应用有很多,比如可以用来模拟类(JavaScript),可以用来实现许多设计模式(比如命令模式、…

    Java 2023年5月26日
    00
  • LibrarySystem图书管理系统(二)

    LibrarySystem图书管理系统(二)攻略 一、概述 本文主要针对“LibrarySystem图书管理系统(二)”的学习内容,进行详细的攻略说明,包括系统的整体架构、功能模块及其实现方式等。 二、整体架构 LibrarySystem图书管理系统(二)是一个基于Java Web技术实现的图书管理系统,主要包含以下几个模块: 图书管理模块 图书借阅模块 图…

    Java 2023年5月24日
    00
  • Java如何执行cmd命令

    Java可以通过Runtime类或ProcessBuilder类来执行cmd命令。 使用Runtime类执行cmd命令 Runtime类提供了用于与运行时环境进行交互的方法。通过它的exec方法可以执行给定的字符串命令,并返回表示进程的Process对象。 以下为示例代码: import java.io.*; public class CmdDemo { p…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部