日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java相册_精致小巧的java相册制作方法

發(fā)布時(shí)間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java相册_精致小巧的java相册制作方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(shí)例為大家分享了java相冊(cè)制作方法,供大家參考,具體內(nèi)容如下

注:

1)html上的圖片是靜態(tài)指定的。當(dāng)更新了新的圖片時(shí)必須手工更新。所以使用Servlet讀取本地images中的所有圖片,動(dòng)態(tài)顯示給用戶(hù)。

2)如果存在中文名的圖片,由于get方式無(wú)法直接傳遞中文,會(huì)導(dǎo)致出錯(cuò)。

主頁(yè)面–index.jsp

小小相冊(cè)

小小相冊(cè)

上傳相片

瀏覽相片

頁(yè)面顯示:

上傳圖片功能:

小小相冊(cè)

小小相冊(cè)

照片:

說(shuō)明:

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

A Servlet");

out.println("

");

out.print("錯(cuò)誤信息:提交方式錯(cuò)誤...不支持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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

上傳照片頁(yè)面");

out.println("

");

//從上傳表單提取信息:一,封裝成photo值對(duì)象,調(diào)用dao層存儲(chǔ)到后臺(tái)

// 二,把上傳的照片存儲(chǔ)到服務(wù)器硬盤(pán)

//數(shù)據(jù)庫(kù):存儲(chǔ)照片的存儲(chǔ)情況的信息,,,真正的文件存儲(chǔ)到硬盤(pán)

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()){//這個(gè)不會(huì)有臨時(shí)文件

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è)試:C:\Users\adl1\Pictures\Saved Pictures\111.jpg?

//衛(wèi)條件

if(fileName==null||fileName.trim().equals("")){

out.println("沒(méi)有選擇文件,,,請(qǐng)必須選擇一個(gè)文件...
");

String strPath2=request.getContextPath()+"/jsps/upload.jsp";

out.println("返回上傳頁(yè)面");

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擴(kuò)展名

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值對(duì)象的封裝,調(diào)用dao進(jìn)行存儲(chǔ)

boolean boo=new PhotoDaoImpl().sava(pm);

if(boo){

//完成數(shù)據(jù)庫(kù)的存儲(chǔ),接下來(lái)是服務(wù)器硬盤(pán)的存儲(chǔ)

//把照片存儲(chǔ)到項(xiàng)目根目錄下的photos文件夾中存儲(chǔ)(以打散方式存儲(chǔ))

String path="photos/"+pm.getDir();

// System.out.println("path:"+path);//測(cè)試:photos/9/0

String filePath=getServletContext().getRealPath(path);

// System.out.println("filePath:"+filePath);//測(cè)試:D:\apache-tomcat-7.0.30\webapps\photosWeb\photos\9\0

File dir=new File(filePath);

if(!dir.exists()){

dir.mkdirs();

}

FileUtils.copyInputStreamToFile(in, new File(filePath+"/"+pm.getId()+pm.getExt()));

// //如果硬盤(pán)保存成功就跳轉(zhuǎn)到主頁(yè)面--轉(zhuǎn)發(fā)

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的開(kāi)始"/"代表項(xiàng)目根目錄

// rd.forward(request, response);

//這里不能使用轉(zhuǎn)發(fā),具體重定向和轉(zhuǎn)發(fā)區(qū)別:http://blog.csdn.net/xanlv/article/details/52701085

//重定向

response.sendRedirect(getServletContext().getContextPath()+"/index.jsp");

}else{

//數(shù)據(jù)庫(kù)保存失敗--留在上傳頁(yè)面

RequestDispatcher rd=request.getRequestDispatcher("/jsps/upload..jsp");//"/photosWeb/index.jsp"

rd.forward(request, response);

}

} catch (FileUploadException e) {

throw new RuntimeException("上傳失敗", e);

}finally{//清臨時(shí)文件

File f=new File("d:/a");

File fs[]=f.listFiles();

for(File ff:fs){

ff.delete();

}

}

out.println(" ");

out.println("");

out.flush();

out.close();

}

}

頁(yè)面顯示效果:

瀏覽圖片功能:

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

相冊(cè)瀏覽");

out.println("

");

String strPath=request.getContextPath()+"/jsps/upload.jsp";

out.println("返回上傳頁(yè)面");

//String table="

String table="

"

文件名上傳日期時(shí)間相片相片說(shuō)明操作";

out.println(table);

//從dao層把所有的照片信息讀取出來(lái)發(fā)送到前端頁(yè)面

List list=new PhotoDaoImpl().getAllPhotos();

for(PhotoModel pm:list){

out.println("

");

out.println("

"+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"

//點(diǎn)擊圖片可以查看大圖

out.println("

");

out.println("

");

out.println("

"+pm.getDesc());

out.println("

");

out.println("

刪除圖片");

//out.println("下載圖片

");

out.println("下載圖片");

out.println("

");

}

out.println("

");

out.println(" ");

out.println("");

out.flush();

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

out.println(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

A Servlet");

out.println("

");

out.print("不支持Post方式。。。");

out.println(" ");

out.println("");

out.flush();

out.close();

}

}

頁(yè)面顯示效果:

刪除功能:

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

刪除照片頁(yè)面");

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("您沒(méi)有該圖片的權(quán)限去刪除...");

String strPath=request.getContextPath()+"/servlet/showAllImg";

out.println("返回繼續(xù)瀏覽");

return ;

}

//刪除包含兩部分工作:清除數(shù)據(jù)庫(kù)中的信息 和 刪除服務(wù)器硬盤(pán)中的圖片文件

//1清除數(shù)據(jù)庫(kù)中的信息

boolean boo = dao.del(id);

//2刪除服務(wù)器硬盤(pán)中的圖片文件

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("刪除數(shù)據(jù)庫(kù)信息失敗");

}

}else{

out.println("文件不存在...");

String strPath=request.getContextPath()+"/servlet/showAllImg";

out.println("返回繼續(xù)瀏覽");

}

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

刪除照片頁(yè)面");

out.println("

");

out.print("不支持POST方式...");

out.println(" ");

out.println("");

out.flush();

out.close();

}

}

頁(yè)面顯示:

下載功能:1.在HTML頁(yè)面上使用超連接指向要下載的文件(不安全容易被盜鏈)。

問(wèn)題:

如何確定本地資源?

ServletContext – 代表一個(gè)web項(xiàng)目。一個(gè)web項(xiàng)目只有一個(gè)ServletContext對(duì)像。

getRealPath(“/”); //d:/prm/tom/web/

需求分析:在實(shí)際的開(kāi)發(fā)中,下載哪一個(gè)文件,都是由用戶(hù)動(dòng)態(tài)選擇的。

如,在我們項(xiàng)目images目錄下,存在著很多圖片文件。用戶(hù)在頁(yè)面上顯示所有圖片,用戶(hù)可以點(diǎn)下載連接下載喜歡的圖片。

詳細(xì)設(shè)計(jì):

使用靜態(tài)網(wǎng)頁(yè)顯示所有圖片。給每一個(gè)圖片一個(gè)下以下載的超連接。

在超連接后面?zhèn)鬟f要下載的圖片id。

在serivice中動(dòng)態(tài)接收?qǐng)D片名。完成下載 。

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

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的開(kāi)始"/"代表項(xiàng)目根目錄

rd.forward(request, response);

}else{

//真正下載: 把服務(wù)器硬盤(pán)的照片文件讀取出來(lái)發(fā)送給客戶(hù)端(設(shè)置響應(yīng)頭)

//獲取真實(shí)的文件

String realName=pm.getRealName();

realName=URLEncoder.encode(realName, "utf-8");//如果是中文名必須轉(zhuǎn)碼,防止文件名中文亂碼

// InputStream in=DownServlet.class.getClassLoader().getResourceAsStream(realName);

//設(shè)置顯示類(lèi)型為下載

response.setContentType("application/force-download");

//設(shè)置響應(yīng)頭

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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

A Servlet");

out.println("

");

out.print(" 不支持");

out.println(" ");

out.println("");

out.flush();

out.close();

}

}

頁(yè)面顯示效果:

配置文件web.xml

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

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

數(shù)據(jù)庫(kù):photos.xml

值對(duì)象:PhotoModel.java

package cn.hncu.domain;

public class PhotoModel {

//photo值對(duì)象

private String id;//UUID

private String realName;//照片真實(shí)文件名

private String ext;//擴(kuò)展名

private String dir;//文件打撒后存儲(chǔ)的目錄

private String dt;//上傳日期時(shí)間

private String ip;//上傳客戶(hù)端的ip地址

private String desc;//照片說(shuō)明

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層:這里簡(jiǎn)寫(xiě)了,只寫(xiě)了實(shí)現(xiàn)類(lèi)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);

}

}

工具類(lèi):

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中當(dāng)前項(xiàng)目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;

}

}

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的java相册_精致小巧的java相册制作方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。