1. 程式人生 > >javaWeb(十一)Ajax簡介、Ajax校驗使用者名稱

javaWeb(十一)Ajax簡介、Ajax校驗使用者名稱

這種涉及常規操作的新知識點建議直接看教程,畢竟還是要看大神的筆記:菜鳥教程:AJAX


1、Ajax簡介及其應用:
Asynchronous Javascript And XML(非同步JavaScript和XML)

網頁如果想要重新整理區域性內容。 那麼需要重新載入整個網頁。使用者體驗不是很好。 就是為了解決區域性重新整理的問題。 保持其他部分不動,只重新整理某些地方。

並不是新的技術,只是把原有的技術,整合到一起:

  1. 使用CSS和XHTML來表示。
  2. 使用DOM模型來互動和動態顯示。
  3. 使用XMLHttpRequest來和伺服器進行非同步通訊。
  4. 使用javascript來繫結和呼叫。

1、在jsp中建立超連結並繫結一個函式 (先說Get型別

<h2>
	<a href="" onclick="get()">使用Ajax.Get請求</a>
</h2>


在這個jsp中寫JavaScript程式碼:

<script type="text/javascript">

	function get() {

		//1、建立XmlHttpRequest
		var xmlhttp = new XMLHttpRequest();

		//2、當請求被髮送到伺服器時,我們需要執行一些基於響應的任務。這裡是直接彈出響應的內容
xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { alert(xmlhttp.responseText); } } //3、規定請求的型別 xmlhttp.open("GET", "Demo1Servlet?name=aa&age=23", true); //4、傳送請求 xmlhttp.send(); } </script>

寫連線的Servlet並響應一下:

response.
setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String age = request.getParameter("age"); response.getWriter().write("我收到請求了!" + "name:" + name + ",age:" + age);

效果如圖:
在這裡插入圖片描述

如果是Post型別,上面的JSP和Servlet都是一樣的,就是要把JavaScript的程式碼改一下就行了:

xmlhttp.open("POST","Demo1Servlet",true);

//設定請求頭
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

//要傳送的資料,如果沒有資料就不需要上面這一行了
xmlhttp.send("fname=Henry&lname=Ford");

2、Ajax校驗使用者名稱:

校驗使用者輸入的使用者名稱是否存在,並在旁邊顯示出來

在這裡插入圖片描述

  1. 編寫登陸頁面index.jsp
    在name處繫結函式,當用戶滑鼠離開文字框的時候,用Ajax向Servlet傳送資料
<head>
<base href="<%=basePath%>">
<script type="text/javascript">

	function checkName() {
	
		//獲得name的值
		var name = document.getElementById("name").value;

		var xmlhttp = new XMLHttpRequest();
		
		
			//3、規定請求的型別
		xmlxmlhttp.open("POST", "CheckNServlet", true);
		

		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				if (xmlhttp.responseText == 1) {
				//在name後面顯示
					document.getElementById("span").innerHTML = "<font color='red'>使用者名稱已經存在,請重新輸入</font>";
				} else {
					document.getElementById("span").innerHTML = "<font color='green'>使用者名稱可用</font>";

				}

			}
		}

	

		//設定請求頭
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

		//把name傳送到serlvetl
		xmlhttp.send("name=" + name);
	}
</script>

</head>

<body>


	<table border="1px" width="500px">
		<tr>
			<td>使用者名稱</td>
			<td><input type="text" name="name" id="name"
				onblur="checkName()"><span id="span"></span></td>
		</tr>
		<tr>
			<td>密碼</td>
			<td><input type="password" name="password"></td>
		</tr>
		<tr>
			<td>郵箱</td>
			<td><input type="email" name=""></td>
		</tr>
		<tr>
			<td>簡介</td>
			<td><textarea name="" rows="3" cols="600px"></textarea></td>
		</tr>
		<tr>
			<td colspan="2"><input type="submit" value="註冊"></td>
		</tr>
	</table>

</body>
</html>

  1. Dao程式碼
package CheckNameDao;

import java.sql.SQLException;

public interface CheckDao {
	
	boolean CheckName(String name)throws SQLException;

}

  1. Dao實現
package CheckNameDaoImpl;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import CheckNameDao.CheckDao;

public class CheckDaoImpl implements CheckDao {

	@Override
	// 傳入一個名字,這個名字是從前端的Ajax得來的
	public boolean CheckName(String name) throws SQLException {

		QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());

		String sql = "select count(*) from user where name = ?";
		// 找到姓名是name的資料的數量
		long result = (long) queryRunner.query(sql, new ScalarHandler(), name);
		// 如果數量大於0(有這個資料),返回true
		return result > 0;

	}

}

  1. Servlet:從Ajax那裡收到使用者輸入的使用者名稱,然後看資料庫裡有沒有這個名字,返回一個bool值
package cn.nupt.CheckNameServlet;

import java.io.IOException;
import java.sql.SQLException;

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

import CheckNameDao.CheckDao;
import CheckNameDaoImpl.CheckDaoImpl;

/**
 * Servlet implementation class CheckNameServlet
 */
//@WebServlet("/CheckNameServlet")
public class CheckNameServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		try {
			String name = request.getParameter("name");
			System.out.println("name="+name);
			
			CheckDao daoImpl = new CheckDaoImpl();

			boolean b = daoImpl.CheckName(name);

			if (b) {
				response.getWriter().println(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}