• 模拟jQuery ajax服务器端与客户端通信


    本案例通过jQuery和Servlet技术来判断用户名是否存在,让读者明白jQuery是怎么调用服务器后台的。还给出了解决中文乱码的方案和如何避免各种浏览器的缓存。

          

    功能如下:

    如果用户名为空提示“用户名不能为空 ”   

    如果用户名存在提示“用户名[xxxxxx]已经存在,请使用其他用户名, 4 ”          

    如果用户名不存在提示“用户名[xxxxxx]尚未存在,可以使用该用户名注册, 5”

    运行效果如下: 

                 
    目录结构:
     
    服务器端AjaxServer
    package com.ljq.test;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLDecoder;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @SuppressWarnings(
    "serial")
    public class AjaxServer extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    try {
    //设置页面utf-8编码
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out
    = response.getWriter();

    Integer total
    = (Integer) request.getSession().getAttribute("total");
    int temp = 0;
    if (total == null) {
    temp
    = 1;
    }
    else {
    temp
    = total.intValue() + 1;
    }
    request.getSession().setAttribute(
    "total", temp);

    // 1.取参数
    String param = request.getParameter("name");
    String name
    = URLDecoder.decode(param, "UTF-8");
    // 2、检查参数是否有效
    if (param == null || param.length() == 0) {
    out.println(
    "用户名不能为空");
    }
    else {
    // 3、校验操作
    if (name.equals("linjiqin")) {
    // 4、返回结果数据
    out.println("用户名[" + name + "]已经存在,请使用其他用户名, " + temp);
    }
    else {
    out.println(
    "用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp);
    }
    }
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }

    @Override
    protected void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }
    }
                 
    配置web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
    <servlet-name>AjaxServer</servlet-name>
    <servlet-class>com.ljq.test.AjaxServer</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>AjaxServer</servlet-name>
    <url-pattern>/servlet/ajaxServer</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>
                  
    index.jsp页面
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path
    = request.getContextPath();
    String basePath
    = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.3.1.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/js/validate.js"></script>
    </head>

    <body>
    <!--html5的标准: 首先标签名要小写,其次标签必须关闭,第三属性名遵循骆驼命名法,第四属性值必须位于双引号中-->
    请输入用户名:
    <br/>
    <input id="userName"/>
    <input type="button" value=" 校 验 " onclick="verify();"/>
    <div id="result"></div>
    </body>
    </html>
                          
    validate.js
    function verify() {
    // 解决中文乱码方法一: 页面端发出的数据作一次encodeURI,服务器段使用new String(name.getBytes("iso8859-1"),"UTF-8");
    // 解决中文乱码方法二: 页面端发出的数据作两次encodeURI,服务器段使用URLDecoder.decode(name,"UTF-8")
    var url = "servlet/ajaxServer?name=" + encodeURI(encodeURI($("#userName").val()));
    //注意url前不要加"/",否则无法访问url
    //var url = "/servlet/ajaxServer?name=" + encodeURI(encodeURI($("#userName").val())); //错误
    url = convertURL(url);
    $.get(url,
    null, function(data) {
    $(
    "#result").html(data);
    });
    }

    // 给url地址增加时间戳,骗过浏览器,不读取缓存
    function convertURL(url) {
    // 获取时间戳
    var timstamp = (new Date()).valueOf();
    // 将时间戳信息拼接到url上
    if (url.indexOf("?") >= 0) {
    url
    = url + "&t=" + timstamp;
    }
    else {
    url
    = url + "?t=" + timstamp;
    }
    return url;
    }
  • 相关阅读:
    转载--重写、覆盖、重载、多态几个概念的区别分析
    笔试题--奇虎360-2013
    转载---数据挖掘十大经典算法
    Nginx的启动、停止与重启
    程序员的十种级别,看看你属于哪一种?
    C标签的用法
    eclipse修改代码后都需要clean的解决办法
    创建一个jFinal项目
    java redirect用法
    java获取访问者真实的IP地址
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1994463.html
Copyright © 2020-2023  润新知