本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下
注:
1)html上的图片是静态指定的。当更新了新的图片时必须手工更新。所以使用Servlet读取本地images中的所有图片,动态显示给用户。
2)如果存在中文名的图片,由于get方式无法直接传递中文,会导致出错。
主页面–index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>小小相册 小小相册 上传相片 /servlet/showAllImg">浏览相片
页面显示:
上传图片功能:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>小小相册 小小相册
package cn.hncu.servlet;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;
import cn.hncu.utils.MyUtils;
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" A Servlet ");
out.println(" ");
out.print("错误信息:提交方式错误...不支持Get方式上传照片");
out.println(" ");
out.println("");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" 上传照片页面 ");
out.println(" ");
//从上传表单提取信息:一,封装成photo值对象,调用dao层存储到后台
// 二,把上传的照片存储到服务器硬盘
//数据库:存储照片的存储情况的信息,,,真正的文件存储到硬盘
DiskFileItemFactory dfi=new DiskFileItemFactory();
File file=new File("d:/a");
if(file.exists()){
file.mkdirs();
}
dfi.setRepository(file);
ServletFileUpload upload=new ServletFileUpload(dfi);
upload.setSizeMax(1024*1024*8);
upload.setHeaderEncoding("utf-8");//==>request.setCharacterEncoding("utf-8");
try {
List list=upload.parseRequest(request);
PhotoModel pm=new PhotoModel();
InputStream in=null;
for(FileItem fI:list){
if(fI.isFormField()){//这个不会有临时文件
String desc=fI.getString("utf-8");
pm.setDesc(desc);
}else{
in=fI.getInputStream();
// String filename=fI.getFieldName();
// System.out.println("getFieldName:"+filename);
String fileName=fI.getName();
// System.out.println("getName:"+fileName);//测试:C:Usersadl1PicturesSaved Pictures111.jpg?
//卫条件
if(fileName==null||fileName.trim().equals("")){
out.println("没有选择文件,,,请必须选择一个文件...
");
String strPath2=request.getContextPath()+"/jsps/upload.jsp";
out.println("返回上传页面");
return;
}
pm.setDt(MyUtils.getCurrentDataime());
String realName=fileName.substring(fileName.lastIndexOf("\"));//"112.jpg"
System.out.println(realName.substring(1, realName.length()));
pm.setRealName(realName.substring(1, realName.length()));//把realName的""去掉
//ext扩展名
String ext=fileName.substring(fileName.lastIndexOf("."));
pm.setExt(ext);
String id=MyUtils.getUUID();
pm.setId(id);
pm.setIp(request.getRemoteAddr());
pm.setDir(MyUtils.getDir(id));
}
}
//完成photo值对象的封装,调用dao进行存储
boolean boo=new PhotoDaoImpl().sava(pm);
if(boo){
//完成数据库的存储,接下来是服务器硬盘的存储
//把照片存储到项目根目录下的photos文件夹中存储(以打散方式存储)
String path="photos/"+pm.getDir();
//System.out.println("path:"+path);//测试:photos/9/0
String filePath=getServletContext().getRealPath(path);
//System.out.println("filePath:"+filePath);//测试:D:apache-tomcat-7.0.30webappsphotosWebphotos9
File dir=new File(filePath);
if(!dir.exists()){
dir.mkdirs();
}
FileUtils.copyInputStreamToFile(in, new File(filePath+"/"+pm.getId()+pm.getExt()));
////如果硬盘保存成功就跳转到主页面--转发
//// RequestDispatcher rd=request.getRequestDispatcher(getServletContext().getContextPath()+"/index.jsp");//"/photosWeb/photosWeb/index.jsp"
//RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");//"/photosWeb/index.jsp"g
////java代码块和web.xml中url的开始"/"代表项目根目录
//rd.forward(request, response);
//这里不能使用转发,具体重定向和转发区别:http://blog.csdn.net/xanlv/article/details/52701085
//重定向
response.sendRedirect(getServletContext().getContextPath()+"/index.jsp");
}else{
//数据库保存失败--留在上传页面
RequestDispatcher rd=request.getRequestDispatcher("/jsps/upload..jsp");//"/photosWeb/index.jsp"
rd.forward(request, response);
}
} catch (FileUploadException e) {
throw new RuntimeException("上传失败", e);
}finally{//清临时文件
File f=new File("d:/a");
File fs[]=f.listFiles();
for(File ff:fs){
ff.delete();
}
}
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
页面显示效果:
浏览图片功能:
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;
public class ShowAllImgServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" 相册浏览 ");
out.println(" ");
String strPath=request.getContextPath()+"/jsps/upload.jsp";
out.println("返回上传页面");
//String table="| 文件名 | 上传日期时间 | 相片 | 相片说明 | 操作 |
|---|---|---|---|---|
| "+pm.getRealName()); out.println(" | "); out.println(""+pm.getDt()); out.println(" | "); String path=request.getContextPath()+"/photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt(); //System.out.println(path);//"/photosWeb/photos/d/7/e78e18352b42410f85dbd8df834bd718.jpg" //点击图片可以查看大图 out.println(""); out.println(" | "); out.println(""+pm.getDesc()); out.println(" | "); out.println("删除图片"); //out.println("/servlet/down?id="+pm.getId()+"'>下载图片 | "); out.println("
页面显示效果:
删除功能:
package cn.hncu.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;
public class DelPhotoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" 删除照片页面 ");
out.println(" ");
String id=request.getParameter("id");
String ip=request.getRemoteAddr();
PhotoDaoImpl dao=new PhotoDaoImpl();
PhotoModel pm=dao.getSingleById(id);
if(pm!=null){
if(!pm.getIp().equals(ip)){
out.println("您没有该图片的权限去删除...");
String strPath=request.getContextPath()+"/servlet/showAllImg";
out.println("
返回继续浏览");
return ;
}
//删除包含两部分工作:清除数据库中的信息 和 删除服务器硬盘中的图片文件
//1清除数据库中的信息
boolean boo = dao.del(id);
//2删除服务器硬盘中的图片文件
if(boo){
String path="photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt();
String filePath=getServletContext().getRealPath(path);
File f=new File(filePath);
if(f.exists()){
f.delete();
}
String strPath=request.getContextPath()+"/servlet/showAllImg";
//System.out.println(strPath);///photosWeb/servlet/showPhotos
out.println("删除成功...
返回浏览");
}else{
out.println("删除数据库信息失败");
}
}else{
out.println("文件不存在...");
String strPath=request.getContextPath()+"/servlet/showAllImg";
out.println("
返回继续浏览");
}
out.println(" ");
out.println("");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" 删除照片页面 ");
out.println(" ");
out.print("不支持POST方式...");
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
页面显示:
下载功能:
1.在HTML页面上使用超连接指向要下载的文件(不安全容易被盗链)。
问题:
如何确定本地资源?
ServletContext – 代表一个web项目。一个web项目只有一个ServletContext对像。
getRealPath(“/”); //d:/prm/tom/web/
需求分析:
在实际的开发中,下载哪一个文件,都是由用户动态选择的。
如,在我们项目images目录下,存在着很多图片文件。用户在页面上显示所有图片,用户可以点下载连接下载喜欢的图片。
详细设计:
使用静态网页显示所有图片。给每一个图片一个下以下载的超连接。
在超连接后面传递要下载的图片id。
在serivice中动态接收图片名。完成下载 。
package cn.hncu.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;
public class DownServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取被下载图片的信息
tring id=request.getParameter("id");
PhotoModel pm=new PhotoDaoImpl().getSingleById(id);
if(pm==null){
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" A Servlet ");
out.println(" ");
response.getWriter().println("alert('该文本已不存在...')");
out.println(" ");
out.println("");
out.flush();
out.close();
//getServletContext().getContextPath()
RequestDispatcher rd=request.getRequestDispatcher("/servlet/down");//"/photosWeb/index.jsp"
//java代码块和web.xml中url的开始"/"代表项目根目录
rd.forward(request, response);
}else{
//真正下载: 把服务器硬盘的照片文件读取出来发送给客户端(设置响应头)
//获取真实的文件
String realName=pm.getRealName();
realName=URLEncoder.encode(realName, "utf-8");//如果是中文名必须转码,防止文件名中文乱码
// InputStream in=DownServlet.class.getClassLoader().getResourceAsStream(realName);
//设置显示类型为下载
response.setContentType("application/force-download");
//设置响应头
response.setHeader("content-Disposition", "attachment;filename=""+realName+""");
// String path=request.getContextPath()+"/photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt();
String path="photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt();
String filePath=getServletContext().getRealPath(path);
FileUtils.copyInputStreamToFile(request.getInputStream(), new File(filePath));
InputStream in=new FileInputStream(filePath);
OutputStream o=response.getOutputStream();
byte b[]=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
o.write(b, 0, len);
}
o.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" A Servlet ");
out.println(" ");
out.print(" 不支持");
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
页面显示效果:
配置文件web.xml
UploadServlet cn.hncu.servlet.UploadServlet ShowAllImgServlet cn.hncu.servlet.ShowAllImgServlet DownServlet cn.hncu.servlet.DownServlet DelPhotoServlet cn.hncu.servlet.DelPhotoServlet UploadServlet /servlet/uploadServlet ShowAllImgServlet /servlet/showAllImg DownServlet /servlet/down DelPhotoServlet /servlet/delPhoto index.jsp
数据库:photos.xml
值对象:PhotoModel.java
package cn.hncu.domain;
public class PhotoModel {
//photo值对象
private String id;//UUID
private String realName;//照片真实文件名
private String ext;//扩展名
private String dir;//文件打撒后存储的目录
private String dt;//上传日期时间
private String ip;//上传客户端的ip地址
private String desc;//照片说明
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getExt() {
return ext;
}
public void setExt(String ext) {
this.ext = ext;
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public String getDt() {
return dt;
}
public void setDt(String dt) {
this.dt = dt;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String Dreturn desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
dao层:这里简写了,只写了实现类PhotoDaoImpl.java
package cn.hncu.dao;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.document;
import org.dom4j.Element;
import cn.hncu.domain.PhotoModel;
import cn.hncu.utils.DomFactory;
public class PhotoDaoImpl {
public boolean sava(PhotoModel pm){
document dom=DomFactory.getDom();
Element root=dom.getRootElement();
Element e=root.addElement("photo");
e.addAttribute("id", pm.getId());
e.addAttribute("dir", pm.getDir());
e.addAttribute("dt", pm.getDt());
e.addAttribute("ext", pm.getExt());
e.addAttribute("ip", pm.getIp());
e.addAttribute("realName", pm.getRealName());
e.addElement("desc").setText(pm.getDesc());
boolean b=DomFactory.save();
if(b){
return true;
}
return false;
}
public List getAllPhotos(){
List li=new ArrayList();
document dom=DomFactory.getDom();
Element e=dom.getRootElement();
Iterator it=e.elementIterator();
while(it.hasNext()){
Element ie=it.next();
PhotoModel pm=new PhotoModel();
pm.setId(ie.attributevalue("id"));
pm.setDir(ie.attributevalue("dir"));
pm.setDt(ie.attributevalue("dt"));
pm.setExt(ie.attributevalue("ext"));
pm.setIp(ie.attributevalue("ip"));
pm.setRealName(ie.attributevalue("realName"));
pm.setDesc(ie.elementText("desc"));
li.add(pm);
}
return li;
}
public PhotoModel getSingleById(String id){
List li=getAllPhotos();
PhotoModel pm=new PhotoModel();
for(PhotoModel p:li){
if(p.getId().equals(id)){
return p;
}
}
return null;
}
public boolean del(String id) {
document dom=DomFactory.getDom();
Element e=(Element) dom.selectSingleNode("//photo[@id='"+id+"']");
return e.getParent().remove(e);
}
}
工具类:
1.
package cn.hncu.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class MyUtils {
private MyUtils() {
}
public static String getUUID(){
return UUID.randomUUID().toString().replace("-", "");
}
private static SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
public static String getCurrentDataime(){
return sdf.format(new Date());
}
public static String getDir(String uuid){
String dir1=Integer.toHexString(uuid.hashCode()&0xf);
String dir2=Integer.toHexString((uuid.hashCode()&0xf0)>>4);
return dir1+"/"+dir2;
}
}
2.
package cn.hncu.utils;
import java.io.FileOutputStream;
import org.dom4j.document;
import org.dom4j.documentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class DomFactory {
private static document dom;
private static String fileName;
static{
try {
SAXReader r=new SAXReader();
//获取src下的资源文件
fileName=DomFactory.class.getClassLoader().getResource("photos.xml").getPath();
System.out.println("users.xml的路径:"+fileName);//"/D:/apache-tomcat-7.0.30/webapps/photosWeb/WEB-INF/classes/photos.xml"
//注意:获取tomcat中当前项目classpath下的资源方式
dom=r.read(fileName);
} catch (documentException e) {
e.printStackTrace();
}
}
public static document getDom(){
return dom;
}
public static boolean save(){
XMLWriter w;
try {
w = new XMLWriter(new FileOutputStream(fileName));
w.write(dom);
w.close();
return true;
} catch (Exception e) {
return false;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。
Java相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



