`

JSP+Servlet+JavaBean实现文件上传

阅读更多

利用JSP+Servlet+JavaBean实现用户管理系统中的照片上传的程序片段。

本片段主要使用的jar包有commons-fileupload.jar,commons-io.jar,jstl.jar,standard.jar,我附件上都有,请自行下载。其中fileupload和io用于上传文件。jstl和standard用于文件的页面显示。

 

费话少说,直接进入程序片段,具体的讲解会出现在程序片段中,请大家自行观察。

 

upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function checkFile(){
		//在表单中添加一个隐藏元素,目的是测试是否获得动态的用户名,以便在Servlet中接收并传递到数据库中
		var f = document.uploadForm.photo.value ;
		//用元素的id获得该元素的值,从而进行判断选择的文件是否合法
		var file = document.uploadForm.p.value ;
		if(file==null||file==""){
			alert("你还没有选择任何文件,不能上传!") ;
			return ;
		}
		if(file.lastIndexOf(".")==-1){
			alert("路径不正确!") ;
			return ;
		}
		var allImgExt = ".jpg|.jpeg|.gif|.bmp|.png|" ;
		var extName = file.substring(file.lastIndexOf(".")) ;
		if(allImgExt.indexOf(extName+"|")==-1){
			
			errMsg="该文件类型不允许上传。请上传 "+allImgExt+" 类型的文件,当前文件类型为"+extName;
            alert(errMsg);
            return;
		}
		document.uploadForm.submit() ;
	}
</script>
<style type="text/css">
<!--
.STYLE1 {
	font-family: "新宋体";
	font-weight: bold;
	font-size: 24px;
}

.STYLE3 {
	font-size: 16px
}

.STYLE4 {
	color: #FF0000
}

.STYLE6 {
	font-family: Arial, Helvetica, sans-serif
}
-->
</style>
</head>
<body>
	<jsp:useBean id="user" scope="session" class="com.ysj.model.UserBean"></jsp:useBean>
		<div align="center" class="STYLE1">
			欢迎
				<jsp:getProperty property="name" name="user" />
			光临
			<br />
			<br/>
		</div>
		<hr/>
		<%
			String message = (String)request.getAttribute("message") ;
			if(message!=null){
				out.println(message) ;
			}
			String name = user.getName() ;
		%>
//action为Servlet的URL,enctype的值必须为multipart/form-data
 <form action="uploadServlet" method="POST" enctype="multipart/form-data" name="uploadForm">
	<table align="center">
		<tr>
			<td>请选择要上传的照片:</td>
			<td><input type="file" id="p" name="<%=name %>" size="20" /></td>
		</tr>
		<tr align="center">
			<td align="center" colspan="2">
				<input type="hidden" name="photo" value="<%=name %>"/>                            
				<input type="button" value="上传" onclick="checkFile()"/>
			</td>
		</tr>
	</table>
</form>

</body>
</html>

 web.xml

  <servlet>
  	<servlet-name>uploadServlet</servlet-name>
  	<servlet-class>com.ysj.controller.UploadServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>uploadServlet</servlet-name>
  	<url-pattern>/uploadServlet</url-pattern>
  </servlet-mapping>

 UploadServlet.java

package com.ysj.controller;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

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 com.ysj.model.UserManagerService;

public class UploadServlet extends HttpServlet {
	public void init(){}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		this.doPost(request, response) ;
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		request.setCharacterEncoding("UTF-8") ;
		response.setCharacterEncoding("UTF-8") ;
		//用于存放输出的信息
		String message = "" ;
		
		//在自己的项目中构造出一个用于存放用户照片的文件夹
		String projectpath = this.getServletContext().getRealPath("/images/") ;
		//如果此文件夹不存在,则构造此文件夹
		File f = new File(projectpath) ;
		if(!f.exists()){
			f.mkdir() ;
		}
		
		//构造出文件工厂,用于存放JSP页面中传递过来的文件
		DiskFileItemFactory factory = new DiskFileItemFactory() ;
		//设置缓存大小,如果文件大于缓存大小时,则先把文件放到缓存中
		factory.setSizeThreshold(4*1024) ;
		//设置上传文件的保存路径
		factory.setRepository(f) ;
	
		//产生Servlet上传对象
		ServletFileUpload upload = new ServletFileUpload(factory) ;
		//设置可以上传文件大小的上界4MB
		upload.setSizeMax(4*1024*1024);
		
		try {
			//取得所有上传文件的信息
			List<FileItem> list = upload.parseRequest(request) ;
			Iterator<FileItem> iter = list.iterator() ;
			while(iter.hasNext()){
				FileItem item = iter.next() ;
				//如果接收到的参数不是一个普通表单(例text等)的元素,那么执行下面代码
				if(!item.isFormField()){
					String fieldName = item.getFieldName() ;//获得此表单元素的name属性
					String fileName = item.getName() ;//获得文件的完整路径
					String contentType = item.getContentType() ;//获得文件类型
					long fileSize = item.getSize() ;//获得文件大小
					// 从文件的完整路径中截取出文件名
					fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());
					
					//判断是否有图片上传
					if(!("".equals(fileName))&&!(fileName==null)){
						
						//如果上传的文件不是图片,那么不上传
						String allImgExt = ".jpg|.jpeg|.gif|.bmp|.png|" ;
						String extName = fileName.substring(fileName.indexOf("."),fileName.length()) ;
						if(allImgExt.indexOf(extName+"|")==-1){
							message = "该文件类型不允许上传。请上传 "+allImgExt+" 类型的文件,当前文件类型为"+extName;
							break ;
						}
						
						String filepath = projectpath+"\\"+fieldName ;
						File uf = new File(filepath) ;
						//更改文件的保存路径,以防止文件重名的现象出现
						if(!uf.exists()){
							uf.mkdir() ;
						}
//此输出路径为保存到数据库中photo字段的路径
						String insertDB = filepath+"\\"+fileName ;
System.out.println("文件路径:"+insertDB+":"+insertDB.length());
						

						File uploadedFile = new File(filepath, fileName);

						
						try {
							//如果在该文件夹中已经有相同的文件,那么将其删除之后再重新创建(只适用于上传一张照片的情况)
							if(uploadedFile.exists()){
								uploadedFile.delete() ;
							}
							item.write(uploadedFile);
							
							UserManagerService userService = new UserManagerService() ;
							if(userService.getOperate().updatePhoto(fieldName, insertDB)){
								message = "上传文件成功<br/><br/>基本信息如下:<br/>文件名:"+fileName
										+"<br/>文件类型:"+contentType+"<br/>文件大小:"+fileSize;
							}
							
						} catch (Exception e) {
							e.printStackTrace();
							//return ;
						}
						
					}else { 
						// 取得普通的对象(对于像文本框这种类型的使用)
						// 对于普通类型的对象暂不做处理
						//return ;
					}
				}
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			message = "文件的内容过大,请上传小于4MB的文件" ;
			e.printStackTrace();
		}
		
		request.setAttribute("message", message) ;
		request.getRequestDispatcher("upload.jsp").forward(request, response) ;
	}	
	
	public void destroy(){}
}

 完毕!

有什么疑问可以给我留言,一天之内肯定解决。

9
0
分享到:
评论
20 楼 ysj5125094 2015-04-21  
东来东去 写道
你好,在jsp代码中70行 String name=user.getName()是干什么用的,我的找不到这个方法


在Model下面有个UserBean类,相当于从session中取出个user对象。
19 楼 东来东去 2015-04-14  
你好,在jsp代码中70行 String name=user.getName()是干什么用的,我的找不到这个方法
18 楼 ysj5125094 2012-09-21  
1028156461pan 写道
UserManagerService userService = new UserManagerService() ;这个类包是实现什么的?你好,您这个工程的具体页面流程是怎样的呢

UserManagerService这个类的原代码已经在附件中包含了,就是这个UserManagerSystem_3.0.rar.具体页面的流程你可以把我的代码贴到自己的工程下面跑一下就知道了.
17 楼 ysj5125094 2012-09-21  
1028156461pan 写道
你好,请问您能把那个CSS样式的改成表单的嘛?对CSS样式不是很熟

你完全可以不加CSS样式嘛,把CSS删掉,对程序没有任何影响的,呵呵.
16 楼 1028156461pan 2012-09-13  
UserManagerService userService = new UserManagerService() ;这个类包是实现什么的?你好,您这个工程的具体页面流程是怎样的呢
15 楼 1028156461pan 2012-09-13  
你好,请问您能把那个CSS样式的改成表单的嘛?对CSS样式不是很熟
14 楼 lh870003574 2012-05-30  
牛~~~~
13 楼 ysj5125094 2012-04-08  
yys0706 写道
可不可以再写一篇把添加文件路径写入数据库,再从数据库调用的,实现文件下载功能的。。

恩,这个应该不是很难吧,呵呵.现在项目比较忙,看看什么时候有时间再添加这个功能吧.呵呵.
12 楼 yys0706 2012-03-28  
可不可以再写一篇把添加文件路径写入数据库,再从数据库调用的,实现文件下载功能的。。
11 楼 ysj5125094 2011-04-14  
花岗岩 写道
再写一篇把添加文件路径写入数据库,再从数据库调用的呗。。。


我以前还真做过这样的例子,等过一阵子有时间了,我传上来,你注意看一下.
10 楼 ysj5125094 2011-04-14  
花岗岩 写道
yuhu521fy 写道
UserManagerService userService = new UserManagerService() ; 这个service类中的方法是怎样的??

这个类包里是什么?求解


已经传上去了.
9 楼 ysj5125094 2011-04-14  
yuhu521fy 写道
UserManagerService userService = new UserManagerService() ; 这个service类中的方法是怎样的??

不好意思,那天上传的匆忙,没传我整个的工程,我现在把我以前做过的一个小例子传上去,你有时间可以看一下.
8 楼 花岗岩 2011-04-12  
yuhu521fy 写道
UserManagerService userService = new UserManagerService() ; 这个service类中的方法是怎样的??

这个类包里是什么?求解
7 楼 花岗岩 2011-04-11  
再写一篇把添加文件路径写入数据库,再从数据库调用的呗。。。
6 楼 花岗岩 2011-04-11  
我自己也在从头填写一个网站,感觉写的挺好
5 楼 yuhu521fy 2011-04-09  
UserManagerService userService = new UserManagerService() ; 这个service类中的方法是怎样的??
4 楼 ysj5125094 2010-11-08  
justice_jl 写道
O(∩_∩)O~,还行,还挺聪明的说,就是 简单的登录和增删改查,我先自己研究研究,呵呵,哎,自己的破机器,太卡了,开了MYECLIPSE,ORACLE,FIREFOX,基本就啥都干不了了,我OFFICE 还是2007的……超卡,本身就一身漏洞,呵呵,所以挺闹心的,我看看还是在A9学吧,到时候遇到问题了,再M你的说,O(∩_∩)O~

引用

恩,好的,有事儿您请话,哈哈。
3 楼 justice_jl 2010-11-08  
O(∩_∩)O~,还行,还挺聪明的说,就是 简单的登录和增删改查,我先自己研究研究,呵呵,哎,自己的破机器,太卡了,开了MYECLIPSE,ORACLE,FIREFOX,基本就啥都干不了了,我OFFICE 还是2007的……超卡,本身就一身漏洞,呵呵,所以挺闹心的,我看看还是在A9学吧,到时候遇到问题了,再M你的说,O(∩_∩)O~
2 楼 ysj5125094 2010-11-07  
justice_jl 写道
老剑,猜猜我是谁的说?改天给我讲讲哈,我看你弄的挺好!

引用

你是龙呗,嘿嘿,早就猜到了。你让我给你讲讲啥啊?会的一定全部告诉你。
1 楼 justice_jl 2010-11-07  
老剑,猜猜我是谁的说?改天给我讲讲哈,我看你弄的挺好!

相关推荐

    登录和注册的jsp页面+servlet+javaBean

    登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...

    jsp+servlet+javaBean实现MVC

    jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+...

    基于JSP+Servlet+JavaBean实现的图书管理系统

    【标题】基于JSP+Servlet+JavaBean实现的图书管理系统 在Web开发中,JSP(JavaServer Pages)、Servlet和JavaBean是常见的技术栈,它们共同构建了动态、交互式的Web应用程序,尤其适用于构建功能丰富的图书管理系统...

    jsp+servlet+javaBean实现MVC源码

    jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+...

    Jsp+Servlet+JavaBean+JDBC简单登录实例

    本实例将详细讲解如何利用JavaServer Pages (JSP)、Servlet、JavaBean以及Java Database Connectivity (JDBC) 来实现这样一个简单的登录功能。 **一、JSP(JavaServer Pages)** JSP是Java的一种动态网页技术,允许...

    jsp+Servlet+javaBean实现登录注册

    本项目“jsp+Servlet+javaBean实现登录注册”采用经典的Web开发技术栈,包括JavaServer Pages (JSP)、Servlet以及JavaBeans,结合MySQL数据库,利用集成开发环境myEclipse进行开发。下面将详细阐述这些知识点。 1. ...

    编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC

    编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean...

    jsp+servlet+javaBean实现MVC-jspmvc.zip

    jsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_...

    其他类别jsp+servlet+javaBean实现MVC-jspmvc

    [其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+...

    Java编程项目实战:jsp+servlet+javaBean实现MVC

    Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目...

    jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)

    jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc...

    JSP+servlet+javabean实现购物车

    本项目以"JSP+servlet+javabean实现购物车"为主题,旨在演示如何使用这些技术来创建一个功能完整的购物车系统。下面我们将深入探讨这些知识点。 1. **JSP(JavaServer Pages)**:JSP是一种服务器端脚本语言,用于...

    其他类别jsp+servlet+javaBean实现MVC-jspmvc.rar

    [其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他...

    [其他类别]jsp+servlet+javaBean实现MVC_jspmvc.zip

    [其他类别]jsp+servlet+javaBean实现MVC_jspmvc [其他类别]jsp+servlet+...[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc

    jsp+servlet+javabean实现网上商城项目完整源码

    网上商城项目是现代电子商务的重要组成部分,本项目采用经典的JSP、Servlet和JavaBean技术进行实现,为学习者提供了全面了解Web开发流程和实践的机会。这里我们将深入探讨这些技术如何协同工作,构建出功能完备、...

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web图书管理架构设计该系统

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)用户分为...

    基于JSP+layui+mysql+servlet+javabean实现的图书馆管理系统.zip

    基于JSP+layui+mysql+servlet+javabean实现的图书馆管理系统 基于JSP+layui+mysql+servlet+javabean实现的图书馆管理系统 基于JSP+layui+mysql+servlet+javabean实现的图书馆管理系统 基于JSP+layui+mysql+servlet+...

Global site tag (gtag.js) - Google Analytics