混合表单文件上传到数据库(基于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>照&nbsp;&nbsp;&nbsp;片:<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>

调试效果图:

原文地址:https://www.cnblogs.com/Nick7/p/10773573.html

时间: 2024-10-29 19:07:20

混合表单文件上传到数据库(基于TOMCAT)的相关文章

表单文件上传与文件下载

一.简介 使用form表单进行需要为form添加enctype="multipart/form-data" 属性,除此之外还需要将表单的提交方法改成post,如下 method="post". 二.示例 1.表单文件上传 网页代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 </head> 5 <body> 6 <form action="${pageC

Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据)

form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multipart/form-data"> {# 这里必须要请求头格式才能把上传文件的对象传过去 enctype="multipart/form-data"#} 姓名 <input type="text" name="user">

如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程

使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: <html> <head> <meta charset="utf-8"> <title>Upload File Example</title> <style> body{ width:500px; margin:20p

表单+文件上传+音频+iframe

一.表单及其标签 首先书写结构 <form action="表单提交地址" menthod=“post get提交方式”>  form只是外边框 <inpu type=“表单元素的类型” name=“键” value=“值”>                           表单元素: 文本类型: 文本框:text   可不规定value值 规定即锁定数值 密码框:password   可不规定value值 隐藏域:hidden 多行文本:textarea

文件上传(表单文件上传)

文件上传是开发一个网站最基本的一个需求功能 前台页面的设置: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerNa

from表单文件上传后页面跳转解决办法

from表单上传文件,路径跳转后,又不能转发回来. 本人的一个解决办法是.返回一段html代码,浏览器解析后后退一步,回到原来的页面并刷新. return "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/></head><body onload='JavaScript:history.

浅析http请求头常见的表单文件上传

首先先了解下application/x-www-form-urlencoded和multipart/form-data的区别 application/x-www-form-urlencoded: 是常用的表单发包方式,普通的表单提交,或者js发包,默认都是通过这种方式, <form enctype="application/x-www-form-urlencoded" action="http://" method="POST"> &

form表单文件上传

创建一个form表单 #上传文件的时候,enctype属性改成multipart/form-data <from action='' method='post' enctype='multipart/form-data'> <input type='file' name='avatar'> <input type='submit'> </from> 服务器接收 #服务器接收的时候,文件被放在request.FILES中 def file_put(reques

CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)

转载自:https://blog.csdn.net/freedomwjx/article/details/43278157 一. 首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在curl中使用--data(注意是--不是-)或者它的缩写-d即可. [plain] view plain copy curl -d "key=value&key=value" "url" 或者 [plain] view plain copy curl