本Demo实现的源自对于天气预报API的好奇,http://www.thinkpage.cn/weather/api/该网址是介绍API的请求方式,http://www.weather.com.cn/data/sk/101010100.html是请求地址,虽然两者不是一个数据库,但是实现原理是一致的,均通过json传递数据,本文将阐述实现过程。实现效果为http://www.weather.com.cn/data/sk/101010100.html一致
一、开发工具:Myeclipse+Mysql
二、实现技术:Servlet+json(本项目之初因为对于servlet不是很熟悉,所以以为filter可以更方便的实现,最后经过学习找到简易的实现途径;开始想到用JavaBean,或者是将javaBean放到json中,但是最终显示的数据先后顺序并不相同,所以最终用json.put方法将数据放入)
三、需要的jar包:
四、项目(Web Project)结构图
五、项目源代码:
1.weatherapi.sql
/*
MySQL Data Transfer
Source Host: localhost
Source Database: weather
Target Host: localhost
Target Database: weather
Date: 2012-7-26 15:00:00
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for weathertable
-- ----------------------------
CREATE TABLE `weathertable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`city` varchar(30) NOT NULL,
`cityid` varchar(20) NOT NULL,
`temp` varchar(5) NOT NULL,
`wd` varchar(10) NOT NULL,
`ws` varchar(5) NOT NULL,
`sd` varchar(5) NOT NULL,
`wse` varchar(5) NOT NULL,
`time` time NOT NULL,
`radar` varchar(30) NOT NULL,
`isradar` tinyint(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `weathertable` VALUES ('1', '北京', '101010100', '27', '东南风', '2级', '76%', '2', '00:00:08', 'JC_RADAR_AZ9010_JB', '1');
2.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>
JSONServlet
</servlet-name>
<servlet-class>
p.JSONServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
JSONServlet
</servlet-name>
<url-pattern>
/*
</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
3.DBUtil.java
package p;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import net.sf.json.JSON;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class DBUtil {
public static Connection getConn(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:MySQL://127.0.0.1:3306/weather";
String user = "root";
String password = "root";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public JSON getWeather(String cityId){
JSONObject returnJson = null;
JSONObject object = null;
String sql = "select * from weathertable where cityid = '"+ cityId + "'";
Connection conn = DBUtil.getConn();
ResultSet rs = null;
Statement stmt = null;
try {
if (!conn.isClosed()) {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()){
returnJson = new JSONObject();
object = new JSONObject();
object.put("city", rs.getString("city"));
object.put("cityid", rs.getString("cityid"));
object.put("temp", rs.getString("temp"));
object.put("WD", rs.getString("wd"));
object.put("WS", rs.getString("ws"));
object.put("SD", rs.getString("sd"));
object.put("WSE", rs.getString("wse"));
object.put("time", rs.getString("time"));
object.put("isRadar", rs.getString("isRadar"));
object.put("Radar", rs.getString("radar"));
returnJson.put("weatherinfo", object);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
conn.close();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returnJson;
}
}
4.JSONServlet.java
package p;
import java.io.*;
import java.sql.Time;
import javax.servlet.*;
import javax.servlet.http.*;
import net.sf.json.JSON;
public class JSONServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String requestPath = request.getPathInfo();
String url = requestPath.substring(1, requestPath.length()-5);
DBUtil db = new DBUtil();
JSON reps = db.getWeather(url);
PrintWriter out = response.getWriter();
out.println(reps);
}
}
六、效果图