老师开始是让我们总结一下近期学习情况(我们在这几周中学习了动态网站的基础,了解了如何在Intellij中如何创建Web项目,了解了JSP元素和隐含对象,通过这些元素,我们实现了一个登陆注册页面,通过隐含对象实现了登陆注册的校验;学习了如何访问数据库,修改了登陆注册项目。在这几周学习中遇到了很多问题,开始是不会创建WEB项目,tomcat出现错误;后面就是代码逻辑错误,单词打错这些。总结了一下自身的不足,Java基础没有好好,上课有时候开小差,跟着老师敲代码的时候有时候也不认真,下来没有好好练习,课后没有拿跟多的时间学习。改正的是,上课认真的跟着老师的讲课节奏走,课下花时间巩固和预习,把上课老师讲的知识,转变成自己的知识。)
Java Web应用小案例:查询城市天气信息
index.jsp
`<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
query_weather.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查询城市天气</title>
</head>
<body>
<h3>查询城市天气</h3>
<form action="do_query_weather.jsp" method="get">
输入城市名:<input type="text" name="city_name">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
do_query_weather.jsp
<%@ page import="java.net.URL" %>
<%@ page import="java.net.HttpURLConnection" %>
<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="org.json.JSONObject" %>
<%@ page import="org.json.JSONArray" %>
<%@ page import="org.json.JSONException" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>显示城市天气信息</title>
</head>
<body>
<%!
/**
* 获取城市代码
*
* @param cityName
* @return 城市代码
*/
public String getCityCode(String cityName) {
// 定义城市代码
String cityCode = "";
try {
// 定义url字符串
String strUrl = "http://toy1.weather.com.cn/search?cityname=" + URLEncoder.encode(cityName, "utf-8");
// 创建URL对象
URL url = new URL(strUrl);
// 利用URL对象获取HTTP连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 建立物理连接
conn.connect();
// 获取响应码
int responseCode = conn.getResponseCode();
// 判断连接是否成功
if (responseCode == HttpURLConnection.HTTP_OK) { // 200
// 获取字节输入流
InputStream is = conn.getInputStream();
// 定义字节数组用于保存字节输入流的全部内容
byte[] buffer = new byte[is.available()];
// 判断城市是否存在
if (is.available() > 4) {
// 读取字节输入流全部信息,保存到buffer
is.read(buffer);
// 获取响应信息字符串
String response = new String(buffer, "utf-8");
// 截取出城市代码
cityCode = response.substring(10, 19);
}
}
} catch (IOException e) {
e.printStackTrace();
}
// 返回城市代码
return cityCode;
}
/**
* 通过城市名获取天气信息
*
* @param cityName
* @return 天气信息
*/
public HashMap<String, String> getWeatherInfo(String cityName) throws JSONException {
// 定义天气信息哈希映射
HashMap<String, String> weather = new HashMap<>();
try {
// 获取城市代码
String cityCode = getCityCode(cityName);
// 定义url字符串
String strUrl = "http://t.weather.sojson.com/api/weather/city/" + cityCode;
// 创建URL对象
URL url = new URL(strUrl);
// 创建http连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 建立连接
connection.connect();
// 获取响应码
int code = connection.getResponseCode();
// 判断是否连接成功
if (code == 200) {
// 获取字节输入流
InputStream is = connection.getInputStream();
// 创建字节数组用于保存响应信息
byte[] buffer = new byte[is.available()];
// 读取字节输入流全部信息
is.read(buffer);
// 获取响应信息字符串
String response = new String(buffer, "utf-8");
// 将json字符串转换成json对象
JSONObject weatherInfoJsonObj = new JSONObject(response);
System.out.println(weatherInfoJsonObj);
JSONObject cityInfoJsonObj = new JSONObject(weatherInfoJsonObj.getString("cityInfo"));
weather.put("城市:", cityInfoJsonObj.getString("parent") + " " + cityInfoJsonObj.getString("city") + "[" + cityCode + "]");
JSONArray forcastJsonArr = new JSONArray(new JSONObject(weatherInfoJsonObj.getString("data")).getString("forecast"));
weather.put("时间:", weatherInfoJsonObj.getString("time") + " " + forcastJsonArr.getJSONObject(0).getString("week"));
weather.put("温度:", forcastJsonArr.getJSONObject(0).getString("high") + " " + forcastJsonArr.getJSONObject(0).getString("low"));
weather.put("天气:", forcastJsonArr.getJSONObject(0).getString("type"));
} else {
weather.put("错误:", "[" + cityName + "]不存在!");
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
// 返回天气信息哈希映射
return weather;
}
%>
<%
// 设置请求对象字符编码
request.setCharacterEncoding("utf-8");
// 获取表单提交的数据(城市名)
String cityName = request.getParameter("city_name");
// 输出天气信息
HashMap<String, String> weather = getWeatherInfo(cityName);
for (String key: weather.keySet()) {
out.print(key + weather.get(key) + "<br/>");
}
%>
</body>
</html>