首页 > 解决方案 > jsp表单文本+文件处理

问题描述

bookReg.jsp

<%@page import="classes.BooksDTO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional" 
"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>
<link type="text/css" href="css/mainStyle.css">
</head>
<body>
<%
//D:\Hayden\учеба\джава\JavaBigData\readers\WebContent\img - folder directory
%>

<form action="bookRegProc.jsp" method="post" enctype="multipart/form-data">
Title <input type="text" name="title"> <br>
Plot <textarea rows="30" cols="40" name="plot"></textarea> <br>
<input type="hidden" name="rating" value="0"> <br>
Author <input type="text" name="author"> <br>
Publisher <input type="text" name="publisher"> <br>
Genre <input type="text" name="genre"> <br>
Publication date <input type="text" name="date"> <br>
Cover <input type="file" name="cover" size="50"> <br>

<input type="submit" value="Register"> <br>
</form>


</body>
</html>

bookRegProc.jsp

<%@page import="classes.Uploader"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="java.io.File"%>
<%@page import="classes.BooksDTO"%>
<%@page import="classes.BooksDAO"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <%
        Uploader upload = new Uploader();
        upload.doPost(request, response);
    %>

</body>
</html>

上传者.java

package classes;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
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 javax.servlet.http.Part;

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;

public class Uploader extends HttpServlet {

    BooksDTO dto = null;
    BooksDAO dao = new BooksDAO();
    String title = null;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String title = request.getParameter("title"); // Retrieves <input type="text" name="description">
        String plot = request.getParameter("plot");
        String rating = request.getParameter("rating");
        String author = request.getParameter("author");
        String publisher = request.getParameter("publisher");
        String genre = request.getParameter("genre");
        String date = request.getParameter("date");
        Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
        /*String fileName = title;
        InputStream fileContent = filePart.getInputStream();*/
        // ... (do your job here)
        //DTO process
        BooksDTO dto = new BooksDTO();
        BooksDAO dao = new BooksDAO();

        dto.setTitle(title);
        dto.setAuthor(author);
        dto.setDate(date);
        dto.setGenre(genre);
        dto.setPlot(plot);
        dto.setPublisher(publisher);
        dto.setRating(rating);

        try {
            dao.insert(dto);
//this inserts all the parameters into database
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //File process
        File file;
        int maxFileSize = 5000 * 1024;
        int maxMemSize = 5000 * 1024;
        String filePath = "D:/Hayden/Eclipse workspace/bigdata/readers/WebContent/img/";
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(maxMemSize);
        factory.setRepository(new File("C:/temp"));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxFileSize);
        try {
            FileItem fi = (FileItem) filePart;
            if(!fi.isFormField()) {
                file = new File(filePath + dto.getTitle() + ".jpg");
                fi.write(file);
            }

        }catch(Exception ex) {
            System.out.println(ex);
        }


    }

}

我想传递文本参数bookReg.jsp以将其注册到我的数据库中。我检查了插入数据库的方法完全正常。但在doPost方法中Uploader.javarequest.getParameter传递null给每个字符串。我搜索了如何将文本传递给 servlet 好几天,最后我按照以下说明进行操作:如何使用 JSP/Servlet 将文件上传到服务器?(第一个答案)

但它仍然只传递 null 。正如我所写的,在 jsp 和 java 类中使用 request.getParameter 传递参数有什么区别?

即使我遵循了我遵循的页面中第一个答案的说明,是什么导致了同样的问题?(我正在使用tomcat 8.5和eclipse氧气)

标签: javajsp

解决方案


推荐阅读