J2EE開發技術點4:ajax技術

前言

AJAX 是在不重新加載整個頁面的情況下,與服務器交換數據并更新部分網頁的技術。需要知道的是,Ajax技術并不是一項新的技術,而是使用現有技術解決問題的新方法。Ajax(Asynchronous JavaScript and XML)也叫異步JavaScript和XML,該技術最早應用于Google maps上,也是Google把這項技術帶到千家萬戶,可以發現目前主流的Web開發框架都集成了Ajax的功能,這點也說明了這項技術的優越性。Ajax技術的工作原理很簡單:通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新

概述

首先我們已經知道ajax是一種局部刷新技術,那么為什么要使用局部刷新技術呢?如果不使用局部刷新就意味著就得刷新整個網頁,這個過程可能會提交不必要的請求,所以使用ajax技術的直接原因是可以減少服務器的響應負擔,加速響應過程。使用ajax技術與使用普通表單最直接的區別是前者刷新的時候地址欄不會發生變化,而后者會發生變化。

簡易留言本開發

先演示一下整個項目,請注意瀏覽器的地址是否發生變化:
留言本項目演示
從上面的演示中,我們可以看到瀏覽器并沒有發生刷新,地址欄的地址也沒有發生變化。現在我們應該對ajax技術有了一個初步的印象(一種地址欄不會發生變化的技術,先這樣理解咯)。

下面我們來一步步實現這個簡易的留言本:

搭建開發環境
創建一個工程gbook,項目結構(已經實現好)如下:
工程結構

action包:控制器,用于分發請求給服務層
dao包:實現留言本的頂層接口
dao.impl包:dao包接口的實現類
entity包:JavaBean
service包:服務層,用于對外提供功能
utils:工具類

編寫首頁
簡要編寫如下:

 <html><body><table id="tbl"></table><input type="text" id="sname"><br><input type="text" id="title"><br><textarea rows="5" cols="20" id="content"></textarea><br><button id="add">添加</button></body>
</html>

編寫ajax.js
這個js文件是這個項目的核心之一,表單的所有請求都使通過這個js來完成的,請看代碼:

//根據url刪除留言
function del(url){var xmlhttp = getXmlHttpRequest();xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){load();}};xmlhttp.open("GET",url,true);xmlhttp.send();
}
//獲取XmlHttpRequest對象,使用ajax技術,這個對象必不可少
function getXmlHttpRequest() {var xmlhttp;if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp = new XMLHttpRequest();} else {// code for IE6, IE5xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}return xmlhttp;
}
//加載所有留言
function load(){var table = $("tbl");var xmlhttp = getXmlHttpRequest();xmlhttp.onreadystatechange= function(){if(xmlhttp.readyState == 4 && xmlhttp.status == 200){table.innerHTML = xmlhttp.responseText;}}xmlhttp.open("GET", "gbookAction?item=list", true);xmlhttp.send();
}window.onload = function(){//加載已經添加的留言load();var btn = $("add");//這個點擊事件就是添加留言的功能btn.onclick = function(){var sname = $("sname").value;var title = $("title").value;var content = $("content").value;//獲取XMLHttpRequest對象var xmlhttp = getXmlHttpRequest();xmlhttp.open("GET", "http://localhost:8080/gbook/gbookAction?item=add&sname=" + sname + "&title=" + title + "&content=" + content, true);xmlhttp.send();//當添加成功后再顯示全部留言xmlhttp.onreadystatechange = function(){//這個判斷必須寫,不然瀏覽器不知道什么時候加載if(xmlhttp.readyState == 4 && xmlhttp.status == 200){load();}}//清空輸入$("sname").value="";$("title").value="";$("content").value="";}
}

我們注意到,使用ajax提交表單請求,通過創建XmlHttpRequest對象,并調用其open方法以及send方法,向服務器發起請求,當成功收到響應的時候會調用onreadystatechange 事件,這個事件就是響應服務器的請求的。如果有返回值,則返回值會被封裝到XMLHttpRequest對象的responseText域中,然后瀏覽器愛干嘛干嘛。

創建gbookAction(類似Struts1中的ActionMapping)
gbookAction類主要用于接收ajax的請求,并調用服務層(如果需要的話)進行響應。在這個留言本中,使用到的功能包括添加留言、顯示所有留言、刪除留言。所以在gbookAction中只需要處理這三類請求就可以了,具體源碼如下:

