JSP天气预报servlet版

题外话:
本程序利用网络上发布的公共webservice endpoint

www.webxml.com.cn/WebServices/WeatherWebService.asmx


大致步骤是
1  利用soap向webservice endpoint进行请求,取回请求结果
2  把结果显示在web界面上,web界面采用Java+Jsp(呵呵,有点丑陋,篇幅所迫)
好,废话少说,直接进入核心程序讲解。

一  WeatherReport类  
    方法 1  构造soap请求(请求格式请见上面的链接),用用户输入的城市名称镶在此请求里面

java 代码


/**   
     * 获取SOAP的请求头,并替换其中的标志符号为用户输入的城市   
     *    
     * 编写者:王景辉   
     *    
     * 
@param city   
     *            用户输入的城市名称   
     * 
@return 客户将要发送给服务器的SOAP请求   
     
*/
   
    
private static String getSoapRequest(String city) {    
        StringBuilder sb 
= new StringBuilder();    
        sb    
                .append(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"   
                        
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "   
                        + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "   
                        + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"   
                        + "<soap:Body>    <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"   
                        + "<theCityName>" + city    
                        
+ "</theCityName>    </getWeatherbyCityName>"   
                        
+ "</soap:Body></soap:Envelope>");    
        
return sb.toString();    
    }
   


方法 2  向endpoint发送上述SOAP请求,并设置一些请求属性,返回一个服务器端的InputStream(XML文档流)

java 代码



