本次使用的是 Mysql 數據庫,表中有已以幾條記錄,我們通過 Servlet 讀取數據,並返回為 JSON 格式的數據。
1. 新建工程文件,項目結構如圖
用到的 jar 包下載地址 http://files.cnblogs.com/files/boguse/jar.zip
由於Eclipse web 項目中,當執行 Class.forName("om.mysql.jdbc.Driver");時 不會去查找驅動的。所以本實例中我們需要把 mysql-connector-java-5.1.39-bin.jar 拷貝到 WEB-INF 下 lib 目錄。
2. Servlet 編寫
Servlet的定義:Servlet(Server Applet)-全稱Java Servlet,是用Java編寫的服務器端程序。 其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。 Servlet是100%運行在服務器端,為客戶端請求作出響應的純java應用程序。
1 package TestJson; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.sql.*; 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import net.sf.json.JSONArray; 11 import net.sf.json.JSONObject; 12 13 14 public class Test extends HttpServlet { 15 private static final long serialVersionUID = 1L; 16 17 public Test() { 18 super(); 19 // TODO Auto-generated constructor stub 20 } 21 22 /** 23 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 24 */ 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 26 27 // 設置響應內容類型 28 // 設置響應內容類型 29 response.setContentType("text/json; charset=utf-8"); 30 PrintWriter out = response.getWriter(); 31 32 33 try { 34 35 Class.forName("com.mysql.jdbc.Driver"); 36 Connection connect = DriverManager.getConnection( 37 "jdbc:mysql://localhost:3306/test?useSSL=false","map","maptest"); 38 39 Statement stmt = connect.createStatement(); //創建Statement對象 40 String sql; 41 sql = "SELECT * FROM admininfo"; 42 ResultSet rs = stmt.executeQuery(sql); 43 JSONArray jsonarray = new JSONArray(); 44 JSONObject jsonobj = new JSONObject(); 45 // 展開結果集數據庫 46 while(rs.next()){ 47 // 通過字段檢索 48 jsonobj.put("管理員", rs.getString("Aname")); 49 jsonobj.put("密碼", rs.getString("Apwd")); 50 jsonobj.put("等級", rs.getString("Alevel")); 51 52 jsonarray.add(jsonobj); 53 } 54 // 輸出數據 55 out = response.getWriter(); 56 57 out.println(jsonarray); 58 // 完成后關閉 59 rs.close(); 60 stmt.close(); 61 connect.close(); 62 }catch (Exception e) { 63 out.print("get data error!"); 64 e.printStackTrace(); } 65 66 } 67 68 /** 69 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 70 */ 71 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 72 // TODO Auto-generated method stub 73 doGet(request, response); 74 } 75 }
3. 配置文件(web.xml)
想要運行該 Servlet,需要在web容器里注冊上面的 Servlet,在 web.xml 文件中加入如下代碼
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>TestJson.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<!--瀏覽器中輸入的url,可以隨意取名 但是注意加"/" -->
<url-pattern>/Test</url-pattern>
</servlet-mapping>
4. 將項目添加至 Tomcat ,並運行 Tomcat
現在調用這個 Servlet,輸入鏈接:http://localhost:8080/TestDemo/Test ,將顯示以下響應結果:
我當初遇到了這個問題,Tomcat 運行后無法正常訪問 Servlet ,然后發現是應為 Servlet 沒有編譯,這時需要將 Ecplise 設置為自動編譯,然后重啟 Ecplise 即可。