AJAX入门及实例

前置知识

HTML、Java、JavaScript、servlet、tomcat 基础知识

AJAX框架

<html>
<body>
<SCRIPT language="JavaScript">
    function findbook(){
        // 1、AJAX 实例化浏览器内置对象xmlHttp
        var xmlHttp = false;
        if(window.XMLHttpRequest){ // Mozilla等浏览器
            xmlHttp = new XMLHttpRequest();
        }
        else if(window.ActiveXObject){
            try{
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // IE浏览器
            }catch (e) {
                try{
                    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }catch(e){
                    window.alert("该浏览器不支持AJAX");
                }
            }
        }
        
        var bookname = document.addbookform.bookname.value;
        var url = "servlets/FindBook?bookname="+bookname;
        
        // 2、指定异步提交的目标和提交方式
        xmlHttp.open("POST",url,true);
        // xmlHttp.open("GET","showbooks.jsp",true);
        
        // 3、指定当xmlHttp状态改变时需要进行的处理
        xmlHttp.onreadystatechange=function(){
            if(xmlHttp.readyState==4){
                booklist.innerHTML=xmlHttp.responseText;
            }
            else{
                booklist.innerHTML+="正在搜索,请稍后......"
            }
        }
        
        // 4、发出请求
        xmlHttp.send();
    }
</SCRIPT>
<form name="addbookform">
    书名:<input type="text" name="bookname"><br>
    <input type="button" value="查询" onclick="findbook()"><br>
</form>
<div id="booklist"></div>
</body>
</html>

在请求过程中,xmlHttp的状态不断改变,其状态保存在xmlHttp的readyState属性中,用xmlHttp.readyState表示:

  • 0:未初始化状态,对象已创建,尚未调用 open()
  • 1:已初始化状态,调用 open() 方法以后
  • 2:发送数据状态,调用 send() 方法以后
  • 3:数据传送中状态,已经接收到部分数据,但接收尚未完成
  • 4:完成状态,数据全部接收完成。

AJAX实例

使用AJAX的 登录表单验证 简单案例
以登录界面为例,首先编写登录页面 login.jsp
如果登录成功,则界面显示登录成功后的页面
如果登录失败,则界面显示登录失败后的页面
在登录时,浏览器窗口不刷新,浏览器地址栏上的地址不变,网页上其他部分的浏览不受影响。

文件结构

代码编写

登录页面 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <SCRIPT language="JavaScript">
        function login(){
            var xmlHttp = false;
            if(window.XMLHttpRequest){
                xmlHttp = new XMLHttpRequest();
            }
            else if(window.ActiveXObject){
                try{
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e) {
                    try{
                        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                    }catch(e){
                        window.alert("该浏览器不支持AJAX");
                    }
                }
            }
            var account = document.loginForm.account.value;
            var password = document.loginForm.password.value;
            var url = "http://localhost:8080/pro/servlets/LoginServlet?account="+account+"&password="+password;
            xmlHttp.open("POST",url,true);
            // xmlHttp.open("GET","loginSuccess.jsp",true);
            xmlHttp.onreadystatechange=function(){
                if(xmlHttp.readyState==4){
                    resultDiv.innerHTML=xmlHttp.responseText;
                }
                else{
                    resultDiv.innerHTML+="正在登录,请稍后......"
                }
            }
            xmlHttp.send();
        }
    </SCRIPT>
    欢迎登录学生管理系统.<hr>
    <div id="resultDiv">
        <form name="loginForm">
            请你输入账号:<input type="text" name="account"><br>
            请你输入密码:<input type="password" name="password"><br>
            <input type="button" onclick="login()" value="登录">
        </form>
    </div>
</body>
</html>

登录成功页面 loginSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
    欢迎${account}登录成功!<br>
    您可以选择以下功能:<br>
    <a href="">查询学生</a>
    <a href="">修改学生资料</a>
    <a href="">退出</a>
</body>
</html>

登录失败页面 loginFail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败</title>
</head>
<body>
    对不起,登录失败!<br>
    请你检查是否写错<br>
    账号名写错<br>
    密码写错
</body>
</html>

servlet 登录验证代码 LoginServlet.java

package servlets;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginServlet extends HttpServlet{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        String loginState = "Fail";
        String targetUrl = "/loginFail.jsp";
        // 简化的登录验证,对DAO的简化
        if(account.equals(password)){
            loginState="Success";
            targetUrl="/loginSuccess.jsp";
            HttpSession session = req.getSession();
            session.setAttribute("account",account);
        }
        req.setAttribute("loginState",loginState);
        ServletContext application = this.getServletContext();

        RequestDispatcher rd = application.getRequestDispatcher(targetUrl);
        rd.forward(req,resp);
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}

web.xm文件配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlets.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlets/LoginServlet</url-pattern>
    </servlet-mapping>
</web-app>

网页效果

登录界面

当账号和密码相同时,认为登录成功,显示登录成功界面,但浏览器窗口不刷新,地址栏不变

当账号和密码不相同时,认为登录失败,显示登录失败界面,但浏览器窗口不刷新,地址栏不变

实例代码

实例代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huazi-J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值