package com.gbook.action;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.gbook.entity.Gbook;
import com.gbook.service.GbookService;public class GbookAction extends HttpServlet {private static final long serialVersionUID = -5872201223353026952L;private GbookService service = new GbookService();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");String item = request.getParameter("item");if(item.equals("add")){//添加留言String sname = request.getParameter("sname");String title = request.getParameter("title");String content = request.getParameter("content");Gbook gbook = new Gbook();gbook.setSname(sname);gbook.setTitle(title);gbook.setContent(content);service.add(gbook);}else if(item.equals("list")){//加載所有留言request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();List<Gbook> list = service.queryAllGbooks();out.print("<tr>");out.print("<th>姓名</th>");out.print("<th>標題</th>");out.print("<th>內容</th>");out.print("<th>操作</th>");out.print("</tr>");for (Gbook gbook : list) {out.print("<tr>");out.print("<td>"+gbook.getSname()+"</td>");out.print("<td>"+gbook.getTitle()+"</td>");out.print("<td>"+gbook.getContent()+"</td>");out.println("<td><a href=\"javascript:del('http://localhost:8080/gbook/gbookAction?item=del&id="+gbook.getId()+"')\">del</a></td>");out.print("</tr>");}}else if(item.equals("del")){//刪除留言int id = Integer.parseInt(request.getParameter("id"));service.deleteGbookById(id);}}
}

在處理添加留言請求的時候,使用service層,service層代碼調用dao層,dao層完成具體的添加留言實現,而在dao層繼續調用持久層(也就是上面DBUtils.java類),最終完成留言的添加。

同樣地,在處理加載所有留言的請求的時候,調用service層,然后使用PrintWriter對象直接把留言信息顯示到瀏覽器上。刪除留言類似,就不再贅述了。

配置web.xml
代碼如下:

<servlet><servlet-name>GbookAction</servlet-name><servlet-class>com.gbook.action.GbookAction</servlet-class></servlet><servlet-mapping><servlet-name>GbookAction</servlet-name><url-pattern>/gbookAction</url-pattern></servlet-mapping>

這里省略了JDBC連接數據庫相關源碼,這部分較簡單就不再贅述了。
完整源碼可以參看這里。

ajax技術小結
這只不過是ajax技術的一個最簡答的應用了,還遠遠沒有沒有發揮其威力,其威力可以在Google map中得到體現:當拖動鼠標時顯示不同的位置信息就是一個很好體現。ajax技術優化了前端代碼,實現了頁面的局部刷新,這個特點可以在高訪問量的情況得到體現,對ajax技術的研究還沒有停止,至少知道ajax技術的原理與實際應用了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【WEB API項目實戰干貨系列】- 接口文檔與在線測試(二)

這一篇我們主要介紹如何做API幫助文檔&#xff0c;給API的調用人員介紹各個 API的功能, 輸入參數&#xff0c;輸出參數, 以及在線測試 API功能(這個也是方便我們自己開發調試) 我們先來看看我們的API最終幫助文檔及在線測試最終達到的效果: 概要圖GET API添加產品API:刪除產品 …

IOS多線程

http://www.jianshu.com/p/0b0d9b1f1f19 首頁專題下載手機應用顯示模式登錄注冊登錄添加關注作者 伯恩的遺產 2015.07.29 00:37* 寫了35249字&#xff0c;被2296人關注&#xff0c;獲得了1668個喜歡關于iOS多線程&#xff0c;你看我就夠了 字數8596 閱讀92152 評論153 喜歡905在…

Android之提示Failed to load WebView provider: No WebView installed

1 問題 Fatal Exception: android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installedat android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:435)at a…

地理(GIS)教學神器:氣象地球生成器

地理教學中&#xff0c;不管是高中還是初中&#xff0c;都會涉及到大氣運動的相關教學&#xff0c;并且&#xff0c;高中階段的大氣運動知識對很多學生來說相對比較復雜&#xff0c;如&#xff1a; &#xff08;三圈環流&#xff09; &#xff08;青藏高原對西風帶的影響&#…

使用 Yarp 做網關

資料GitHub: https://github.com/microsoft/reverse-proxyYARP 文檔&#xff1a;https://microsoft.github.io/reverse-proxy/articles/getting-started.html主動和被動健康檢查 &#xff1a; https://microsoft.github.io/reverse-proxy/articles/dests-health-checks.html#ac…

Android之OkDownload里面的OKHttp提示java.lang.IllegalArgumentException: Invalid URL port: “image“

1 、問題 release版本線上奔潰如下 Fatal Exception: java.lang.IllegalArgumentException: Invalid URL port: "image"at okhttp3.t$a.a(HttpUrl.kt:63)at okhttp3.t$b.b(HttpUrl.kt:8)at okhttp3.y$a.b(Request.kt:5)at com.liulishuo.okdownload.j.e.b.<init…

【iVX 初級工程師培訓教程 10篇文拿證】05 畫布及飛機大戰游戲制作

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

【WEB API項目實戰干貨系列】- API登錄與身份驗證(三)

這篇我們主要來介紹我們如何在API項目中完成API的登錄及身份認證. 所以這篇會分為兩部分, 登錄API&#xff0c; API身份驗證. 這一篇的主要原理是&#xff1a; API會提供一個單獨的登錄API, 通過用戶名&#xff0c;密碼來產生一個SessionKey, SessionKey具有過期時間的特點, 系…

