Ajax的底层实现--使用Ajax实现无刷新登录实例--解决ajax中URl参数带中文的乱码问题

 

1.jsp代码

第一部分(html代码):前端页面

<div id="login">    用户名: <input type="text" id="userName"/>                <!--用户名-->    密码:   <input type="password"  id="psw"/>               <!--密码-->            <input type="submit" value="登录" onclick="check()"/>   <!--登录-->            <div id="tip"></div>                <!--用于输出提示信息-->

</div>

第二部分(js代码):将前端用户输入的“用户名”和“密码”两项数据,通过指定的servlet路径,传送给servlet,并根据servlet反馈回的结果,改变页面局部内容;

<script>

    //检测用户名和密码是否为空    function check(){        var userName = document.getElementById("userName").value;        var password = document.getElementById("psw").value;        var tip = document.getElementById("tip");

        if(userName==""){            tip.innerHTML="用户名不能为空!";        }else if(password==""){            tip.innerHTML="密码不能为空!";        }else{            doAjax();        }    }

    var xmlHttp;    function doAjax(){        //即将使用XMLHttpRequest发送请求,需要先创建XMLHttpRequest对象        if(window.XMLHttpRequest){   //其他浏览器返回的是XMLHttpRequest实例对象            xmlHttp = new XMLHttpRequest();        }else if(window.ActiveXObject){  //IE返回的是ActiveXObject实例对象            xmlHttp = new ActiveXObject("Microsoft XMLHTTP");        }

        if(xmlHttp!=null){            var userName = document.getElementById("userName").value;  //获取输入的用户名的值            var password = document.getElementById("psw").value;      //获取输入的密码的值            //指定接收数据的服务器端的url            var url = "<%=path%>/servlet/LoginServlet?userName="+userName+"&password="+password;            url = encodeURI(encodeURI(url));   //对url进行二次编码,否则中文会乱码            xmlHttp.open("post",url,true);  //通过Post的方式,打开服务器响应地址的连接,true表示异步刷新,false表示同步刷新            xmlHttp.onreadystatechange= processRequest;   //指定回调函数,即当服务器反馈回结果时,处理结果的函数            xmlHttp.send(null);  //发送请求,无参数在IE中正常,null是兼容火狐浏览器所必需的        }else{            alert("无法创建XMLHTTPRequest对象!")        }    }

    function processRequest(){        if(xmlHttp.readyState==4){    //服务器端的响应已被xmlHttp接收完毕            if(xmlHttp.status==200){  //Http状态码,200:服务器响应正常 ;                var str = xmlHttp.responseText;  //接收服务器反馈回的字符串数据                if(str!=0){                      //用户名和密码比对正确                    document.getElementById("login").innerHTML="欢迎<b>"+str+"</b>登录!"                }else{                           //用户名和密码比对错误                    var tip = document.getElementById("tip");                    tip.innerHTML="用户名或密码错误!";                }            }else{                alert(xmlHttp.status);//                400:无法找到请求的资源,一般是url解码错误//                404:访问资源不存在,一般是路径设置错误//                403:没有访问权限//                500:服务器内部错误

            }        }    }</script>

2.servlet代码

作用:接收前端用户数据,并进行用户名和密码的比对,如果比对正确,返回用户名,如果错误,返回0(零)

在项目中创建一个 LoginServelt 的Servlet文件,doPost()方法代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//接收ajax数据

String userName = request.getParameter("userName");
String password = request.getParameter("password");

//对数据进行解码,避免中文乱码问题
userName = URLDecoder.decode(userName, "UTF-8");
password = URLDecoder.decode(password, "UTF-8");

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

if (userName.equals("王磊")&&password.equals("123")) {
  out.print(userName);
}else{
  out.print(0);
}
}

难点:

解决ajax中url参数带中文的问题!

在js中对url进行二次编码:

String url = "<%=path%>/servlet/LoginServlet?userName="+userName+"&password="+password;

url=encodeURI(encodeURI(url));

在java的LoginServlet中对数据进行解码:

userName = request.getParameter("userName");

password = request.getParameter("password");

userName = URLDecoder.decode(userName,"UTF-8");

password= URLDecoder.decode(password,"UTF-8");

时间: 2024-08-24 12:13:01

Ajax的底层实现--使用Ajax实现无刷新登录实例--解决ajax中URl参数带中文的乱码问题的相关文章

AJAX实现无刷新登录

最近学习了如何实现无刷新登录,大体的效果如下(界面比较丑,请自行忽略....): 点击登录按钮时弹出登录窗口,输入正确的用户名密码后点击登录则登录窗口关闭,状态改为当前用户名. 第一步: 首先弹出窗口使用的是jquery-ui中的控件,第一步要学会如何使用. 打开解压后的jquery-UI下的development-bundle->demos,找到index.html,选择dialog下的model dialog,右键查看源码,观察如何使用该控件,找到一句关键代码:$("#dialog-m

struts2结合ajax实现无刷新登录

1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!-- 必须加入struts2-dojo-plugin-相应版本.jar 才能使用ajax--> <%@taglib prefix=&qu

基于jQuery的ajax系列之用FormData实现页面无刷新上传

接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData接口.关于FormData,大家可以看MDN文档. 1,先看效果图 期望的功能和效果很简单:点击页面中的上传文件表单控件,选择文件后点击"ajax提交",将文件上传至服务器,上传成功后,页面给出一个简单的提示. 2,前端的代

使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="keywords" content="周记[学校晚会篇]" /><meta name="description

程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该微信用户的code,拿到code传给后台,换取用户的openid. 2.微信登录(开放平台):微信登录通过微信开放平台,由于第一步公众平台拿到的code会混淆开放平台的code,导致用户使用微信登录失败,就需要使用该插件将url参数重置. 3.微信支付(公众平台):像后台传输步骤一获取的openid

javascript;Jquery;获取JSON对象,无刷新分页实例。

js: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>&

无刷新分页技术,Ajax+smarty

这里运用Smarty模板,更简单 本文主要的技术:AJAX,PHP,Smarty,另外自己封装了一个很简单的类 类: (function(){    function $(id) {        return document.getElementById(id);    }    $.init=function() {        try{return new XMLHttpRequest();}catch(e){};        try{return new ActiveXObject

Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的运用这两天学到的Ajax的相关的知识,就做了个简单的在线网络聊天室. 思路 实现聊天室,基本上就是通过Ajax来传递数据,让PHP来实现对数据的差入和查找,再交给前端JavaScript实现页面的更新,达到即时聊天的功能. 消息显示区 消息显示区就是一个DIV块,我们会借助Ajax获取到服务器端信息

javascript;Jquery;获取JSON对象,无刷新评论实例。

  <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascri