代码看时候感觉很简单,用起来才觉得很强大
当遇到很难的问题时,不要觉得没有方法解决。其实前人早就遇到过,只是你不知道他们解决的方法。也就是说,再编程的时候遇到的所有难题都可以解决。只是时间问题!
部分代码:
package com.fenghuo.music;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import sun.misc.BASE64Encoder;
public class LinkMusic extends HttpServlet {
/**
* Title:获取资源,对xml文件中的数据进行修整
* Copyright: Copyright (c) 2012
* @author: 烽火
* @version 1.0 2012-09
*/
private static final long serialVersionUID = -2863941298564252276L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取所有音乐资源的名字
String[] resnames = getResNames();
//得到xml文件中提供的资源名及对应的歌曲名
Map<String,String> musmap = getMusmap();
//遍历所有的资源名
for (int i = 0; i < resnames.length; i++){
//判断xml文件中是否存在次资源名,如果不存在则在xml文件中添加此资源
if (!musmap.containsKey(resnames[i])){
//得到对歌曲重命名后的资源名
String rename = getRename(resnames[i]);
//对歌曲进行重命名
setResname(resnames[i], rename);
//将重名的歌曲资源添加到xml文件中
addresname(rename,resnames[i]);
}else{
System.out.println(resnames[i] + "资源存在");
}
}
//xml文件中多余的垃圾信息未清除
//音乐文件从music目录下移除,xml中的信息还存在
//重新获取xml文件中的数据存到session域中
musmap = getMusmap();
request.getSession().setAttribute("musmap", musmap);
//得到音乐的集合,Map.entry里有getKey,getValue为下面用EL表达式获取数据提供便利
Set<Entry<String, String>> musics = musmap.entrySet();
request.setAttribute("musics", musics);
//转发。转到jsp展示音乐信息
request.getRequestDispatcher("/WEB-INF/jsp/linkmusic.jsp").forward(request, response);
}
/**
* Description : 将歌曲信息添加到xml文件中
* @param:resname 资源名称
* @param: name 歌曲名称
*/
public void addresname(String resname, String name){
String xmlrealpath = this.getServletContext().getRealPath("/resource/musiclist.xml");
//得到文件的document
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(xmlrealpath));
if (document == null){
System.out.println("没有得到xml文件");
return;
}else{
System.out.println("得到xml文件!");
}
//得到根节点
Element root = document.getRootElement();
//给根节点增加一个子节点,即添加一首歌曲的信息
root.addElement("music")
.addElement("resname").addText(resname).getParent()
.addElement("name").addText(name);
//得到输出document的输出样式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlrealpath),format);
// 将document写出,关流
writer.write(document);
writer.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Description : 对资源歌曲名重新命名
* @param:resname 将要命名的资源名称
* @param: rename 资源新名称
*/
public void setResname(String resname, String rename){
//得到存放音乐文件夹的绝对地址
String realpath = this.getServletContext().getRealPath("/resource/music");
File resfile = new File(realpath +"/"+ resname);
File refile = new File(realpath +"/"+ rename);
resfile.renameTo(refile);
}
/**
* Description : 获取资源的新命名
* @param:resname 资源名称
* @return:String 资源新名称
*/
public String getRename(String resname){
try {
//得到MD5算法的MessageDigest
MessageDigest dm = MessageDigest.getInstance("md5");
byte[] md5 = dm.digest(resname.getBytes());
//对用MD5处理后的数据进行计算,得到处理后的字符串
BASE64Encoder encoder = new BASE64Encoder();
String baset64 = encoder.encode(md5);
String name = baset64 + resname.substring(resname.lastIndexOf("."));
//将影响文件地址的字符替换
String rename = name.replace('/', '0').replace('\\', '0').replace('?', '0');
return rename;
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
/**
* Description : 获取xml文件中的信息
* @return:Map<String,String> 存有资源信息的Map集合
*/
public Map<String,String> getMusmap(){
Map<String,String> musmap = new LinkedHashMap<String,String>();
String xmlrealpath = this.getServletContext().getRealPath("/resource/musiclist.xml");
//得到文件的document
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(xmlrealpath));
} catch (DocumentException e) {
e.printStackTrace();
}
if (document == null){
System.out.println("没有得到xml文件<br/>");
return null;
}else{
//System.out.println("得到xml文件!<br/>");
}
//得到根节点
Element root = document.getRootElement();
List<Element> musics = root.elements("music");
for (int i = 0; i < musics.size(); i++){
//分别获取name节点,resname节点的文本信息
String name = (musics.get(i)).element("name").getText();
String resname = (musics.get(i)).element("resname").getText();
//将获取的信息存到musmap集合中
musmap.put(resname, name);
}
return musmap;
}
/**
* Description : 获取资源名称
* @return:String[] 存有资源名称的字符串数组
*/
public String[] getResNames() {
String[] resnames = null;
//得到存放音乐文件夹的绝对地址
String realpath = this.getServletContext().getRealPath("/resource/music");
//得到存有音乐的文件夹对象
File dir = new File(realpath);
//判断是否存在一个目录文件
if (dir.exists() && dir.isDirectory()) {
//得到目录下所有文件的名称
resnames = dir.list();
}
return resnames;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.io.File"%>
<%@ page import="java.net.URL"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>音乐列表</title>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<font color="red">本站提供下列音乐:</font>
<br />
<%-- 利用JSTL结合EL表达式,将域中歌曲信息展现给用户 --%>
<c:forEach var="music" items="${musics }" varStatus="i">
${music.value }
<a href='${pageContext.request.contextPath }/resource/music/${music.key }'>下载</a>
<a href='${pageContext.request.contextPath }/servlet/PlayMusic?resname=${music.key }' target='_blank'> 播放</a><br/>
</c:forEach>
</body>
</html>
package com.fenghuo.music;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class PlayMusic extends HttpServlet {
/**
* Title:从请求中获取信息,修改播放器的播放列表
* Copyright: Copyright (c) 2012
* @author: 烽火
* @version 1.0 2012-09
*/
private static final long serialVersionUID = 2187049797370378307L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决乱码问题
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//得到歌曲的资源名称
String resname = request.getParameter("resname");
//从session域中得到存有歌曲信息的Map集合
Map<String, String> musmap = (Map<String, String>)request.getSession().getAttribute("musmap");
String name = musmap.get(resname);
//获取播放器播放列表存放的绝对路径
String xmlrealpath = this.getServletContext().getRealPath("/resource/musicplayer/xml/list0.xml");
//得到文件的document
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(xmlrealpath));
} catch (DocumentException e) {
e.printStackTrace();
}
if (document == null){
out.write("没有得到xml文件<br/>");
return;
}else{
out.write("得到xml文件!<br/>");
}
Element root = document.getRootElement();
Element music = (Element) root.elements("music").get(0);
music.element("name").setText(name);
//将资源的路径添加的music中
music.element("url").setText(request.getContextPath() + "/resource/music/" + resname);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlrealpath), format);
writer.write(document);
writer.close();
//重定向到播放器
//这种播放器在网上可以找到下一个用就行
response.sendRedirect(request.getContextPath() + "/resource/musicplayer/index.htm");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
运行结果:
1.在音乐库中新添加资源
2.点击mp3后进行数据更新
3.点击下载(此处不是我们想要的怎么将文件再改回歌曲名?希望高手指教)
4.点击播放
5.播放列表数据
这是自己完成的第一小小的web应用,虽然没什么大的功能,但是还是挺开心的。
期间遇到的问题,你懂得、
分享到:
相关推荐
《JavaWeb---简单应用---服务器向客户端提供音乐资源》---用到的技术dom4j,JSTL,EL表达式
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例...
DOM总结 tomcat服务器 servlet基础 Request&Response编程 Cookie&Session XML语言 JSP技术入门 EL表达式语言 JSTL标签库: JSP标准标签库 MVC程序架构思想&案例 [总结]Path路径问题 [总结]JavaWeb乱码问题 [转自IBM]...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器 jxl-2.6.jar 通过java操作excel表格的工具类库 jta-1.1.jar Java事务API,为J2EE平台提供了分布式事务服务 ...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
2014/12/17 星期三 xml&dom_sax&dom4j编程 2014/12/18 星期四 2014/12/19 星期五 tomcat与web程序结构与Http协议 2014/12/20 星期六 java web之servlet 2014/12/21 星期日 java web之request/respone 2014/12/22 ...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
1.Java学习路线 1.1JavaSE Java基础 Java8新特性 数据库MySQL与SQL语⾔ JDBC 1.2JavaWeb HTML基础与CSS JavaScript DOM 与 jQuery XML与Tomcat HTTP协议 服务器端组件Servlet JSP EL表达式 JSTL 会话控制Cookie和...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...
完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发...