學習技術最好的方式就是在做中學,做一個小demo來對前端輸入進行實時驗證。 利用ajax技術和Sevlet技術來實現,使用原生的js。 源碼可訪問, "我的Github" 什麼是ajax Ajax 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 ...
學習技術最好的方式就是在做中學,做一個小demo來對前端輸入進行實時驗證。
利用ajax技術和Sevlet技術來實現,使用原生的js。
源碼可訪問,我的Github
什麼是ajax
Ajax 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 XML),是指一種創建互動式網頁應用的網頁開發技術。
Ajax = 非同步 JavaScript 和 XML(標準通用標記語言的子集)。
Ajax 是一種用於創建快速動態網頁的技術。
Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。
通過在後臺與伺服器進行少量數據交換,Ajax 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。
傳統的網頁(不使用 Ajax)如果需要更新內容,必須重載整個網頁頁面。
這是百度對它的定義,足夠詳細。
值得補充的一點是對非同步的理解,非同步是相對於同步來說的,在這裡他們指的是伺服器和瀏覽器的交互模式。
同步,每次請求發出之後,用戶操作即被阻塞,必須要求返迴響應後繼續操作。而非同步指的是發出請求後,用戶無需等待響應,一切由ajax來實現,無需進行刷新網頁就可以局部更新數據。提高了倆端的溝通效率。
來個小demo
做一個無刷新驗證表單的demo,在對話框中輸入用戶名,在後臺進行驗證,使用ajax技術。
項目結構,使用maven構建
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>login</title>
</head>
<body>
歡迎登陸:
用戶名:<input type="text" name="username" id="username" onchange="CallServer()"/>
<!-- 顯示提示信息 -->
<div id="msg"></div>
<!-- 在jsp頁面中引入js,絕對路徑的方式 -->
<script src="${pageContext.request.contextPath}/js/main.js"></script>
</body>
</html>
main.js
alert("use ajax!")
//創建XMLHttpRequest對象,在不同瀏覽器
function createXMLHTTP() {
if(window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼
xmlhttp = new XMLHttpRequest();
}else {
// IE6, IE5 瀏覽器執行代碼
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
function CallServer() {
var username = document.getElementById("username").value;
// 判斷為空
if ((username == null) || (username == "")) return;
var xmlhttp = createXMLHTTP();
// 構建請求url
var url = "/loginServlet"+"?"+"username="+username;
//狀態碼改變調用事件
xmlhttp.onreadystatechange = function () {
//正常返回,替換msg內容
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("msg").innerHTML = xmlhttp.responseText;
}
}
//非同步提交請求
xmlhttp.open("GET",url,true);
//發送請求
xmlhttp.send();
}
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.lbw.servlet.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
loginServlet.java
package com.lbw.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 後端使用Servlet處理請求
*/
public class loginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//設置編碼和響應頭
request.setCharacterEncoding("UTF-8");
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
//獲取參數
String username = request.getParameter("username");
String msg = "";
if("lbw".equals(username)){
msg = "名稱正確";
}else {
msg = "名稱錯誤";
}
PrintWriter out = response.getWriter();
out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
開始測試
輸入localhost:8888/login.jsp,彈出視窗
代表在jsp中引入js成功
在輸入框輸入測試數據
由Servlet中邏輯決定,返回錯誤信息
由Servlet中邏輯決定,返回成功信息
由此,初步實現了ajax非同步請求,達到了實時驗證的要求
一些小細節
- 在使用maven構建項目,註意Project Structure -> Facets,這裡設置web.xml和webapp的路徑,idea會使用到
- 在引入js時,註意使用相對路徑的方式來進行映入,並且用到EL表達式要開啟
isELIgnored="false"
·`避免沒有解析。