SpringMVC结合天气api实现天气查询

发布时间 - 2026-01-11 00:58:51    点击率:

本实例实现在jsp页面实现查询全国城市天气预报的功能,供大家参考,具体内容如下

实例目录:


实现效果:




具体思路:

从和风天气api那里取得具体城市的api接口,获取json数据,再对json数据进行解析。

获取json数据:

package com.util;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class NetUtilImpl implements NetUtil{

 @Override
 public String getJson(String url) throws IOException{
 HttpURLConnection connection = null;
 URL url2 = new URL(url);
 connection=(HttpURLConnection) url2.openConnection();
 /*对和风天气提供的链接进行连接*/
 connection.connect();
 /*获取状态码*/
 int recode = connection.getResponseCode();
 BufferedReader bufferedReader = null;
 String json = new String();
 /*如果连接成功*/ 
 if(recode==200) {
 /*对数据进行读,并且封装到json这个字符串,并且返回json*/
 InputStream inputStream = connection.getInputStream();
 bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
 String string = null;
 
 while ((string=bufferedReader.readLine())!=null) {

 json=json+string;
 ByteBuffer buffer = ByteBuffer.wrap(new String(string).getBytes("UTF-8"));
 
 }
 
 
 }
 
 
 return json;
 }

 
 
}

对json字符串进行解析,这里使用谷歌的gson工具包:

package com.util;

import java.io.FileReader;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class JsonUtilImpl implements JsonUtil{

 @Override
 public List<String> getData(String json) {

 
 
 ArrayList<String> lists = new ArrayList<String>();
 JsonParser jsonParser = new JsonParser();//json解析器
 JsonObject object=(JsonObject) jsonParser.parse(json); //创建JsonObject对象
 JsonArray array=object.get("results").getAsJsonArray();//得到json数组
 JsonObject sJsonObject = array.get(0).getAsJsonObject();//按索引得到其中具体数据
 JsonObject location = sJsonObject.get("location").getAsJsonObject();
 JsonObject now = sJsonObject.get("now").getAsJsonObject();
 
 lists.add(location.get("name").getAsString());
 lists.add(now.get("text").getAsString());
 lists.add(now.get("temperature").getAsString());
// lists.add(now.get("humidity").getAsString());
// lists.add(now.get("wind_speed").getAsString());
 return lists;
 
 }

 
 
}

完整代码:

Controller层:

package com.web;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.w3c.dom.ls.LSException;

import com.google.common.collect.Lists;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.util.JsonUtil;
import com.util.JsonUtilImpl;
import com.util.NetUtil;
import com.util.NetUtilImpl;


@Controller
@RequestMapping("/wea")
public class Forest {
 
 NetUtilImpl netUtilImpl = new NetUtilImpl();
 JsonUtilImpl jsonUtilImpl = new JsonUtilImpl();
 
 
 
 @RequestMapping("/forest")
 public String forest(String city,Model model) throws IOException {
 String url = "https://api.seniverse.com/v3/weather/now.json?key=mtpmwyecaphmrzwc&location="+city+"&language=zh-Hans&unit=c";
 String data = netUtilImpl.getJson(url);
 List<String> lists = jsonUtilImpl.getData(data);
 model.addAttribute("lists",lists);
 return "display";
 
 }
 @RequestMapping("/fff")
 public String fff() {
 return "a";
 }
}

springMVC配置文件:

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.2.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
 
 <!-- 注解扫描包 -->
 <context:component-scan base-package="com.web" />

 <!-- 开启注解 -->
 <mvc:annotation-driven />
 
 <!-- 静态资源(js/image)的访问 -->
 <mvc:resources location="/js/" mapping="/js/**"/>

 <!-- 定义视图解析器 --> 
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/"></property>
 <property name="suffix" value=".jsp"></property>
 </bean>
</beans>

查询主页:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" >
 
 <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0"> 
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" >
 -->
 </head>
 
 <body>
 
 <form action="/MyWeather/wea/forest">
 city: <input type="text" name="city">
 <input type="submit" value="提交">
 </form>
 
 
 
 </body>
</html>

展示页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" >
 
 <title>My JSP 'display.jsp' starting page</title>
 
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0"> 
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" >
 -->

 </head>
 
 <body>
   
 <c:if test="${!empty lists }">
 <c:forEach items="${lists}" var="lists">
  <c:out value="${lists}"></c:out> 
 

     </c:forEach>
 </c:if>
 
 
 </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# SpringMVC  # api  # 天气查询  # Java 调用天气Webservice详解及实例代码  # 用Java实现全国天气预报的api接口调用示例  # java调用中国天气网api获得天气预报信息的方法  # 工具包  # 具体内容  # 配置文件  # 大家多多  # 再对  # array  # parse  # lists  # jsonParser  # getData  # object  # location  # add  # getAsString  # getAsJsonObject  # results  # getAsJsonArray  # sJsonObject  # ArrayList  # List 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在七牛云存储上搭建网站并设置自定义域名?  昵图网官方站入口 昵图网素材图库官网入口  如何快速重置建站主机并恢复默认配置?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  免费视频制作网站,更新又快又好的免费电影网站?  如何利用DOS批处理实现定时关机操作详解  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Laravel如何为API生成Swagger或OpenAPI文档  如何快速搭建高效服务器建站系统?  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  iOS发送验证码倒计时应用  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何在 React 中条件性地遍历数组并渲染元素  网站制作企业,网站的banner和导航栏是指什么?  js实现获取鼠标当前的位置  如何用狗爹虚拟主机快速搭建网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  浅谈javascript alert和confirm的美化  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Bootstrap CSS布局之列表  Laravel如何升级到最新版本?(升级指南和步骤)  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  原生JS获取元素集合的子元素宽度实例  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何用景安虚拟主机手机版绑定域名建站?  EditPlus中的正则表达式实战(5)  打造顶配客厅影院,这份100寸电视推荐名单请查收  Android中AutoCompleteTextView自动提示  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何在云指建站中生成FTP站点?  如何用花生壳三步快速搭建专属网站?  如何快速生成ASP一键建站模板并优化安全性?  如何用AWS免费套餐快速搭建高效网站?  Laravel Session怎么存储_Laravel Session驱动配置详解