第十一周学习

老师开始是让我们总结一下近期学习情况(我们在这几周中学习了动态网站的基础,了解了如何在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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值