mysql數據庫建立的數據庫在哪個文件夾?

為什么80%的碼農都做不了架構師&#xff1f;>>> 一般在安裝目錄下的data文件夾下&#xff0c;或者在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data&#xff08;你的可能是C:\Documents and Settings\All Users\Application D…

python 學習筆記01

python學習過程遇到一些問題記錄&#xff1a; 1、 IndentationError:expected an indented block錯誤的解決辦法 一句話 有冒號的下一行往往要縮進&#xff0c;該縮進就縮進 參考資料&#xff1a;http://blog.csdn.net/hongkangwl/article/details/16344749 2、17個新手常見Pyt…

ArcGIS實驗教程——實驗二十四:人口密度制圖

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 一、實驗分析 人口密度是指單位土地面積上居住的人口數,通常以每平方千米或每公頃內的常住人口為單位計算。人口密度同資源、經濟密切結合,因此,科學準確地分析人口密度的分布情況,對合理制定…

Navicat 遠程連接ubuntu出現的問題

2003-Cantt connect to Mysql server to xxxxxxx 解決&#xff1a; vim /etc/mysql/my.cnf 修改bind-address 0.0.0.0 然后重啟mysql&#xff1a; 這時進入mysql可能會報錯&#xff1a; ERROR 2002 (HY000): Cant connect to local MySQL server through socket /v…

WPF效果第一百八十八篇之再玩Expander

大端午節的在屋里吹著空調擼著代碼真是酸爽;閑話也不多扯,直接看今天要分享的效果:1、關于簡單的布局設計:2、前臺先來個死布局,回頭ListBox改模板:<Expander ExpandDirection"Left" Header"控制卡" VerticalAlignment"Bottom" HorizontalAli…

Android之實現長按Webview頁面文字自定義復制、全選、分享、搜索、翻譯功能(支持多語言,博文也有Demo下載地址)

1 需求和效果爆照 瀏覽器app封裝了Webview,然后實現實現長按Webview頁面文字自定義復制、全選、分享、搜索、翻譯功能(支持多語言),都在自己的瀏覽器app里面進行搜索和翻譯,不跳到系統瀏覽器里面去 效果爆照如下,oppo手機效果如下 華為手機效果如下 2 Demo下載地址 De…

中國西北地區專題地圖合集(高清)

1. 西北地區概況圖 2. 西北地區植被類型分布圖 3. NDVI變化趨勢圖 4. 氣候與NDVI的相關性

Apache、tomcat、Nginx常用配置合集

配置文件地址&#xff1a; Apache&#xff1a; /etc/httpd/conf/httpd.conf tomcat&#xff1a; /usr/local/tomcat/conf/server.xml Nginx &#xff1a; /usr/local/nginx/conf/nginx.conf 開機啟動文件&#xff1a;/etc/rc.d/rc.local 啟動方式&#xff1a; Apache&#xff…

使用putty連接linux

使用putty連接linux 快照的使用 &#xff0c;做快照相當于做備份&#xff0c;比如配置好IP&#xff0c;快照一下&#xff0c;下次就可以在回到這里&#xff01; putty下載 最好去官網下載 下載putty.zip如圖所示 如何使用putty 如圖設置好IP然后 save 保存 如…

【WEB API項目實戰干貨系列】- API訪問客戶端(WebApiClient適用于MVC/WebForms/WinForm)(四)

目前最新的代碼已經通過Sqlite NHibernate Autofac滿足了我們基本的Demo需求. 按照既定的要求&#xff0c;我們的API會提供給眾多的客戶端使用, 這些客戶端可以是各種Web站點, APP, 或者是WinForm, WPF, Silverlight等諸如此類的應用&#xff0c;將來還有可能是各種Iot等物聯…

基于 Roslyn 實現代碼動態編譯

基于 Roslyn 實現代碼動態編譯Intro之前做的一個數據庫小工具可以支持根據 Model 代碼文件生成創建表的 sql 語句&#xff0c;原來是基于 CodeDom 實現的&#xff0c;后來改成使用基于 Roslyn 去做了。實現的原理在于編譯選擇的Model 文件生成一個程序集&#xff0c;再從這個程…

【GIS風暴】GIS拓撲關系原理詳解

目 錄 1. 拓撲關系的概念2. 拓撲元素3. 拓撲關系4. 拓撲關系的意義5. 拓撲在ArcGIS中實現1. 拓撲關系的概念 地圖上的拓撲關系是指圖形在保持連續狀態下的變形(縮放、旋轉和拉伸等),但圖形關系不變的性質。 2. 拓撲元素 對二維而言,矢量數據可抽象為點(節點)、線(鏈、…