/**   
     * 用户把SOAP请求发送给服务器端,并返回服务器点返回的输入流   
     *    
     * 编写者:王景辉   
     *    
     * 
@param city   
     *            用户输入的城市名称   
     * 
@return 服务器端返回的输入流,供客户端读取   
     * 
@throws Exception   
     
*/
   
    
private static InputStream getSoapInputStream(String city) throws Exception {    
        
try {    
            String soap 
= getSoapRequest(city);    
            
if (soap == null{    
                
return null;    
            }
    
            URL url 
= new URL(    
                    
"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");    
            URLConnection conn 
= url.openConnection();    
            conn.setUseCaches(
false);    
            conn.setDoInput(
true);    
            conn.setDoOutput(
true);    
   
            conn.setRequestProperty(
"Content-Length", Integer.toString(soap    
                    .length()));    
            conn.setRequestProperty(
"Content-Type""text/xml; charset=utf-8");    
            conn.setRequestProperty(
"SOAPAction",    
                    
"http://WebXml.com.cn/getWeatherbyCityName");    
   
            OutputStream os 
= conn.getOutputStream();    
            OutputStreamWriter osw 
= new OutputStreamWriter(os, "utf-8");    
            osw.write(soap);    
            osw.flush();    
            osw.close();    
   
            InputStream is 
= conn.getInputStream();    
            
return is;    
        }
 catch (Exception e) {    
            e.printStackTrace();    
            
return null;    
        }
    
    }
   


方法 3  解析方法2返回的XML文档流,并用特定的符号分隔,以便我们在Jsp页面进行结果分析

java 代码






/**   
     * 对服务器端返回的XML进行解析   
     *    
     * 编写者:王景辉   
     *    
     * 
@param city   
     *            用户输入的城市名称   
     * 
@return 字符串 用,分割   
     
*/
   
    
public static String getWeather(String city) {    
        
try {    
            Document doc;    
            DocumentBuilderFactory dbf 
= DocumentBuilderFactory.newInstance();    
            dbf.setNamespaceAware(
true);    
            DocumentBuilder db 
= dbf.newDocumentBuilder();    
            InputStream is 
= getSoapInputStream(city);    
            doc 
= db.parse(is);    
            NodeList nl 
= doc.getElementsByTagName("string");    
            StringBuffer sb 
= new StringBuffer();    
            
for (int count = 0; count < nl.getLength(); count++{    
                Node n 
= nl.item(count);    
                
if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {    
                    sb 
= new StringBuffer("#") ;    
                    
break ;    
                }
    
                sb.append(n.getFirstChild().getNodeValue() 
+ "#\n");    
            }
    
            is.close();    
            
return sb.toString();    
        }
 catch (Exception e) {    
            e.printStackTrace();    
            
return null;    
        }
    
    }
   


二   weatherInfo.jsp页面

     

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
    
<title>城市天气信息</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">
    
-->

  
</head>
  
  
<body>
    
<% 
    
String info = (String) request.getAttribute("info") ; 
    
    
if(info.equals("#")) {
    
%>
    
<h1>该城市暂不被支持天气预报服务</h1>
    
<%
    } 
else {
    
String[] infos = info.split("#") ; 
    
%>
    
    
    
<table border="1">
     
<tr>
     
<td colspan="3">
     
<strong><font color="blue">72小时天气预报</font>---
     
<font color="red">
     
<!-- 城市名称 -->
     
<%=infos[0]%>&nbsp;&nbsp;&nbsp;<%=infos[1]%>
     
</font>
     
<font size="-1">
     
<%=infos[4%>发布
     
</font>
     
</strong>
     
</td>
     
</tr>
     
<tr align="center">
     
<td>
     
<table>
     
<tr align="center">
     
<!-- 日期 -->
     
<td>
     
<font size="-1">
     
<%=infos[6%>
     
</font>
     
</td>
     
</tr>
     
<tr align="center">
     
<!-- 天气图标 -->
     
<td>
     
<img src="tqimgs/a_<%=infos[8]%>" />
     
<img src="tqimgs/a_<%=infos[9]%>" />
     
</td>
     
</tr>
     
<tr align="center">
     
<!-- 天气细则 -->
     
<td>
     
<font size="-1">
     
<%=infos[5%><br>
     
<%=infos[7%><br>
     
</font>
     
</td>
     
</tr>
     
</table>
     
</td>
     
     
     
<td>
     
<table align="center">
     
<tr align="center">
     
<td>
     
<!-- 第二天的时间 -->
     
<font size="-1">
     
<%=infos[13%>
     
</font>
     
</td>
     
</tr>
     
     
<tr align="center">
     
<td>
     
<!-- 第二天的天气图标 -->
     
<img src="tqimgs/a_<%=infos[15]%>">
     
<img src="tqimgs/a_<%=infos[16]%>">
    
</td>
     
</tr>
     
     
<tr align="center">
     
<td>
     
<!-- 第二天的天气细则 -->
     
<font size="-1">
     
<%=infos[12%><br>
     
<%=infos[14%><br>
     
</font>
     
</td>
     
</tr>
     
</table>
     
</td>
     
     
     
<td>
     
<table align="center">
     
<tr align="center">
     
<td>
     
<!-- 第三天的天气时间 -->
        
<font size="-1">
     
<%=infos[18%>
     
</font>
        
</td>
     
</tr>
     
     
<tr align="center">
     
<td>
     
<!-- 第三天的天气图标 -->
     
<img src="tqimgs/a_<%=infos[20]%>" />
     
<img src="tqimgs/a_<%=infos[21]%>" />
     
</td>
     
</tr>
     
<tr align="center">
     
<td>
     
<!-- 第三天的天气细则 -->
     
<font size="-1">
     
<%=infos[17%><br>
     
<%=infos[19%><br>
     
</font>
     
</td>
     
</tr>
     
</table>
     
</td>
         
</tr>
         
<tr>
         
<td colspan="3">
         
<!-- 居家指数 -->
         
<strong><font color="blue">温馨提醒</font></strong>
         
</td>
         
</tr>
         
<tr>
         
<td colspan="3">
         
         
<table>
         
<tr>
         
<td>
         
<img src="tqimgs/sun.gif" />
         
</td>
         
<td>
         
<font size="-1">
         
<%=infos[10%>
         
</font>
         
</td>
         
</tr>
         
</table>
         
         
         
</td>
         
</tr>
         
<tr>
         
<td colspan="3">
         
          
          
<%
          
String str = "" ;
          
String s1 = "" ;
          
String s1Content = "" ;
          
String s2 = "" ;
          
String s2Content = "" ;
          
String s3 = "" ;
          
String s3Content = "" ;
          
String s4 = "" ;
          
String s4Content = "" ;
          
String s5 = "" ;
          
String s5Content = "" ;
          
String s6 = "" ;
          
String s6Content = "" ;
          
String s7 = "" ;
          
String s7Content = "" ;
          try {
              
//这里开始进行具体详细测试
          str 
= infos[11] ;
          
//穿衣指数
          s1 
= str.substring(str.indexOf("穿衣指数:"),str.indexOf("穿衣指数:")+4) ;
          s1Content 
= str.substring(str.indexOf("穿衣指数:")+5,str.indexOf("感冒指数:")) ;
          
//感冒指数
          s2 
= str.substring(str.indexOf("感冒指数:"),str.indexOf("感冒指数:")+4) ;
          s2Content 
= str.substring(str.indexOf("感冒指数:")+5,str.indexOf("晨练指数:")) ;
          
          
//晨练指数
          s3 
= str.substring(str.indexOf("晨练指数:"),str.indexOf("晨练指数:")+4) ;
          s3Content 
= str.substring(str.indexOf("晨练指数:")+5,str.indexOf("交通指数:")) ;
          
//交通指数
          s7 
= str.substring(str.indexOf("交通指数:"),str.indexOf("交通指数:")+4) ;
          s7Content 
= str.substring(str.indexOf("交通指数:")+5,str.indexOf("中暑指数:")) ;
          
//中暑指数
          s4 
= str.substring(str.indexOf("中暑指数:"),str.indexOf("中暑指数:")+4) ;
          s4Content 
= str.substring(str.indexOf("中暑指数:")+5,str.indexOf("防晒指数:")) ;
          
//防晒指数
          s5 
= str.substring(str.indexOf("防晒指数:"),str.indexOf("防晒指数:")+4) ;
          s5Content 
= str.substring(str.indexOf("防晒指数:")+5,str.indexOf("旅行指数:")) ;
          
//旅行指数
          s6 
= str.substring(str.indexOf("旅行指数:"),str.indexOf("旅行指数:")+4) ;
          s6Content 
= str.substring(str.indexOf("旅行指数:")+5) ;
          
%>
          
           
<table>
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_01.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s1 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s1Content %>
         
</font>
         
</td>
         
</tr>
         
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_20.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s2 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s2Content %>
         
</font>
         
</td>
         
</tr>
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_03.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s3 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s3Content %>
         
</font>
         
</td>
         
</tr>
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_22.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s4 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s4Content %>
         
</font>
         
</td>
         
</tr>
         
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_07.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s5 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s5Content %>
         
</font>
         
</td>
         
</tr>
         
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_31.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s6 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s6Content %>
         
</font>
         
</td>
         
</tr>
         
         
         
         
<tr>
         
<td width="50">
         
<img src="tqimgs/zhishu_11.gif" />
         
</td>
         
<td>
         
<strong>
         
<font size="-1">
         
<%=s7 %>&nbsp;
         
</font>
         
</strong>
         
</td>
         
<td>
         
<font size="-1">
         
<%=s7Content %>
         
</font>
         
</td>
         
</tr>
         
         
         
</table>
         
         
         
</td>
         
</tr>
     
</table>
          
          
          
<%
          } catch(Exception e) {
              
          }
          
           
%>
    
    
    
<%
    }
     
     
%>
     
          
         
         
        
  
</body>
</html>



  • D9e075b4-57ec-47c4-be33-de8914f5e307-thumb
  • 描述: 天气预报效果图
  • 大小: 1.6 MB



  • posted on 2008-01-08 15:21  Squall  阅读(3058)  评论(3编辑  收藏  举报

    导航