混合表单文件上传到数据库(基于TOMCAT)
在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,就像混合表单在上传完毕之后需要将提交的基本信息插入数据库。
在这个demo中需要用到这个架包来帮助实现
1.定义一个公共类实现文件上传(BaseServlet)
上传是一个公共的操作,可能在很多个servlet中都要涉及到上传,比如在Empservlet中要上传雇员的照片,在ManagerServlet中要上传管理员的照片,此时就需要将上传的操作定义到一个公共父类。
package com.sxt.mvcpro.servlet;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.UUID;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.SmartUpload; @SuppressWarnings("serial")
public abstract class BaseServlet extends HttpServlet {
SmartUpload smart = null;
String newFileName = null; public void saveFile(HttpServletRequest req, HttpServletResponse resp) {
smart = new SmartUpload();
ServletConfig config = super.getServletConfig();
try {
// 初始化
smart.initialize(config, req, resp);
smart.setAllowedFilesList("jpg,png,gif");
smart.setMaxFileSize(1024 * 1024 * 1024 * 5);
smart.setTotalMaxFileSize(1024 * 1024 * 1024 * 5 * 10);
smart.upload();
// 取得上传文件的路径信息
String filepath = req.getServletContext().getRealPath("/" + this.getDir());
File file = new File(filepath);
if (!file.exists()) {
file.mkdirs();
}
if (smart.getFiles().getFile(0).getSize() > 0) {// 有文件才进行上传
String ext = smart.getFiles().getFile(0).getFileExt();
// 生成新的文件名
String fileName = UUID.randomUUID().toString().replaceAll("-", "");
// 保存文件(按照新文件名保存)
newFileName = this.getDir() + fileName + "." + ext;
smart.getFiles().getFile(0).saveAs(filepath + fileName + "." + ext);
} else {
throw new Exception("文件为空");
}
} catch (Exception e) {
e.printStackTrace();
}
} public <T> T initObj(HttpServletRequest req, Class<T> clz)
throws IllegalArgumentException, ParseException, UnsupportedEncodingException {
// req.setCharacterEncoding("utf-8");
T t = null;
try {
t = clz.newInstance();
Field[] fs = clz.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
fs[i].setAccessible(true);
// 取得属性名
String fname = fs[i].getName();
// 从request内置对象中取得相应的值
String fvalue = null;
if (this.smart == null) {
fvalue = req.getParameter(fname);
} else {
fvalue = new String(this.smart.getRequest().getParameter(fname).getBytes("GBK"), "utf-8");
}
if (fvalue == null) {
continue;
}
System.out.println(fname+"==" + fvalue);
if ("Double".equals(fs[i].getType().getSimpleName())) {
fs[i].set(t, Double.valueOf(fvalue));
} else if ("Integer".equals(fs[i].getType().getSimpleName())) {
fs[i].set(t, Integer.parseInt(fvalue));
} else if ("Date".equals(fs[i].getType().getSimpleName())) {// 2019-5-5
fs[i].set(t, new SimpleDateFormat("yyyy-MM-dd").parse(fvalue));
} else {
fs[i].set(t, fvalue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
} protected void removeFile(HttpServletRequest req, String fileName) {
String filePath = req.getServletContext().getRealPath("/") + fileName;
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
} //增加一个抽象方法子类必须实现(文件夹的名称交给子类决定)
public abstract String getDir();
}
定义emp类:
package com.sxt.mvcpro.vo; import java.io.Serializable;
import java.util.Date; public class Emp implements Serializable {
private Integer empno;
private String ename;
private String job;
private Double sal;
private Date hiredate;
private Integer mgr;
private Double comm;
private Integer deptno;
private String img; public Emp() {
super();
} public Integer getEmpno() {
return empno;
} public void setEmpno(Integer empno) {
this.empno = empno;
} public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} public String getJob() {
return job;
} @Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", sal=" + sal + ", hiredate=" + hiredate
+ ", mgr=" + mgr + ", comm=" + comm + ", deptno=" + deptno + ", img=" + img + "]";
} public void setJob(String job) {
this.job = job;
} public Double getSal() {
return sal;
} public void setSal(Double sal) {
this.sal = sal;
} public Date getHiredate() {
return hiredate;
} public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
} public Integer getMgr() {
return mgr;
} public void setMgr(Integer mgr) {
this.mgr = mgr;
} public Double getComm() {
return comm;
} public void setComm(Double comm) {
this.comm = comm;
} public Integer getDeptno() {
return deptno;
} public void setDeptno(Integer deptno) {
this.deptno = deptno;
} public String getImg() {
return img;
} public void setImg(String img) {
this.img = img;
} public Emp(Integer empno, String ename, String job, Double sal, Date hiredate, Integer mgr, Double comm,
Integer deptno, String img) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.sal = sal;
this.hiredate = hiredate;
this.mgr = mgr;
this.comm = comm;
this.deptno = deptno;
this.img = img; } public Emp(Integer empno, String ename, String job, Double sal, Date hiredate, Integer mgr, Double comm,
Integer deptno) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.sal = sal;
this.hiredate = hiredate;
this.mgr = mgr;
this.comm = comm;
this.deptno = deptno;
} }
调整业务层父类(EmpServlet)
package com.sxt.mvcpro.servlet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sxt.mvcpro.dao.service.IEmpService;
import com.sxt.mvcpro.dao.service.impl.EmpServiceImpl;
import com.sxt.mvcpro.factory.ServiceFactory;
import com.sxt.mvcpro.vo.Emp; @SuppressWarnings("serial")
@WebServlet(urlPatterns = { "/emp/*", "/dept/*" })
public class EmpServlet extends BaseServlet {
private IEmpService empService = (IEmpService) ServiceFactory.getInstance(EmpServiceImpl.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pathInfo = req.getPathInfo();
try {
if ("/regist".equals(pathInfo)) {
this.regist(req, resp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void regist(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {
super.saveFile(req, resp);
// 将基本信息保存到数据库中
Emp emp = null;
try {
emp = super.initObj(req, Emp.class);
emp.setImg(super.newFileName);
System.out.println(emp);
if (empService.addEmp(emp)) {
// 保存添加雇员的信息
req.setAttribute("emp", emp);
req.getRequestDispatcher("/pages/emp.jsp").forward(req, resp);
}
} catch (Exception e) {
e.printStackTrace();
} System.out.println(emp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
} @Override
public String getDir() {
return "empImgs/";
}
前端客户端输入界面代码:(newLogin.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<base href="/Mvcpro/"/>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="emp/regist" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>请注册</legend>
<br>编号:<input type="text" name="empno" value="7550"><br>
<br>姓名:<input type="text" name="ename" value="水电费"><br>
<br>职位:<input type="text" name="job" value="上单"><br>
<br>薪资:<input type="text" name="sal"value="20000"><br>
<br>领导编号:<input type="text" name="mgr"value="2343"><br>
<br>入职日期:<input type="text" name="hiredate"value="2019-07-04"><br>
<br>佣金:<input type="text" name="comm"value="1000"><br>
<br>部门编号:<input type="text" name="deptno"value="40"><br>
<br>照 片:<input type="file" name="img"><br>
<br><input type="submit" value="提交"><input type="reset" value="重置">
</fieldset>
</form>
</body>
</html>
前端客户端输出界面代码:(emp.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>
<base href="/MvcPro/"/>
</head>
<body>
<h1>
显示雇员的信息:${emp}
</h1>
<table border="1">
<tr>
<td>编号</td><td>姓名</td><td>职位</td><td>薪资</td><td>领导编号</td><td>入职日期</td><td>佣金</td><td>部门编号</td><td>照片</td>
</tr>
<tr>
<td>${emp.empno}</td><td>${emp.ename}</td><td>${emp.job}</td><td>${emp.sal}</td><td>${emp.mgr}</td><td>${emp.hiredate}</td><td>${emp.comm}</td><td>${emp.deptno}</td><td><img src="${emp.img}"></td>
</tr>
</table>
</body>
</html>
调试效果图:
混合表单文件上传到数据库(基于TOMCAT)的更多相关文章
- 表单文件上传,ajax文件上传
原创链接:http://www.cnblogs.com/yanqin/p/5345562.html html代码 index.jsp(表单文件上传) <form action="sh ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- flask中的表单文件上传
在表单中上传文件时,一定要加入 enctype="multipart/form-data" 属性 为什么要加入这个属性呢: enctype就是encodetype就是编码类型的意思 ...
- 如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程
使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: ...
- 【Demo Project】AjaxSubmit+Servlet表单文件上传和下载
一.背景 前段时间公司要求我做一个上传和下载固件的页面,以备硬件产品在线升级,现在我把这部分功能抽取出来作为一个Demo Project给大家分享. 话不多说,先看项目演示 --> 演示 源码 ...
- form表单文件上传 servlet文件接收
需要导入jar包 commons-fileupload-1.3.2.jar commons-io-2.5.jar Upload.Jsp代码 <%@ page language="jav ...
- 表单文件上传编码方式(enctype 属性)
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 如下: <form action="upload.php" method="post&quo ...
- form表单文件上传提交且接口回调显示提交成功
前端: <form method="post" enctype="multipart/form-data" id="formSubmit&quo ...
- SSM+form表单文件上传
这里介绍SSM如何配置上传文件 配置springmvc.xml: <!--配置上传下载--> <bean id="multipartResolver" class ...
随机推荐
- JavaScript学习笔记:基础知识点总结
基础概念 JavaScript(以下简称Js)中数据类型:Number 字符串 布尔值 数组 对象(Js的对象是一组由键值对组成的无序集合) Js中基础概念:变量(概念和Java中变量概念类似 指示某 ...
- C# WebService创建、发布、调用的简单例子
Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web ...
- SpringMVC 学习 八 SSM环境搭建(一) web.xml配置
第一步:导入jar包 注意包的兼容性,以后采用maven会好很多 第二步:配置web.xml 在web.xml中,主要的配置内容有以下几点 (1)spring容器配置文件的位置 <!-- spr ...
- android-如何获得当前正在运行的activity的相关信息
http://blog.csdn.net/centralperk/article/details/7269326 ActivityManager manager = (ActivityManager) ...
- 2019.02.09 bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)
传送门 题意简述:有四种面值的硬币,现在qqq次询问(q≤1000)(q\le1000)(q≤1000),每次给出四种硬币的使用上限问最后刚好凑出sss块钱的方案数(s≤100000)(s\le100 ...
- Opencv(3):基本数据类型
1.比较简单的原子类型 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z 三 ...
- illustrator画梯形
1.在空白文档上先绘制出一个长方形: 2.用鼠标点击工具箱中”自由变换“工具: 3.用鼠标指向长方形四个顶点中的任意一个,当鼠标的箭头变为相反反方向的双箭头时,再按住鼠标左键不要松手, 同时按住[sh ...
- java Concurrent包学习笔记(三):ReentrantLock
一.可重入性的理解 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大.两者都是同一个线程每进入一次,锁 ...
- matlab2016b和c# .net4.0混合编程
参考:https://www.cnblogs.com/eniac12/p/4390845.html 主要想用c#写软件界面,利用matlab绘图,或者用里面的遗传算法. 我的环境是:Win10 64位 ...
- 触摸屏 adb调试
1.adb shell cat /proc/kmsg 这条命令肯定是要放在第一位的,可以打印内核信息,对应于驱动程序中的printk语句. 如果出现以下提示,说明权限不够,可以通过adb root获取 ...