《JavaWeb---简单应用---服务器向客户端提供音乐资源》---用到的技术dom4j,JSTL,EL表达式
来源:互联网 发布:淘宝代练lol封号赔偿 编辑:程序博客网 时间:2024/06/12 19:06
代码看时候感觉很简单,用起来才觉得很强大
运行结果:
当遇到很难的问题时,不要觉得没有方法解决。其实前人早就遇到过,只是你不知道他们解决的方法。也就是说,再编程的时候遇到的所有难题都可以解决。只是时间问题!
部分代码:
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");//得到文件的documentSAXReader 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算法的MessageDigestMessageDigest 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");//得到文件的documentSAXReader 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");//得到文件的documentSAXReader 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表达式
- 《JavaWeb---简单应用---服务器向客户端提供音乐资源(三)》--- 利用struts实现文件下载,下载时改变文件的名称
- 《JavaWeb---简单应用---服务器向客户端提供音乐资源(二)》---歌曲展示页面提升,实现渐变色显示,选中行变色
- EL JSTL表达式的简单应用
- javaWeb-EL表达式和JSTL
- MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
- el表达式和jstl标签的应用
- el表达式和jstl标签的应用
- 【JavaWeb】EL表达式与JSTL标签
- Javaweb--- EL表达式 JSTL标准标签库
- jstl与el表达式 和面向对象
- JAVAweb开发技术-------(四)EL表达式和JSTL标签库
- JAVAweb开发技术-------(四)EL表达式和JSTL标签库续集
- 简单EL表达式应用
- 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- JSTL提供的函数标签操作EL表达式字的符串
- JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- Failed to install xxxx.apk on device 'emulator-5554!
- 傅立叶变换--复数到底是个什么东西? .
- SQl 动态EXEC
- MSSQL自动备份以及作业调度来建立自动备份的方法
- C#图像快速傅立叶变换及二维傅立叶变化
- 《JavaWeb---简单应用---服务器向客户端提供音乐资源》---用到的技术dom4j,JSTL,EL表达式
- PowerDesigner表结构和字段大小写转换
- php二维数组排序
- 山区行
- 浅谈linux内核中的idr机制
- VS2005下编译调试保护模式32位汇编程序总结
- Bash字符串处理
- 不使用中间变量来交换两个变量的值
- PandaBoard ES所用到的引导加载程序