使用Jquery–Jsp與servlet之間的資料互動

來源:互聯網
上載者:User

有過java web開發經驗的人都知道,Jsp與servlet之間的資料互動多種多樣,但最常見的莫過於表單提交咯(這裡我沒說錯吧— ,—),通過jsp標籤form的action指定你要發送表單資料的目的地,在指定發送的方式(get或者post),點擊提交按鈕,而在servlet端使用request.getParameter(key)接收,這樣就可以達到jsp與servlet之間的資料互動。而我今天要說的方法是通過Jquery的的ajax部分來進行與servlet互動。

瞭解jquery的人都知道,jquery本身就是一個javascript的輕量級架構,可以說是對javascript的一個很好的封裝,其中最為精妙的莫過於對ajax操作的簡化咯。。。簡單,易上手。如果非要挑點毛病的話,我想只有一點吧(應該吧。。。。):那就是不利於初學者的學習,因為jquery把這部分簡化的太過於簡單咯,對於初學者想瞭解其內部實現根本無從下手,讓初學者只知道這樣去做,但不知道為什麼這樣做。好了,廢話不多說了,上正題吧。

jquery對於ajax的操作主要體現與幾種方法:$.get(),$.post(),$.ajax().其中$.ajax()最難理解,也最難使用。而至於其他的方法大家可以去W3C或者通過其他的渠道瞭解,在這裡我就不贅述咯(其實是我想偷懶。。。,交代的那麼坦誠,估計沒人噴了吧)~~~好了,來先說第一個$.get()。

$.get()其實功能跟使用form表單提交時,方式選擇get傳輸是一樣的。而它裡面有幾個參數:

url 必需。規定將請求發送的哪個 URL。
data 可選。規定連同請求發送到伺服器的資料。
success(response,status,xhr)

可選。規定當請求成功時啟動並執行函數。

額外的參數:

  • response - 包含來自請求的結果資料
  • status - 包含請求的狀態
  • xhr - 包含 XMLHttpRequest 對象
dataType

可選。規定預計的伺服器響應的資料類型。

預設地,jQuery 將智能判斷。

可能的類型:

  • "xml"
  • "html"
  • "text"
  • "script"
  • "json"
  • "jsonp"

他的使用方法,eg:

$.get("demo_ajax_load.txt", function(result){    $("div").html(result);  });

而$.post()的用法跟get的用法大同小異,沒多大的區別

文法
jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
參數 描述
url 必需。規定把請求發送到哪個 URL。
data 可選。映射或字串值。規定連同請求發送到伺服器的資料。
success(data, textStatus, jqXHR) 可選。請求成功時執行的回呼函數。
dataType

可選。規定預期的伺服器響應的資料類型。

預設執行智能判斷(xml、json、script 或 html)。

使用執行個體:

$.post("demo_ajax_gethint.asp",{suggest:txt},function(result){    $("span").html(result);  });

要了,接下來重點我們介紹$.ajax()這個方法,前面的兩個方法可以說是從這個方法進行延伸的,將其進行簡化,演變出來的。下面我們同樣的先來看一下$.ajax()的文法、參數。

文法
jQuery.ajax([settings])
參數 描述
settings

可選。用於配置 Ajax 請求的索引值對集合。

可以通過 $.ajaxSetup() 設定任何選項的預設值。

運用執行個體:

$.ajax({ url: "test.html", context: document.body, success: function(){        $(this).addClass("done");      }});

至於更加詳細的參數資訊大家可以點擊此連結進行預讀:http://www.w3school.com.cn/jquery/ajax_ajax.asp或者我在接下面的代碼中進行部分的講解。

好了,例如我有個jsp檔案SearchVender.jsp。裡面有幾個輸入框:

<div class="registerinput" style="display: none;margin-top: 40px;">  <form style="margin-right: 50px;text-align: right;">  <label style="font-size: 1em">名稱</label><input type="text" name="registername" title="請輸入你的真實姓名"><br>  <label style="font-size: 1em">郵箱</label><input type="text" name="registeremail" title="請輸入郵箱地址,格式:xxx@xxx.com/cn"><br>  <label style="font-size: 1em">密碼</label><input type="password" name="registerpassword" title="請輸入密碼,密碼內不能有非法字母,eg:#、$、&..."><br>  <label style="font-size: 1em">連絡人</label><input type="text" name="registerconnect" title="請輸入連絡人名字"><br>  <label style="font-size: 1em">聯絡電話</label><input type="text" name="registerphone" title="請輸入連絡人的電話號碼"><br>  <label style="font-size: 1em">地址</label><input type="text" name="registeraddress" title="請輸入你目前的居住地址"><br>  <label style="font-size: 1em">郵編</label><input type="text" name="registerpost" title="請輸入你目前的居住地址的郵編">  </form>  <!--<input type="button" name="yes" value="確定" style="margin-top: 30px;">-->  </div>

