• XML&AJAX


    AJAX: Asynchronous Javascript and XML

    1. 客户端触发异步操作

    2. 创建新的XMLHttpRequest, 是重要的js对象,通过它提起对服务器端的请求

    3. 与server进行连接

    4. 服务器端进行了连接处理

    5. 返回包含处理结果的XML文档

    6. XMLHttpRequest对象接收处理结果并分析

    7. 更新页面

    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>
    <html>
    <head>
    	<title>www.mldnjava.cn,MLDN高端Java培训</title>
    	<script language="javascript">
    		var xmlHttp ;
    		var flag = false ;
    		function createXMLHttp(){
    			if(window.XMLHttpRequest){
    				xmlHttp = new XMLHttpRequest() ;
    			} else {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
    			}
    		}
    		function checkUserid(userid){
    			createXMLHttp() ;
    			xmlHttp.open("POST","CheckServlet?userid="+userid) ;
    			xmlHttp.onreadystatechange = checkUseridCallback ;
    			xmlHttp.send(null) ;
    			document.getElementById("msg").innerHTML = "正在验证..." ;
    		}
    		function checkUseridCallback(){
    			if(xmlHttp.readyState == 4){				
    				if(xmlHttp.status == 200){				
    					var text = xmlHttp.responseText ;
    					if(text == "true"){	// 用户id已经存在了
    						document.getElementById("msg").innerHTML = "用户ID重复,无法使用!" ;
    						flag = false ;
    					} else {
    						document.getElementById("msg").innerHTML = "此用户ID可以注册!" ;
    						flag = true ;
    					}
    				}
    			}
    		}
    		function checkForm(){
    			return flag ;
    		}
    	</script>
    </head>
    <body>
    <form action="regist.jsp" method="post" onsubmit="return checkForm()">
    	用户ID:<input type="text" name="userid" onblur="checkUserid(this.value)"><span id="msg"></span><br>
    	姓  名:<input type="text" name="name"><br>
    	密  码:<input type="password" name="password"><br>
    	<input type="submit" value="注册">
    	<input type="reset" value="重置">
    </form>
    </body>
    </html>
    

    web.xml:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       version="2.5">
    
      <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
    	<servlet>
    		<servlet-name>CheckServlet</servlet-name>
    		<servlet-class>org.lxh.ajaxdemo.CheckServlet</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>CheckServlet</servlet-name>
    		<url-pattern>/CheckServlet</url-pattern>
    	</servlet-mapping>
    	
    	<welcome-file-list>
        	<welcome-file>index.jsp</welcome-file>
     	</welcome-file-list>
    </web-app>
    

    CheckServlet.java:

    package org.lxh.ajaxdemo ;
    import java.sql.* ;
    import java.io.* ;
    import javax.servlet.* ;
    import javax.servlet.http.* ;
    public class CheckServlet extends HttpServlet{
    	private static final long serialVersionUID = 1L;
    	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
     	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
    	public static final String DBUSER = "root" ;
    	public static final String DBPASS = "linda0213" ;
    	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    		this.doPost(request,response) ;
    	}
    	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    		request.setCharacterEncoding("GBK") ;
    		response.setContentType("text/html") ;
    		Connection conn = null ;
    		PreparedStatement pstmt = null ;
    		ResultSet rs = null ;
    		PrintWriter out = response.getWriter() ;
    		String userid = request.getParameter("userid") ;
    		try{
    			Class.forName(DBDRIVER) ;
    			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
    			String sql = "SELECT COUNT(userid) FROM user WHERE userid=?" ;
    			System.out.println(sql);
    			pstmt = conn.prepareStatement(sql) ;
    			pstmt.setString(1,userid) ;
    			rs = pstmt.executeQuery() ;
    			if(rs.next()){
    				if(rs.getInt(1)>0){	// 用户ID已经存在了
    					out.print("true") ;
    				} else {
    					out.print("false") ;
    				}
    			}
    		}catch(Exception e){
    			e.printStackTrace() ;
    		}finally{
    			try{
    				conn.close() ;
    			}catch(Exception e){}
    		}
    	}
    }
    

    regist.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%
    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>Regist OK</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">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    
      </head>
      
      <body>
        OK! <br>
      </body>
    </html>
    

      

     

    AJAX分页:

    index.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      	<script type="text/javascript">
    			
    	var js = {
    				XMLHttp:null,
    				//发送请求函数
    				sendRequest:function(url,responseFun,callback){
    						//创建XMLHTTPRequest对象
    						(function(){
    									//根据浏览器类型创建XMLHTTPRequest对象
    									 if(window.XMLHttpRequest){
    									 	js.XMLHttp = new XMLHttpRequest();
    								 	 }
    									 else{
    										try{
    											js.XMLHttp = new ActionXObject("Msxml2.XMLHTTP");
    										}catch (e){
    											try{
    												js.XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
    											} catch (e0){alert("Microsoft"+e0);}
    										}
    									 }				
    						})();  //function end.
    			
    						js.XMLHttp.open("POST", url, true);
    						js.XMLHttp.onreadystatechange = function(responseFunction){
    								if(js.XMLHttp.readyState == 4){
    									if(js.XMLHttp.status == 200){
    										responseFun(js.XMLHttp);
    									}else{
    										document.getElementById("div").innerHTML = "<font color='red'>连接服务器异常...</font>"	;
    									}
    								}
    								else{
    									//document.getElementById("div").innerHTML = "<font color='red'>数据加载中...</font>"	;	
    								}
    			 			};//指定响应函数onreadystatechange
    						js.XMLHttp.send(null);
    						return js.XMLHttp;
    			}//sendRequest:function
    	}//js end		
    		
    		
    	//响应函数
    	function responseFunction(xmlhttp){
    		var xmlDOM = xmlhttp.responseXML; //接受服务器返回的xml文档
    		parse(xmlDOM);//解析XML文档
    	}
    	
    	//解析XML文档
    	function parse(xmlDOM){
    		var person = xmlDOM.getElementsByTagName("person");
    		var page = xmlDOM.getElementsByTagName("page")[0];
    		var currpage = page.getElementsByTagName("currpage")[0].firstChild.data;
    		var pagecount = page.getElementsByTagName("pagecount")[0].firstChild.data; 
    		var prevpagehtml; 
    		var nextpagehtml;
    		if((currpage-0)<=1){
    			prevpagehtml = "<a>上一页</a>";
    		}else{
    			prevpagehtml = "<a onclick='AjaxTest("+(currpage-1)+");' href='javascript:void(0);'>上一页</a>";
    		}
    		if((currpage-0)<(pagecount-0)){
    			nextpagehtml = "<a onclick='AjaxTest("+(currpage-0+1)+");' href='javascript:void(0);'>下一页</a>";
    		}else{
    			nextpagehtml = "<a>下一页</a>";
    		}
     			var html = "<table style='font-size: 12px; color: red'><tr><td width='80'>编号</td><td width='100'>姓名</td><td width='80'>年龄</td></tr>";
     			
     			for(i=0;i<person.length;i++){
     					html = html+ "<tr><td>"
     							   +person[i].getElementsByTagName("pid")[0].firstChild.data+"</td><td>"
     							   +person[i].getElementsByTagName("pname")[0].firstChild.data+"</td><td>"
     							   +person[i].getElementsByTagName("age")[0].firstChild.data
     							   +"</td></tr>";
     			}
     			html = html + "<tr ><td width='50'>"+prevpagehtml+"</td><td width='100'>共"+pagecount+"页 当前第"+currpage+"页</td><td width='80'>"+nextpagehtml+"</td></tr>";
     			html = html+"</table>";
     			document.getElementById("div").innerHTML=html;
    	}
    	
    	//主调函数,以当前页作为参数
    	function AjaxTest(currpage) {
    		js.sendRequest("AjaxServlet?currpage="+currpage,responseFunction,null);
    	}
    		
      	</script>
      </head>
      
      <body onload="AjaxTest(1);">
    	  <center>
    	  	 <div id="div"> </div>
    	  </center>
      </body>
    </html>
    

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    
    	<servlet>
    		<description>
    			This is the description of my J2EE component
    		</description>
    		<display-name>
    			This is the display name of my J2EE component
    		</display-name>
    		<servlet-name>AjaxServlet</servlet-name>
    		<servlet-class>AjaxServlet</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>AjaxServlet</servlet-name>
    		<url-pattern>/AjaxServlet</url-pattern>
    	</servlet-mapping>
    
    	<servlet>
    		<servlet-name>CityServlet</servlet-name>
    		<servlet-class>CityServlet</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>CityServlet</servlet-name>
    		<url-pattern>/CityServlet</url-pattern>
    	</servlet-mapping>
    
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>
    

    page.java:

    /**
     * @author QQ:373672872
     *	分页Entity
     */
    public class Page {
    	
    	//总记录数
    	private int total;
    	//当前页
    	private int currpage;
    	//每页显示记录数量
    	private int pagesize;
    	//总页数
    	private int pagecount;
    	//每页数据的开始下标
    	private int start;
    	
    	public Page(int total, int currpage, int pagesize) {
    		this.setTotal(total);
    		this.setCurrpage(currpage);
    		this.setPagesize(pagesize);
    	}
    	
    	public int getTotal() {
    		return total;
    	}
    	public void setTotal(int total) {
    		this.total = total;
    	}
    	public int getCurrpage() {
    		return currpage;
    	}
    	public void setCurrpage(int currpage) {
    		this.currpage = currpage;
    	}
    	public int getPagesize() {
    		return pagesize;
    	}
    	public void setPagesize(int pagesize) {
    		this.pagesize = pagesize;
    	}
    	public int getPagecount() {
    		//调用设置总页数方法
    		this.setPagecount();
    		return pagecount;
    	}
    	//设置总页数
    	public void setPagecount(){
    		this.pagecount = (total % pagesize == 0) ? total / pagesize : total / pagesize + 1;
    	}
    	public void setPagecount(int pagecount) {
    		this.pagecount = pagecount;
    	}
    	public int getStart() {
    		//调用设置行号方法
    		this.setStart();
    		return start;
    	}
    	//设置每页的起始行号
    	public void setStart(){
    		this.start = (this.getCurrpage()-1)*this.getPagesize();
    	}
    	public void setStart(int start) {
    		this.start = start;
    	}
    }
    

      

    AjaxServlet.java:

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import java.sql.*;
    
    /**
     * @author QQ:373672872
     * @category 处理JSP页面提交的的异步查询请求,并以XML文件格式返回结果集
     */
    public class AjaxServlet extends HttpServlet {
    	private static final long	serialVersionUID	= 1L;
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//当前页
    		int currpage = Integer.parseInt(request.getParameter("currpage")==null?"1":request.getParameter("currpage"));
    		//总的记录数
    		int total = this.getResultCount();
    		//分页单位
    		int pagesize = 5;
    		//Page类对象
    		Page page = new Page(total,currpage,pagesize);
    		//用于返回给前台页面的XML文档
    		StringBuffer xmlDOM = new StringBuffer();
    		//调用查询方法
    		ResultSet rs = this.getResultSet(page.getStart(),page.getPagesize());
    		//添加XML根节点
    		xmlDOM.append("<root>");
    		try {
    			//添加数据库查询出来的数据
    			xmlDOM.append("<persons>");
    			while (rs.next()) {
    				xmlDOM.append("<person>");
    				xmlDOM.append("<pid>" + rs.getString("pid") + "</pid>");
    				xmlDOM.append("<pname>" + rs.getString("pname") + "</pname>");
    				xmlDOM.append("<age>" + rs.getString("age") + "</age>");
    				xmlDOM.append("</person>");
    			}
    			rs.close();
    			xmlDOM.append("</persons>");
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		//添加分页信息
    		xmlDOM.append("<page>");
    		xmlDOM.append("<currpage>"+page.getCurrpage()+"</currpage>");
    		xmlDOM.append("<pagecount>"+page.getPagecount()+"</pagecount>");
    		xmlDOM.append("</page>");
    		xmlDOM.append("</root>");
    		//调用打印方法
    		this.print(request, response, xmlDOM.toString());
    
    	}
    
    	
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    			this.doGet(request, response);
    		
    	}
    	
    	/**
    	 * @category 打印出XMLDOM文档,用于前台页面的接收
    	 * @author QQ:373672872
    	 * @param request
    	 * @param response
    	 * @param xmlDOM
    	 * @throws IOException
    	 */
    	private void print(HttpServletRequest request, HttpServletResponse response,String xmlDOM) throws IOException{
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/xml");
    		PrintWriter out = response.getWriter();
    		out.print(xmlDOM);
    		out.close();
    	}
    	
    	/**
    	 * @author QQ:373672872
    	 * @category 返回当前页的查询结果
    	 * @param 行号
    	 * @param 长度
    	 * @return ResultSet
    	 */
    	private ResultSet getResultSet(int start,int len){
    		Connection conn = null;
    		PreparedStatement pstmt = null;
    		ResultSet rs = null;
    		try {
    			conn = getConn();
    		} catch (ClassNotFoundException e) {
    			System.out.println(e.getMessage());
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		
    		String sql = "select * from person order by pid limit ?,?"; 
    		//String sql = "select top "+len+" * from person where pid >= ? order by pid";
    		
    		try {
    			pstmt = conn.prepareStatement(sql);
    		
    			pstmt.setInt(1, start);
    			pstmt.setInt(2, len);
    			
    			pstmt.setInt(1, start);
    			rs = pstmt.executeQuery();
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		return rs;
    	}
    	
    	/**
    	 * @author QQ:373672872
    	 * @return 数据库中总的记录数
    	 */
    	private int getResultCount(){
    		int count=0;
    		Connection conn = null;
    		Statement stmt = null;
    		ResultSet rs = null;
    		try {
    			conn = getConn();
    		} catch (ClassNotFoundException e) {
    			System.out.println(e.getMessage());
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		String sql = "select count(*) from person";
    		try {
    			stmt = conn.createStatement();
    			rs = stmt.executeQuery(sql);
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		try {
    			while(rs.next()){
    				count = rs.getInt(1);
    			}
    			stmt.close();
    			rs.close();
    			conn.close();
    		} catch (SQLException e) {
    			System.out.println(e.getMessage());
    		}
    		return count;
    	}
    	/**
    	 * @author QQ:373672872
    	 * @return 取得数据库连接驱动
    	 * @throws ClassNotFoundException
    	 * @throws SQLException
    	 */
    	private Connection getConn() throws ClassNotFoundException, SQLException{
    		
    		//String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    		String driver = "com.mysql.jdbc.Driver"; 
    		//String url = "jdbc:sqlserver://127.0.0.1:1433;database=persondb";
    		String url = "jdbc:mysql://localhost:3306/persondb";
    		 String user = "root";
    	        String password = "linda0213";
    		
    		Class.forName(driver);
    		return DriverManager.getConnection(url,user,password);
    	}
    
    }
    

    xml文件:

    <root>
    	<persons>
    		<person>
    			<pid>1</pid>
    			<pname>BennyTan</pname>
    			<age>20</age>
    		</person>
    		<person>
    			<pid>2</pid>
    			<pname>JayChou</pname>
    			<age>23</age>
    		</person>
    		<person>
    			<pid>3</pid>
    			<pname>JolinTisa</pname>
    			<age>28</age>
    		</person>
    		<person>
    			<pid>4</pid>
    			<pname>Jack</pname>
    			<age>18</age>
    		</person>
    		<person>
    			<pid>5</pid>
    			<pname>Jolit</pname>
    			<age>35</age>
    		</person>
    	</persons>
    	<page>
    		<currpage>1</currpage>
    		<pagecount>5</pagecount>
    	</page>
    </root>
    

      

      

      

  • 相关阅读:
    js--DOM基本使用
    前端--js基础2
    前端--js基础1
    tcp/udp编程
    关于网络
    异常处理
    装饰器
    1.__new__ 魔术方法 单态(例)模式 __del__ 魔术方法(析构方法) __call__ 魔术方法
    面向对象程序设计及面向对象封装 目录
    script 标签里的 async 和 defer
  • 原文地址:https://www.cnblogs.com/wujixing/p/5440115.html
Copyright © 2020-2023  润新知