Ajax的JSP示例以及相關知識

學習使用AJAX之前,有幾樣的東西是必須的:
1、HTML
2、DHTML,就是動態HTML,這裏可能會常用到document.getElementById([id])方法,或者是使用window.id.value=[value]等等,如果不熟悉,不及,看看下面的例子,如果還不能夠理解,再把網上搜搜,這方面的解釋多得不能夠再多了。
3、Javascript。這個就是非常的重要的,因爲好多東西都需要通過這個去操作。
4、DOM。這個不是必須的,就算我們不知道這個東西,照樣可以用JAVASCRIT做很多的東西了。
5、數據庫操作及SQL知識。現在應用程序好多都是與數據庫打交道,常見的用戶名信息等等,都是放在數據庫中的。
下面進行正題吧,這個實例非常的簡單,採用JSP實現用戶輸入的用戶是否存在於數據庫中,並且給以相應的提示,所謂“麻雀雖小,五臟俱全”,其它的發揮就是在這個方向上發揮開發。
總共有三個文件,有兩個JSP面,一個用於前臺顯示,一個用於確定用戶是否存在;另外一個JAVA頁面,用於做數據庫連接。
注:請注意其中註釋,那是非常的有助於你理解
前臺顯示:index.jsp
<html>
<head>
<title></title>
<script language="javascript" >
var httpRequest;
/**
下面這個函數可以返回一個適合任何瀏覽器的httpRequest,步子如下:
1.試着創建一個XMLHttpRequest()示例,該示例可適合於除了微軟以外的所有瀏覽器
2.增加錯誤判斷,如果當前瀏覽器是微軟的,那麼就創建適用於微軟的瀏覽器
3.但微軟的瀏覽器又有兩個版本之分,不過據說微軟已經在7.0中增加對XMLHttpRequest()的支持
4.但這樣也需要對原來的瀏覽器支持,否則你寫出來的程序那些用老版本瀏覽器的用戶就是看不
到效果的。
*/
function createRequest()
{
    try{
        request=new XMLHttpRequest();
    }catch(trymicrosoft)
    {
        try{
            request=new ActiveXObject("Msxml2.XMLHTTP");
        }catch(othermicrosoft)
        {
            try{
                request=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(failed)
            {
                request=false;
            }
        }
    }
    if(!request)
    {
       alert("err Happend!");
       return null;
    }       
    return request;
}
/**
這個函數就是用戶的動作所有觸發的函數,如下面的onblur()時,就會調用該函數
經過的步驟如下:
1.從HTML頁面得到你需要的數據,可以採有document.getElementById("")方法。
2.建立需要的URL,該URL就和在FORM裏面的method爲get時並採用submit提交在地址欄
裏面到的一樣
3.打開與服務器的連接,這裏面有三個必要的參數,雖然文檔規定只有兩個,但是我個
人覺得最好用三個,
第一個可以是GET,POST或者是POST,但常用的就是前面的兩個,並且最好都用大寫,因
爲有些瀏覽器如FireFox可能會報錯,
第二個就是打報的URL,這肯定你是必須的。
第三個就是下面的看到的true,這裏可以是false。true表示同步處理,你提交後可以做
其它的事情,這就是AJAX裏面的A,即asynchronous;如是false,那就得等到服務器的返
回才能夠做其它的事情。
4.等到服務器完成,並且確定返回執行了正確執行的提示,我們就可以做下面我們想做的
事情。這些後面的事情就必須通過Javascript去完成了,因爲XMLHttpRequest的唯一用途
就是發送請求及接收服務器的響應結果。
5.上面都完成了後,就可以採用send()方法向服務器發送你需要發送的信息了,它的參數
可以是任何類型,發送的數據格式必須爲這樣的格式:
name=value&anothername=othervalue&so=on,如果你想傳送數據,你必須更改MIME類型:
httpRequest.setRequestHeader('Content-type','application/x-www-form-urnlencoded');
否則服務器將會丟棄發送的數據。
*/
function getBackInfo()
{
    var username=document.getElementById("username").value;
    var url='checkUser.jsp?username='+username;
    request.open("GET",url,"true");
    //下面相當於是一個隱性的循環,在函數中規定只有都接收完畢數據後才做處理
    //onreadystatechange有5個值:
    // 0:未初始化
    // 1:初始化
    // 2:發送數據
    // 3:接收數據中
    // 4:數據接收完畢
    //另外還要注意就是在註冊回調函數onreadystatechange時,後面的函數不能夠帶參數
    //如下disResult是一個函數,不能夠帶參。
    reqeust.onreadystatechange=disResult;//隱性的循環
    request.send(null);
}
function disResult()
{
/**
1.一定要確定readystate==4的完成狀態才做下面的事,否則會在建立連接即readystate==1的
時候就開始,然後會在readystate==2,readystate==3,readystate==4的時候都會執行,不信
你可以alert("")一個提示信息試試。
2.服務器通知完成了,並且還要保證是正確完成的,得到的是我們需要的結果才能夠繼續,這裏
常用響應碼有:
200:成功執行
401:未授權
403:禁止
404:沒有找到文件
*/
    if(request.readystate==4)
    {
        if(request.status==200)
        {
            //一切都OK了,那就該用Javascript去執行你想要的動作了。
            document.getElementById("disCheckResult").value=request.responseText;
            alert('done');
        }
        else
        {
            alert('Something Wrong has Happend!');
        }
    }
}
</script>
</head>
<body>
  <form>
    <table>
        <tr>
            <td>
                <input type=text id="username" onblur="getBackInfo();">
            </td>
            <td>              
                <dd id="disCheckResult">這裏用於在執行後顯示結果的地方</dd>
            </td>
        </tr>
    </table>
  </form>
</body>
</html>
用於驗證的JSP頁面:checkUser.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="project1.DBMS_Conn"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
    <title>checkUser</title>
  </head>
  <body>
  <%
    String username=request.getParameter("username");
    DBMS_Conn conn=new DBMS_Conn();
    if(conn.checkUser(username))
        out.println("用戶名已經存在!");
//這個信息就是發送到前臺去顯示的信息,即服務器返回的信息
    else
        out.println("可以繼續!");
  %>
  </body>
</html>數據庫連接JAVA程序:
package project1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBMS_Conn {
    Connection conn;
    Statement st;
    public DBMS_Conn() {
        conn_init();
    }
    void conn_init() {
        setConnection();
        setStatement();
    }
    public void setConnection() {
        try {
            //Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //db.mdb有一個名爲user表,至少有一個名爲username的字段
            String strurl =
            "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E://db.mdb";
            //conn=DriverManager.getConnection("jdbc:mysql://localhost/palfinger?
            //user=root&password=admin&useUnicode=true&characterEncoding=8859_1");
            conn = DriverManager.getConnection(strurl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 設置Statement
     */
    public void setStatement() {
        try {
            st = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     * 根據用戶名確定用戶是否存在
     */
    public boolean checkUser(String username) {
        String sql="select * from user where username='"+username+"'";
        ResultSet rs;
        try {
            rs = st.executeQuery(sql);
            if(rs.next())
            {
                conn.close();
                return true;
            }           
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }  
}
本文轉自建站學  http://www.jzxue.com

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章