ServletDemo---模拟天气预报API(JSON数据)


本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);
	}
}


六、效果图

猜你喜欢

转载自blog.csdn.net/zishuiyi/article/details/7789007