本次使用的是 Mysql 数据库,表中有已以几条记录,我们通过 Servlet 读取数据,并返回为 JSON 格式的数据。
利用 Servlet 访问数据库返回 JSON 数据
本次使用的是 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 文件中加入如下代码
|
1
2
3
4
5
6
7
8
9
10
|
<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 即可。

