1. user.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'user.jsp' starting page</title>
</head>
<body>
<form name="form1" action="${pageContext.request.contextPath}/UserUploadServlet" method="post" enctype="multipart/form-data">
用户名:<input name="username" type="text" /><br/>
性别:<input name="sex" type="radio" value="男" />男<br/>
<input name="sex" type="radio" value="女" />女<br/>
电话: <input name="tel" type="text" /><br/>
上传的文件:<input name="filepath" type="file" /><br/>
<input value="上传" type="submit" /><br/>
</form>
<a href="${pageContext.request.contextPath }/UserListServlet">查看</a>
</body>
</html>
2. userList.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userList.jsp' starting page</title>
</head>
<body>
用户信息查询:<br/>
<table border="1">
<tr>
<td>用户名</td>
<td>性别</td>
<td>电话</td>
<td>文件名称</td>
<td>下载</td>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.username }</td>
<td>${user.sex }</td>
<td>${user.tel }</td>
<td>${user.filename }</td>
<td>
<c:url value="/DownUserServlet" var="url">
<c:param name="filepath" value="${user.filepath }"></c:param>
<c:param name="filename" value="${user.filename}"></c:param>
</c:url>
<a href="${url }">${user.filepath }下载</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
3. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<!-- 配置标签库 -->
<jsp-config>
<taglib>
<!-- 在jsp页面使用的tld文件的名称,看成一个别名 -->
<taglib-uri>/WEB-INF/tag.tld</taglib-uri>
<!-- 标签库在当前web应用的完整路径,/表示从更路径开始 -->
<taglib-location>/WEB-INF/tld/tag.tld</taglib-location>
</taglib>
<taglib>
<!-- 在jsp页面使用的tld文件的名称,看成一个别名 -->
<taglib-uri>/WEB-INF/elfunction.tld</taglib-uri>
<!-- 标签库在当前web应用的完整路径,/表示从更路径开始 -->
<taglib-location>/WEB-INF/tld/elfunction.tld</taglib-location>
</taglib>
</jsp-config>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>day09.LoginServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>GetCGIServlet</servlet-name>
<servlet-class>day09.GetCGIServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ReadCookieServlet</servlet-name>
<servlet-class>day09.ReadCookieServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LastDateServlet</servlet-name>
<servlet-class>day09.LastDateServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>AddProductServlet</servlet-name>
<servlet-class>day10Shopping.AddProductServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RemoveProductServlet</servlet-name>
<servlet-class>day10Shopping.RemoveProductServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UserUploadServlet</servlet-name>
<servlet-class>day16.UserUploadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UserListServlet</servlet-name>
<servlet-class>day16.UserListServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>DownUserServlet</servlet-name>
<servlet-class>day16.DownUserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetCGIServlet</servlet-name>
<url-pattern>/servlet/GetCGIServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ReadCookieServlet</servlet-name>
<url-pattern>/servlet/ReadCookieServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LastDateServlet</servlet-name>
<url-pattern>/LastDateServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddProductServlet</servlet-name>
<url-pattern>/servlet/AddProductServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RemoveProductServlet</servlet-name>
<url-pattern>/servlet/RemoveProductServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UserUploadServlet</servlet-name>
<url-pattern>/UserUploadServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UserListServlet</servlet-name>
<url-pattern>/UserListServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DownUserServlet</servlet-name>
<url-pattern>/DownUserServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4. User.java
package day16.bean;
public class User {
private Integer id;
private String username;
private String sex;
private String tel;
private String filepath;
private String filename;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFilepath() {
return filepath;
}
public void setFilepath(String filepath) {
this.filepath = filepath;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
5. DaoUserImpl
package day16.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import day16.DBManager;
import day16.bean.User;
public class DaoUserImpl {
public void saveUser(User user) throws Exception {
DBManager dbManager=null;
Connection conn=null;
PreparedStatement pstmt=null;
try {
dbManager=new DBManager();
conn=dbManager.getConnection();
//组织Sql语句
String sql="insert into userfile (id,username,sex,tel,filepath,filename)values(null,?,?,?,?,?)";
pstmt=(PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getSex());
pstmt.setString(3, user.getTel());
pstmt.setString(4, user.getFilepath());
pstmt.setString(5, user.getFilename());
pstmt.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
dbManager.closeResource(conn, pstmt);
}
}
public List<User> findAllUser() throws Exception {
DBManager dbManager=null;
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
List<User> list=new ArrayList<User>();
try {
dbManager=new DBManager();
conn=dbManager.getConnection();
//组织Sql语句
String sql="select id,username,sex,tel,filepath,filename from userfile order by id ";
pstmt=(PreparedStatement) conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
User u=new User();
u.setId(rs.getInt(1));
u.setUsername(rs.getString(2));
u.setSex(rs.getString(3));
u.setTel(rs.getString(4));
u.setFilepath(rs.getString(5));
u.setFilename(rs.getString(6));
list.add(u);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
dbManager.closeResource(conn, pstmt,rs);
}
return list;
}
}
6. UserListServlet
package day16;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import day16.bean.User;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import day16.dao.impl.DaoUserImpl;
public class UserListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
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();
DaoUserImpl daoUser=new DaoUserImpl();
List<User> list=null;
try {
list = daoUser.findAllUser();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("list", list);
request.getRequestDispatcher("/userList.jsp").forward(request, response);
}
}
7. DownUserServlet
package day16;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownUserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取路径
String filepath=request.getParameter("filepath");
//获取文件名称
String filename=request.getParameter("filename");
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8"));
//获取真实路径
String realPath=this.getServletContext().getRealPath(filepath);
realPath=realPath+"/";
//读取文件输入流
FileInputStream fis=new FileInputStream(realPath);
BufferedInputStream bis=new BufferedInputStream(fis);
//定义输出流
//从响应对象中获取输出流
OutputStream fos=response.getOutputStream();
BufferedOutputStream bos= new BufferedOutputStream(fos);
//从输入流中读取写入到输出流
byte[] b= new byte[200*1024];
int len=0;
while((len=bis.read(b))!=-1){
bos.write(b, 0, len);
}
//关闭
bis.close();
bos.close();
}
}
8.UserUploadServlet
package day16;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import day16.bean.User;
import day16.dao.impl.DaoUserImpl;
public class UserUploadServlet extends HttpServlet {
//定义哪些后缀类型的文件能被接受
String allowedExt[]=new String[]{"doc","jpg","mp3"};
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
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();
//保存表单域的map
Map<String,String> formMap= new HashMap<String,String>();
//保存文件域的map
Map<String,String> fileMap= new HashMap<String,String>();
//如果客户端请求 enctype="multipart/form-data" 返回true
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints表示上传文件存储在内存空间的大小,若上传文件大小大于1024B,存储在硬盘D:/temp下,否则存储在内存中
((DiskFileItemFactory) factory).setSizeThreshold(1024);
((DiskFileItemFactory) factory).setRepository(new File("D:/temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try {
//限制文件上传的大小
long MAXSIZE=1024*1024;
upload.setFileSizeMax(MAXSIZE);
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// Process a regular form field
//请输入文件名:<input type="text" name="filename"/><br/>
String name = item.getFieldName();
String value = item.getString("utf-8");
System.out.println("isFormField: "+name+" "+value);
formMap.put(name, value);
} else {
// Process a file upload
//请选择要上传的文件:<input type="file" name="filepath" /><br/>
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();//上传的文件类型
boolean isInMemory = item.isInMemory();//true 临时保存在内存;false保存在硬盘
long sizeInBytes = item.getSize();
System.out.println("file upload: "+fieldName+" "+fileName);
fileMap.put(fieldName, fileName);
/************************************************/
/* //获取上传文件的名称:方法一
File uploadedFile = new File("D:/"+fileName);
//把上传的内容写到一个文件中
item.write(uploadedFile);*/
/************************************************/
//上传的文件保存到pics文件夹下
String realPath=this.getServletContext().getRealPath("/user");
System.out.println("realPath= "+realPath);
//获取后缀名
String fileNameEnd=fileName.substring(fileName.lastIndexOf(".")+1);
System.out.println("fileNameEnd= "+fileNameEnd);
//阻止某些类型的文件
if(fileNameEnd!=null){
boolean flag=Arrays.asList(allowedExt).contains(fileNameEnd);
if(!flag){
throw new RuntimeException("您上传的文件类型["+fileNameEnd+"],本系统不支持");
}
}
realPath=realPath+"/"+fileName;
File uploadedFile = new File(realPath);
//把上传的内容写到一个文件中
item.write(uploadedFile);
/************************************************/
/*保存固定的文件名
* //定义一个file指向一个具体的文件
File uploadedFile = new File("D:/a.jpg");
//把上传的内容写到一个文件中
item.write(uploadedFile);*/
/************************************************/
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//封装信息到javaBean
User user=new User();
user.setUsername(formMap.get("username"));
user.setSex(formMap.get("sex"));
user.setTel(formMap.get("tel"));
user.setFilepath("/user");
user.setFilename(fileMap.get("filepath"));
DaoUserImpl daoUser = new DaoUserImpl();
try {
daoUser.saveUser(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
9. DBManager
package day16;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class DBManager {
private String url="jdbc:mysql://localhost:3306/test";
Connection conn=null;
public DBManager() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
}
public Connection getConnection() throws SQLException{
conn=(Connection) DriverManager.getConnection(url, "root", "");
return conn;
}
public void closeResource(Connection conn, PreparedStatement pstmt,
ResultSet rs) throws SQLException {
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
public void closeResource(Connection conn, Statement pstmt,
ResultSet rs) throws SQLException {
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
public void closeResource(Connection conn, PreparedStatement pstmt) throws SQLException {
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
}