这里实现能够实现输入歌曲名与歌手名,***找到该歌曲的播放地址,并通过超链接的形式打开或播放。以下是实现过程:

创新互联专业提供成都服务器托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买成都服务器托管服务,并享受7*24小时金牌售后服务。
(1)、首先是一个JSP,接收歌曲名与歌手名,并提交给Servlet处理。
- <%@ page contentType="text/html;charset=GBK" pageEncoding="GBK"%>
 输入歌手和歌曲名找歌曲
- 歌手名:
 
- 歌曲名:
 
(2)、编写解析DOM的工具类,这个类有一个静态方法 String dom(File file),传递的参数是要解析的XML文件,返回值是百度音乐的地址。
- package cn.guet.hj.servlet;
 - import javax.xml.parsers.*;
 - import org.w3c.dom.*;
 - import java.io.*;
 - /**
 - * 解析百度音乐掌门的XML
 - **/
 - public class MusicDom{
 - //解析DOM
 - public static String dom(File file){
 - String address="";//歌曲的实际地址
 - try{
 - //建立工厂类
 - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 - //建立Builder对象
 - DocumentBuilder builder = factory.newDocumentBuilder();
 - //将制定内容解析为XML文档,返回一个Document对象
 - Document doc = builder.parse(file);
 - //建立NodeList
 - NodeList url_list = doc.getElementsByTagName("url");//取得url标签列表
 - //取得url标签下的所有子标签
 - //取得encode标签内容
 - Element e1 = (Element)url_list.item(0);
 - address = e1.getElementsByTagName("encode").item(0).getFirstChild().getNodeValue();//加歌曲地址
 - //取得decode标签内容
 - Element e2 = (Element)url_list.item(0);
 - address += "/"+e2.getElementsByTagName("decode").item(0).getFirstChild().getNodeValue();//加歌曲名
 - }catch(Exception e){
 - e.printStackTrace();
 - }
 - return address;
 - }
 - }
 
(3)、编写Servlet,处理JSP传递来的请求,这里主要覆写HttpServlet的doGet与doPost方法。我们将获取JSP的参数并传递到百度音乐接口中,将这个字符串新建URL并连接,然后通过IO流保存XML文件,***调用前面的工具类得到播放地址。***请求转发到另一个JSP中。
- package cn.guet.hj.servlet;
 - import javax.servlet.*;
 - import javax.servlet.http.*;
 - import java.io.*;
 - import java.net.*;
 - /**
 - ** 接收歌曲名与歌手名 处理请求
 - **/
 - public class MusicServlet extends HttpServlet{
 - //处理Get请求
 - public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
 - request.setCharacterEncoding("GBK");
 - String person_name = request.getParameter("person_name");
 - String music_name = request.getParameter("music_name");
 - //将会返回歌曲信息的XML
 - String url_str = "http://box.zhangmen.baidu.com/x?op=12&count=1&title="+music_name+"$$"+person_name+"$$$$";
 - URL url = new URL(url_str);//新建URL对象
 - URLConnection conn = url.openConnection();//连接对象
 - conn.connect();//发送连接
 - InputStream input = conn.getInputStream();//获取目的的输入流
 - File file = new File("D:"+File.separator+music_name+".xml");
 - OutputStream output = new FileOutputStream(file);//输出流
 - byte []b = new byte[20240];
 - int len = input.read(b);
 - output.write(b,0,len);
 - //Dom解析
 - String address = MusicDom.dom(file);//播放地址 调用解析Dom解析的类
 - request.setAttribute("address",address);//设置属性
 - //System.out.println(address);
 - output.close();
 - input.close();
 - //请求转发
 - RequestDispatcher view = request.getRequestDispatcher("music_play.jsp");
 - view.forward(request,response);
 - }
 - //处理Post请求
 - public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
 - this.doGet(request,response);
 - }
 - }
 
(4)、写JSP页面,这里主要是一个超链接,连接到音乐地址。
- <%@ page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
 - <%@ page import="java.net.*"%>
 - <%@ page import="java.io.*"%>
 播放音乐
总结:上面的例子实现了输入歌曲名与歌手名来找到歌曲的地址。这个例子主要综合了前面学过的XML文件解析,IO流,Servlet,JSP等知识,虽然实现过程不复杂,但是还是遇到很多问题,比如连接URL对象,获取XML文件这是以前没有接触,但是还是边学边做的写完了程序。此外,***一步超链接还是有一些问题,会出现403错误,还是要通过地址栏输入地址才能访问,这一步暂时还没解决。
原文链接:http://hepershade.iteye.com/blog/1488580
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号