同時又有個點擊的按鈕button

而我在script中的代碼,當我點擊按鈕時

function usertoregister(){var name=$("input[name='registername']").val().trim();var email=$("input[name='registeremail']").val().trim();var password=$("input[name='registerpassword']").val().trim();var connect=$("input[name='registerconnect']").val().trim();var phone=$("input[name='registerphone']").val().trim();var address=$("input[name='registeraddress']").val().trim();var post=$("input[name='registerpost']").val().trim();var obj=new registerobj(name,password,email,connect,phone,address,post);var jsonstring=JSON.stringify(obj);$.ajax({type:"POST",url:"SearchVenderRegisterServlet",async:false,data:jsonstring+"\n",success:function(data,textStatus){if(textStatus=="success"){alert(data);$("#loginorregister").dialog("close");}}});}

就會調用usertoregister()這個方法,此方法先擷取各個輸入框內的值

var name=$("input[name='registername']").val().trim();var email=$("input[name='registeremail']").val().trim();var password=$("input[name='registerpassword']").val().trim();var connect=$("input[name='registerconnect']").val().trim();var phone=$("input[name='registerphone']").val().trim();var address=$("input[name='registeraddress']").val().trim();var post=$("input[name='registerpost']").val().trim();

然後產生一個javascript對象

var obj=new registerobj(name,password,email,connect,phone,address,post);

當然,此對象你也得在javascript內聲明

function registerobj(name,password,email,connect,phone,address,post){    this.name=name;    this.password=password;    this.email=email;    this.connect=connect;    this.phone=phone;    this.address=address;    this.post=post;    }

然後我們將javascript對象轉換成json字串

var jsonstring=JSON.stringify(obj);

接下來就要用到今天的主角,$.ajax()咯,

$.ajax({type:"POST",url:"SearchVenderRegisterServlet",async:false,data:jsonstring+"\n",success:function(data,textStatus){if(textStatus=="success"){alert(data);$("#loginorregister").dialog("close");}}});

這部分的代碼中的參數含義是:

type指明發送資料以什麼方式進行發送,有兩種方法:get和post兩種方法,假如我們不聲明的話,系統會自動的幫我們判斷的。

async:false,

則是聲明該請求時非同步還是同步的,true代表非同步,false代表同步,預設為true。

data:jsonstring+"\n",

你要傳輸的資料

success:function(data,textStatus){if(textStatus=="success"){alert(data);$("#loginorregister").dialog("close");}}

當請求成功時執行的函數,其中data代表返回的資料,textStatus代表返回的狀態:"success"、"fail"

要了jsp端的代碼已經看完了,接下來我們來看一下servlet端的代碼

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String json=getJsonString(request);System.out.println(json);JSONObject jsonObject=JSONObject.fromObject(json);User user=(User) JSONObject.toBean(jsonObject, User.class);System.out.println("username:"+user.getName());out.write("success");out.flush();out.close();}protected String getJsonString(HttpServletRequest request){StringBuffer json=new StringBuffer();try {String line=null;BufferedReader reader = request.getReader();while((line=reader.readLine())!=null){json.append(line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return json.toString();}

再次過程中我們需要匯入JSON的jar包和其輔助包,至於有需要的人可以到我的資源下載
我已經上傳上去了,其他的代碼我也沒什麼好說的,只是一些簡單的流操作,主要的是這兩句

JSONObject jsonObject=JSONObject.fromObject(json);User user=(User) JSONObject.toBean(jsonObject, User.class);

頭一句的作用是將一個json字串轉換成一個json對象,第二句則是將一個json對象轉換成一個java對象。當然,毫無疑問的,我們同樣的也必須要一個對應的java對象。

public class User {private String name=null;private String password=null;private String email=null;private String connect=null;private String phone=null;private String address=null;private String post=null;public User(String name, String password, String email, String connect,String phone, String address, String post) {this.name = name;this.password = password;this.email = email;this.connect = connect;this.phone = phone;this.address = address;this.post = post;}public User() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getConnect() {return connect;}public void setConnect(String connect) {this.connect = connect;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getPost() {return post;}public void setPost(String post) {this.post = post;}}

好了,全部代碼就已經結束咯~~~呵呵呵呵呵呵呵呵呵。。。飄過,睡去咯。。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.