jQuery Ajax â Servletséæï¼æå»ºå®æ´çåºç¨ç¨åº
ç½ä¸æå¾å¤æç¨ï¼å®ä»¬è§£éäºæå ³ä½¿ç¨servletåJSP页é¢è¿è¡Java Webå¼åçä¸äºç¥è¯ï¼ä½æ¯ï¼æä»æ¥æ²¡ææ¾å°å¯¹äºåå¦è æ¥è¯´è¶³å¤ç®æ´ï¼ç®åçæç¨ã è¿æ ·çæç¨åºè¯¥è§£éå建ä¸ä¸ªç®åçWebåºç¨ç¨åºçæ´ä¸ªè¿ç¨ï¼å æ¬å端ï¼åç«¯ï¼æéè¦çæ¯ï¼äººä»¬å¯ä»¥ç¨æ¥ä¸å®ä»¬ä¸¤è 交äºçæ¹å¼ ã ä» ä» å±ç¤ºå¦ä½ä»æå¡å¨è·åä¿¡æ¯è¿ä¸å¤ï¼äºè§£å¦ä½ä»¥ç»æåæ¹å¼åºåä¿¡æ¯ä»¥åç¥éå¦ä½éè¿åºç¨ç¨åºç¯å¢å¯¹å端è¿è¡æ´æ¹ä¹å¾éè¦ã
æä»¬å¨æ¬æä¸å¸æå®ç°çæ¯æå¯¼åå»ºå®æ´çâç©å ·â Webåºç¨ç¨åºçæ´ä¸ªè¿ç¨ã ä»æç§æä¹ä¸è¯´ï¼å®æ¯ä¸ä¸ªâç©å ·âåºç¨ç¨åºï¼å®åªå两件äºï¼å¹¶ä¸æä»¬æ²¡æä½¿ç¨ä»»ä½é¢å¤çåè½æ¥ä½¿ç¯å¢å徿¼äº®ã 该åºç¨ç¨åºçç®çå¾ç®åï¼
- æ·»å ä¸ä¸ªå¸¦æä¸è¾å表çä¹éåç§°ï¼ç¨éå·åéï¼ï¼ç¶åæâæäº¤âæé®å°å ¶æ·»å å°æ°æ®åºä¸ã
- æâæ¾ç¤ºä¹éï¼â æé®ä»¥è·åä¹éåè¡¨ï¼æâæ¾ç¤ºä¹éåä¸è¾ï¼â æé®ä»¥è·å带æå ¶ä¸è¾çä¹éå表ã
该åºç¨ç¨åºçå¤è§æ¯è£¸æºè¶å¥½ ï¼ä½å ¶èåçä»£ç æ¯ä½ éè¦å¼å§å建èªå·±ç卿Webåºç¨ç¨åºï¼è¿æ¯æé常称为CRUDåºç¨ç¨åºçä¸åï¼C reateï¼R EADï¼U PDATEï¼d elete ï¼ã ä¹æä»¥è¿æ ·ç§°å¼å®ä»¬æ¯å 为å®ä»¬çææåè½é½å¯ä»¥æ½è±¡ä¸ºè¿äºéå¸¸åºæ¬çå½ä»¤ã
å¨éæ¥å建åºç¨ç¨åºä¹åï¼è®©æä»¬çä¸ä¸æ¬ç¤ºä¾ä¸å°è¦ä½¿ç¨çææå·¥å ·ï¼
- èæç¥
- Java 7
- Tomcat 7ï¼Webåºç¨ç¨åºæå¡å¨ï¼
- Gson 2.3ï¼Google Javaåºï¼
- jQuery 2.1.1ï¼JavaScriptåºï¼
1.å端ï¼JSP页é¢ï¼
è¿é没æå¤ªå¤è¦è¯´çã 妿éµå¾ªå ¶ä»ç¤ºä¾ï¼æ¨å°ç¥éå¦ä½å¨Eclipseä¸è½»æ¾å建Dynamic Web Project ï¼ä»¥åå¦ä½å¨æä»¶å¤¹WebContentå å建index.jsp页é¢ã è¿å°æ¯æä»¬åºç¨ç¨åºç主页ï¼å¹¶ä¸æä»¬å°ä¸ä¼ä½¿ç¨ä»»ä½å ¶ä»é¡µé¢ã å½ç¶ï¼å®æ»æ¯åå³äºæ¨éè¦å建çåºç¨ç¨åºçç±»åï¼ä½æ¯å¯¹äºæä»¬çéæ±èè¨ï¼ä¸é¡µå°±è¶³å¤äºã
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Ajax - Servlets Integration Example</title> <!-- Load the scripts needed for the application. --> <script type="text/javascript" src="resources/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="resources/buttonEventsInit.js"></script> <script type="text/javascript" src="resources/resultsPrinter.js"></script> <script type="text/javascript" src="resources/insertBandInfo.js"></script> </head> <body> <h1>Ajax - Servlets Integration Example</h1> <p>This is an example of how to use Ajax with a servlet backend.</p></br> <h3>Select a button to get the relevant information.</h3> <!-- Buttons that will call the servlet to retrieve the information. --> <button id="bands" type="button">Show bands!</button> <button id="bands-albums" type="button">Show bands and albums!</button> <!-- We need to have some empty divs in order to add the retrieved information to them. --> <div id="band-results"></div></br></br> <div id="bands-albums-results"></div></br></br> <h3>Add the band information and press submit!</h3> <h4>Band name: </h4><input type="text" id="band-name-input" value=""><br> <h4>Albums: </h4><input type="text" id="album-input" value="">(Separated by commas)<br> <input type="submit" id="submit-band-info" value="Submit"> </body> </html>
å æ¤ï¼æ¨å¯ä»¥çå°é常ç®åçä¸è¥¿ã æä»¬å è½½æéçjavascriptæä»¶ï¼å ¶ä¸åªæä¸ä¸ªæ¯å¤é¨JQuery ã JQueryæ¯ä¸ä¸ªä¼æå¨ç¥çJavascriptåºï¼å®åè½å¼ºå¤§ ã å®ä½¿æä»¬è½å¤è½»æ¾è·åæå ³é¡µé¢å个å ç´ çä¿¡æ¯ï¼ä»¥åå°äºä»¶ç»å®å°è¿äºå ç´ ã 卿¤å¤è·å以ä¸ä»£ç 段ä½ä¸ºä¸ä¸ªç®å示ä¾ï¼
$("#my-button").click(function() { alert("My button was clicked!"); });
æ¤ä»£ç æ®µçæææ¯ï¼â åå»ID为â my-buttonâçå ç´ æ¶ï¼æè¦è§¦åä¸ä¸ªå½æ°ï¼è¯¥å½æ°ä¼å建ä¸ä¸ªè¦åå¼¹åºçªå£ï¼æç¤ºâæçæé®å·²è¢«åå»ï¼âã âã å æ¤ï¼æä»¬å°æ§è¡æäºæä½çæ´ä¸ªå½æ°ä½ä¸ºäºä»¶ç»å®çåæ°ä¼ é ã ç¨åæä»¬å°è§£éæå ³JQueryçæ´å¤ä¿¡æ¯ã æ¨å¯ä»¥å¨æ¤å¤ä¸è½½JQuery ã
è¿éæäºäºæ è¦èèï¼
- æä»¬å·²ä¸ºå°è¦ä½¿ç¨çææéè¦å ç´ æå®äºIDã å æ¤ï¼ æé® ï¼ è¾å ¥æ¡å空ç<div>å ç´ é½æå¯ä¸çIDã
- æä»¬å建äº2个å å«ç»æç空<div>å ç´ ã 妿æ¨éè¦ä¸ä¸ªå®¹å¨æ¥åæ¾ä¸è¥¿å¹¶ä¸éè¦å°è¯¥å®¹å¨å§ç»æ¾ç½®å¨ç¹å®ä½ç½®ï¼é常ä¼éµå¾ªæ¤è®¾è®¡æ¨¡å¼ã è¿æ ·ï¼æä»¬å°±æ 鿣æ¥ä¿¡æ¯çæ¾ç½®ä½ç½®ï¼å 为页é¢ä¸ä¸ºæ¤ä¿çäºä¸ä¸ªä½ç½®ã åæ ·ï¼ç¬¬äºä¸ªdivï¼å¸¦æä¸è¾çä¹éï¼å°å§ç»ä½äºç¬¬ä¸ä¸ªdivï¼ä» ä¹éåç§°ï¼ä¹ä¸ã 彿们æä¸ä» ä¹éä¿¡æ¯çæé®æ¶ï¼å®å°è¢«æ·»å å°å¸¦æä¸è¾çä¹éé¡¶é¨ã
2.åæå¡å¨è¯¢é®æ°æ®ï¼å端åå端ï¼
2.1ä»å端使ç¨AjaxååºGET请æ±ã
å æ¤ï¼æä»¬éè¦åç第ä¸ä»¶äºæ¯æ¾å°ä¸ç§æ¹æ³æ¥è¯¢é®æå¡å¨æéçæ°æ®ï¼å¨è¿ç§æ åµä¸ä¸ºä¹éåç§°æä¹éåä¸è¾ã æä»¬å·²ç»å¨åèªçæé®ä¸æ·»å äºä¸¤ä¸ªIDï¼ âä¹éâåâä¹éåä¸è¾â ï¼ï¼å æ¤æä»¬éè¦å°äºä»¶ç»å®å°å®ä»¬ï¼ä»¥ä¾¿æ¯æ¬¡æä¸æé®æ¶é½å¯ä»¥è°ç¨æå¡å¨ ã 为æ¤ï¼æä»¬å°ä½¿ç¨ä¸äºJavascriptï¼å å«å¨buttonEventsInit.jsæä»¶ä¸ã
注æï¼æ¯ä¸ªJavasciptæä»¶é½ä¿åå¨ç®å½WebContent / resourcesä¸ï¼ä»¥ä¾¿æäºè®¿é®æµè§å¨çæéã
buttonEventsInit.js
// When the page is fully loaded... $(document).ready(function() { // Add an event that triggers when ANY button // on the page is clicked... $("button").click(function(event) { // Get the button id, as we will pass it to the servlet // using a GET request and it will be used to get different // results (bands OR bands and albums). var buttonID = event.target.id; // Basic JQuery Ajax GET request. We need to pass 3 arguments: // 1. The servlet url that we will make the request to. // 2. The GET data (in our case just the button ID). // 3. A function that will be triggered as soon as the request is successful. // Optionally, you can also chain a method that will handle the possibility // of a failed request. $.get('DBRetrievalServlet', {"button-id": buttonID}, function(resp) { // on sucess // We need 2 methods here due to the different ways of // handling a JSON object. if (buttonID === "bands") printBands(resp); else if (buttonID === "bands-albums") printBandsAndAlbums(resp); }) .fail(function() { // on failure alert("Request failed."); }); }); });
让æä»¬è§£éä¸ä¸è¿éåççæ åµã 页é¢å è½½å ï¼æä»¬è¿æ ·åæ¯ä¸ºäºç¡®ä¿ææå ç´ é½å°±ä½ï¼ï¼æä»¬å°clickäºä»¶ç»å®å°é¡µé¢ä¸çæ¯ä¸ªæé®å ç´ ã ä»ç°å¨å¼å§ï¼ æ¯åå»ä¸ä¸ªæé® ï¼GET请æ±å°±ä¼åéå°æå¡å¨ï¼å ¶ä¸å 嫿ä¸äºåªä¸ªæé®çä¿¡æ¯ã æå¡å¨å°åéåæ£ç¡®çååºï¼ä»¥JSON对象çå½¢å¼ï¼ç¨åæä»¬å°å¯¹æ¤è¿è¡è¯´æï¼ï¼å¹¶ä¸æä»¬å°æ ¹æ®ææä¸çæé®å¯¹è¯¥å¯¹è±¡æ§è¡ä¸åçæä½ï¼å 为æ¯ä¸ªæé®å°æ¥æ¶ç»æä¸åç JSONï¼å®¾è¯ï¼ã
æ¥çä¸é¢ç¤ºä¾ä¸æå ³åæå¡å¨ååºGET请æ±çæ£ç¡®æ¹æ³ç注éã æ¨å°éè¦æä¾URLï¼ä¹å¯ä»¥æ¯servletçURLï¼ï¼æ°æ®åå°è¢«è§¦åçåè½ï¼å¹¶å°æå¡å¨çååºï¼JSON对象ï¼ä½ä¸ºåæ° ã
2.2å¤ç请æ±å¹¶å°æ°æ®åéå客æ·ç«¯ã
é£ä¹ï¼å½æä»¬ååºè¯·æ±æ¶ï¼æå¡å¨ä¼åçä»ä¹ï¼ æä»¬å¨è¿é使ç¨äºè®¸å¤ç±»ï¼å æ¤è®©æä»¬å次记ä½ï¼æä»¬æ£å¨æå»ºä¸ä¸ªå å«ä¸¤ç§ç®å½çåºç¨ç¨åºï¼ä¹éå带æä¸è¾çä¹éã å æ¤ï¼æä»¬æ£å¨ä½¿ç¨ï¼
- MusicDatabase.javaï¼ä½¿ç¨Singleton模å¼ä»¥æä¾ä¸ä¸ªæä¹ 对象çç±»ï¼è¯¥å¯¹è±¡å°å å«éè¦åéå客æ·ç«¯çä¿¡æ¯ã
- DBRetrievalServlet.javaï¼å°ç¨äºå¤çGET请æ±å使ç¨å ¶ä»ç±»çservletï¼ æä¾å¸¦ææ¥è¯¢ä¿¡æ¯çååº ã
- BandWithAlbums.javaï¼ä¸ä¸ªç¨äºå建æ°çâæ°æ®ä¿å对象âçç±» ï¼å¨æä»¬çä¾åä¸ï¼è¯¥ç±»å å«ä¹éåç§°åä¸è¾å表ã
å æ¤ï¼è®©æä»¬æ£æ¥è¿äºç±»ä¸çæ¯ä¸ä¸ªå¹¶è§£éå®ä»¬çç¨æ³ã
DBRetrievalServlet.java
package servlets; import informationClasses.MusicDatabase; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/DBRetrievalServlet") public class DBRetrievalServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // We set a specific return type and encoding // in order to take advantage of the browser capabilities. response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); // Depending on the GET parameters, passed from the Ajax call, // we are able to differentiate the requests and call the appropriate // method. We can always use more classes for more use-cases. // The response object returns the information (as a JSON object in String form) // to the browser. String buttonID = request.getParameter("button-id"); switch (buttonID) { case "bands": response.getWriter().write(MusicDatabase .getInstance() .getBands()); break; case "bands-albums": response.getWriter().write(MusicDatabase .getInstance() .getBandsAndAlbums()); break; } } }
æä»¬å¾å°åæ°â button-idâ ï¼è¯¥åæ°å å«å¨ä»å®¢æ·ç«¯åéçä¿¡æ¯ä¸ï¼å¨è¯·æ±å¯¹è±¡ä¸ï¼ï¼å¹¶ä¸æ ¹æ®æä»¬æä¸çæé®çç±»åï¼æä»¬éè¦éè¿è°ç¨MusicDatabaseå®ä¾æ¥è·å¾ä¸åç±»åçä¿¡æ¯ãå¹¶æ¯æ¬¡è°ç¨ä¸åçæ¹æ³ã
注æï¼å便¨¡å¼
å
³äºMusicDatabaseå®ä¾â¦æä»¬ä½¿ç¨çæ¯Singletonæ¨¡å¼ ï¼è¿æå³çå 为æä»¬åªå¸ææ1个该类çå®ä¾ï¼æä»¥æä»¬ä¸ä¼éè¿èªå·±è°ç¨new
å
³é®åæ¥å建æ°å®ä¾ã ç¸åï¼æä»¬ä»MusicDatabaseç±»æ¬èº«è°ç¨ä¸ä¸ªæ¹æ³ï¼å¹¶è¦æ±ä¸ä¸ªå®ä¾ã
- 妿尿ªå建该å®ä¾ï¼æä»¬å°å建ä¸ä¸ªå®ä¾å¹¶å°å ¶è¿åã
- 妿已å建ï¼åè¿åç°æå®ä¾ã
æ æ³ä»å¤é¨è®¿é®æé 彿° ï¼ä¹æ æ³æå¤å建å¦ä¸ä¸ªå®ä¾ã æ¨å¯ä»¥å¨çº¿æ¾å°æå ³Singleton模å¼çæ´å¤ä¿¡æ¯ã
MusicDatabase.java
package informationClasses; import java.util.ArrayList; import java.util.List; import jsonObjects.BandWithAlbums; import com.google.gson.Gson; public class MusicDatabase { private List bandNames; private List bandsAndAlbums; // Singleton methods private static MusicDatabase dbInstance = null; protected MusicDatabase() { bandNames = new ArrayList<>(); bandsAndAlbums = new ArrayList<>(); } public static MusicDatabase getInstance() { if(dbInstance == null) { dbInstance = new MusicDatabase(); } return dbInstance; } public void setBandAndAlbums(String bandName, ArrayList bandAlbums) { bandNames.add(bandName); bandsAndAlbums.add(new BandWithAlbums(bandName, bandAlbums)); } public String getBands() { return new Gson().toJson(bandNames); } public String getBandsAndAlbums() { return new Gson().toJson(bandsAndAlbums); } }
æä»¬å°å¨è¿éæ£æ¥çæ¹æ³æ¯getBands()
ågetBandsAndAlbums()
ã æä»¬åªéè¦è¿ä¸¤ç§æ¹æ³ï¼å®ä»¬å°±é常ç®åï¼å 为è¿éæä¸äºå¯ä»¥å¸®å©æä»¬çäºæ
ï¼
- Gsonæ¯GoogleçJavaåºï¼å®ä½¿æä»¬è½å¤ä»Java对象轻æ¾å建JSON对象ã 该对象å¯ä»¥æ¯ä»»ä½ä¸è¥¿ï¼ä»ç®åçæ°æ®ç»æå°å
å«ä¿¡æ¯ç对象ï¼å
¶ä»æ°æ®ç»æçã卿们çä¾åä¸ï¼æä»¬æ2ä¸ªè¿æ ·çæ°æ®ç»æï¼
-
A List<String> bandNames
ï¼ä» å å«A List<String> bandNames
å½¢å¼çä¹éåç§°ã -
A List<BandWithAlbums>
ï¼å ¶ä¸å å«å¯¹è±¡ï¼å¯¹è±¡åå å«ä¹éåç§°åå ¶ä¸è¾å表ã
-
- BandWithAlbumsç±» ï¼å®ä½¿æä»¬è½å¤ä¿åæå
³ä¹éçæ´å¤ä¿¡æ¯ã 宿¯ä¸ä¸ªæ°æ®ä¿åç±»ï¼å
¶ä¸å
å«ä¹éåç§°ä½ä¸º
String
åå ¶ä¹éList<String>
ä½ä¸ºList<String>
ã éè¿è¿åæ¤å¯¹è±¡ï¼æ¨è¿å°è¿åææå ³èçä¿¡æ¯ã
æ»èè¨ä¹ï¼ä½¿ç¨å½ä»¤new Gson().toJson(Object obj)
çGsonåºå¯ä»¥å°å¤§å¤æ°å¯¹è±¡åæ°æ®ç»æè½¬æ¢ä¸ºJSONæ ¼å¼ï¼æµè§å¨å¯ä»¥éè¿Javascriptè½»æ¾ä½¿ç¨ã
注æï¼æ¨éè¦å°Gsonåºæ·»å å°ç±»è·¯å¾ä¸æè½èµ·ä½ç¨ã
BandWithAlbums.java
package jsonObjects; import java.util.ArrayList; public class BandWithAlbums { String bandName; ArrayList bandAlbums; public BandWithAlbums(String bandName, ArrayList bandAlbums) { this.bandName = bandName; this.bandAlbums = bandAlbums; } }
æ£å¦æä»¬ä¹åå·²ç»è¯´è¿çï¼è¿æ¯ä¸ä¸ªç®åçæ°æ®ä¿åç±»ã ä»æç§æä¹ä¸è¯´ï¼å®ä»£è¡¨âä¹éâï¼å ¶ä¸å å«ä¹éçåç§°åä¸è¾ã
2.3å°æ°æ®åç°ç»æµè§å¨ã
å æ¤ï¼ä¸æ¦æäºæéçæ°æ®ï¼å°±å¯ä»¥å¨buttonEventsInit.jsæä»¶ä¸çå°ï¼æä»¬å¯ä»¥éæ©è°ç¨ä¸¤ç§ä¸åçæ¹æ³ï¼å ·ä½åå³äºè¿è¡è°ç¨çæé®çIDã æä»¬å°å±ç¤ºè¿ä¸¤ç§æ¹æ³å¨åä»ä¹ï¼ä»¥åå¦ä½å°æ°æ®å±ç¤ºç»æµè§å¨ ã
resultsPrinter.js
// Both those functions get a json object as an argument, // which itself also holds other objects. // 1. The first function is supposed to get an object // containing just a list of band names. // 2. The second function is supposed to get an object containing // bands with albums, which essentially means a list of objects // which hold (1) a band name and (2) a list of albums. function printBands(json) { // First empty the <div> completely and add a title. $("#band-results").empty() .append("<h3>Band Names</h3>"); // Then add every band name contained in the list. $.each(json, function(i, name) { $("#band-results").append(i + 1, ". " + name + " </br>"); }); }; function printBandsAndAlbums(json) { // First empty the <div> completely and add a title. $("#bands-albums-results").empty() .append("<h3>Band Names and Albums</h3>"); // Get each band object... $.each(json, function(i, bandObject) { // Add to the <div> every band name... $("#bands-albums-results").append(i + 1, ". " + bandObject.bandName + " </br>"); // And then for every band add a list of their albums. $.each(bandObject.bandAlbums, function(i, album) { $("#bands-albums-results").append("--" + album + "</br>"); }); }); };
为äºäºè§£è¿äºåè½å¦ä½å·¥ä½ï¼æä»¬å¿ é¡»çä¸ä¸æå¡å¨è¿åç»å®¢æ·ç«¯çååºå¯¹è±¡ã å¨ç¬¬ä¸ç§æ åµä¸ï¼æä»¬ææä» ååºä¹éåç§°ï¼å æ¤ææç对象å°åªæ¯å表ï¼
["The Beatles", "Metallica"]
å¦ä¸æ¹é¢ï¼å¨ç¬¬äºç§æ åµä¸ï¼æä»¬å¸ææ¥æ¶å ¨æ³¢æ®µä¿¡æ¯ï¼å¨è¿ç§æ åµä¸ï¼json对象å°å¦ä¸æç¤ºï¼
[ { bandName: "The Beatles", bandAlbums: ["White Album", "Let it be"] }, { bandName: "Metallica", bandAlbums: ["St Anger", "The Black Album"] } ]
å æ¤ï¼æä»¬éè¦ä¸¤ç§ä¸åçæ¹å¼å¤ç请æ±ã 使¯ï¼å¨æ¯ç§æ
åµä¸ï¼æä»¬å°è¦ä½¿ç¨çdiv empty()
ï¼å¹¶ä½¿ç¨ä¸äºé常æ¹ä¾¿çJQuery彿°æ·»å 仿å¡å¨è·åçä¿¡æ¯ã
è¿æ ·ï¼æä»¬çåºç¨ç¨åºç第ä¸é¨å就宿äºã æ¥çå±å¹å¿«ç §ä»¥æ¥çç»æã
3.ä»ç¨æ·è¾å ¥ï¼å端ååç«¯ï¼æ´æ°æå¡å¨
3.1使ç¨AjaxååºPOST请æ±ã
å¨è¿ä¸é¨åä¸ï¼æä»¬å°ç ç©¶å¦ä½å°æ°æ®åéå°æå¡å¨ ã 卿¬æç¨çä¸åé¨åï¼æä»¬å·²ç»éè¿å¤çGET请æ±äºè§£äºå·¥ä½åçï¼å¹¶ä¸è¿éçæ¥éª¤å¹¶æ²¡æä»ä¹ä¸åï¼å¯ä¸çä¾å¤æ¯å è®¸ç¨æ·ä¸ºåºç¨ç¨åºæä¾è¾å ¥ ã 让æä»¬çä¸ä¸æä»¬æ£å¨ä½¿ç¨ç代ç ä»¥åæ¯ä¸ªæä»¶çåè½ã
insertBandInfo.js
$(document).ready(function() { // Add an event that triggers when the submit // button is pressed. $("#submit-band-info").click(function() { // Get the text from the two inputs. var bandName = $("#band-name-input").val(); var albumName = $("#album-input").val(); // Fail if one of the two inputs is empty, as we need // both a band name and albums to make an insertion. if (bandName === "" || albumName === "") { alert("Not enough information for an insertion!"); return; } // Ajax POST request, similar to the GET request. $.post('DBInsertionServlet',{"bandName": bandName, "albumName": albumName}, function() { // on success alert("Insertion successful!"); }) .fail(function() { //on failure alert("Insertion failed."); }); }); });
妿æ¨éµå¾ªäºæç¨çä¸ä¸é¨åï¼é£ä¹å¾å®¹æçè§£æä»¬å¨è¿éæåçäºæ ã å¦ä¸ä¸ªåå»äºä»¶ï¼ç°å¨ä» éå¯¹â æäº¤âæé®çç¹å®IDï¼å¨æ£æ¥ä¸¤ä¸ªè¾å ¥æ¡æ¯å¦ç¡®å®æè¾å ¥ä¹åï¼è¯¥äºä»¶ä¼ååºPOST请æ±ï¼å为æ¤ç®çä¸é¨ä½¿ç¨çæ°Servletï¼åéæ°æ®æä»¬æ³è¦çï¼ä¹éåç§°åä¸è¾å表ï¼ã
3.2å°ç¨æ·è¾å ¥ä¿å卿们çâæ°æ®åºâä¸ã
DBInsertionServlet.java
package servlets; import informationClasses.MusicDatabase; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/DBInsertionServlet") public class DBInsertionServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String, String[]> bandInfo = request.getParameterMap(); // In this case here we are not using the data sent to just do different things. // Instead we are using them as information to make changes to the server, // in this case, adding more bands and albums. String bandName = Arrays.asList(bandInfo.get("bandName")).get(0); String albums = Arrays.asList(bandInfo.get("albumName")).get(0); MusicDatabase.getInstance() .setBandAndAlbums(bandName, getAlbumNamesFromString(albums)); // return success response.setStatus(200); } // Split the album String in order to get a list of albums. private ArrayList getAlbumNamesFromString(String albums) { return new ArrayList(Arrays.asList(albums.split(","))); } }
å½Servletæ¶å°è¯·æ±æ¶ï¼å®å°ä»è¯·æ±æ å°ä¸æåbandNameï¼å¹¶å
å«å
å«å±çéåç§°çString
ã 彿¾å°éå·æ¶ï¼æä»¬éè¿å°String
åæå¤ä¸ªé¨åæ¥å建ä¸è¾åè¡¨ã æåï¼æä»¬è°ç¨MusicDatabaseå®ä¾ï¼å¨è¯¥å®ä¾ä¸æ·»å ä¹éåç§°åä¸è¾å表ï¼å¦ææ¨ä»ä»¥åæ£æ¥ä¸ä¸ç±»å®ä¹ï¼åå¯ä»¥çå°ï¼
- æä»¬å°ä¹éåç§°æ·»å å°
bandNames
å表ä¸ã - æä»¬å建ä¸ä¸ªæ°çBand对象ï¼ä½¿ç¨åç§°åä¸è¾å表ï¼ï¼å¹¶å°å
¶æ·»å å°
bandsWithalbums
å表ä¸ã
ä¹åï¼è¯¥servlet宿ï¼å¹¶å°æåç¶æååºåéå客æ·ç«¯ã æä»¬å·²å°ææå 容添å å°å表ä¸ï¼å¹¶ä¸å¯ä»¥éæ¶æJSONæ ¼å¼åéã 䏾便¥è¯´ï¼è®©æä»¬çç妿æèªå·±æ·»å ä¸ä¸ªæ°ä¹éä¼åçä»ä¹ã
è¿ä¸ªæ°ä¹éå·²ç»å¨æçâæ°æ®åºâä¸ï¼å¹¶è¦æ±å次æ¥ç该信æ¯åï¼å®å°±å¨é£éï¼
4.ä¸è½½é¡¹ç®
è¿æ¯Ajax â Servletséæç示ä¾ã ææ³æ³æå¯ä»¥å¸®å©æ¨å ¨é¢äºè§£å¦ä½å®ç°Webåºç¨ç¨åºçæ¯ä¸ªé¨åï¼å端-å端ï¼ï¼ä»¥åå°å个é¨åè¿æ¥å¨ä¸èµ·ä»¥å建å è®¸ç¨æ·å¨å ¶ä¸è¿è¡è¾å ¥åæ´æ¹ç软件çæç®åæ¹æ³ãæå¡å¨ä»¥å客æ·ç«¯ï¼
æ¨å¯ä»¥å¨æ¤å¤ä¸è½½æ¤ç¤ºä¾ç宿´æºä»£ç ï¼ AjaxServletsIntegration