java - request.getParameter() 在 servlet 中返回 null,除了一个参数

标签 java jsp servlets jakarta-ee java-ee-7

我试图从提交的表单中获取值,我尝试了在互联网上可以找到的所有内容,但是当我使用 request.getParameter() 时我仍然得到 null,它只返回“bulkname”的值所有其他变量都给我 null,我不知道为什么。

此表单应该从用户处获取值并将其提交到 servlet,以便我可以将值和文件插入数据库中。

这是我的代码。

bulkCheckServlet.java

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package source;
 
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDateTime;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
 
/**
 *
 * @author Farouk
 */
@WebServlet(name = "bulkCheckServlet", urlPatterns = {"/bulkCheckServlet"})
@MultipartConfig
public class bulkCheckServlet extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
            String bulkname = request.getParameter("bulkname");
            String quota = request.getParameter("quota");//Integer.parseInt(request.getParameter("quota"));
            System.out.println(quota);
            String provider = request.getParameter("provider");
 
            InputStream inputStream = null; // input stream of the upload file
 
            // obtains the upload file part in this multipart request
            Part filePart = request.getPart("file");
            if (filePart != null) {
                // prints out some information for debugging
                System.out.println(filePart.getName());
                System.out.println(filePart.getSize());
                System.out.println(filePart.getContentType());
 
                // obtains input stream of the upload file
                inputStream = filePart.getInputStream();
            }
 
            Connection conn = null; // connection to the database
            String message = null;  // message will be sent back to client
 
            try {
                // connects to the database
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/smsglobal", "root", "123456789");
 
                // constructs SQL statement
                String sql = "INSERT INTO smsbulk (id,quota,provider,bulkname,date,file) values (1,?,?,?,?,?);";
                PreparedStatement statement = conn.prepareStatement(sql);
                statement.setString(1, quota);
                statement.setString(2, provider);
                statement.setString(3, bulkname);
                statement.setString(4, LocalDateTime.now().toString());
                System.out.println(sql);
 
                if (inputStream != null) {
                    // fetches input stream of the upload file for the blob column
                    statement.setBlob(5, inputStream);
                }
 
                // sends the statement to the database server
                int row = statement.executeUpdate();
                if (row > 0) {
                    message = "File uploaded and saved into database";
                }
            } catch (SQLException ex) {
                message = "ERROR: " + ex.getMessage();
                ex.printStackTrace();
            } finally {
                if (conn != null) {
                    // closes the database connection
                    try {
                        conn.close();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
                // sets the message in request scope
                request.setAttribute("Message", message);
 
                // forwards to the message page
                getServletContext().getRequestDispatcher("/Campaign.jsp").forward(request, response);
            }
    }
 
    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

测试.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Test</title>
    </head>
    <body>
        <form action="bulkCheckServlet" method="post" enctype="multipart/form-data">
            Provider
            <br/>
            <input type="text" id="provider" name="provider"/>
            <br/>
            <br/>
            Bulk Name
            <br/>
            <input type="text" name="bulkname" id="bulkname"/>
            <br/>
            <br/>
            Quota
            <br/>
            <input type="text" name="quota" id="quota"/>
            <br/>
            <br/>
            File
            <br/>
            <input type="file" name="file" id="file"/>
            <br/>
            <input type="submit" value="Submit" />
            <br/>
        </form>
    </body>
</html>

最佳答案

用以下代码替换您的 servlet。希望这对您有帮助。

/*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package source;

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.time.LocalDateTime;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;

    /**
     *
     * @author Farouk
     */
    @WebServlet(name = "bulkCheckServlet", urlPatterns = {"/bulkCheckServlet"})
    @MultipartConfig
    public class bulkCheckServlet extends HttpServlet {

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

                String bulkname = request.getParameter("bulkname");
                String quota = request.getParameter("quota");//Integer.parseInt(request.getParameter("quota"));
                System.out.println(quota);
                String provider = request.getParameter("provider");

                InputStream inputStream = null; // input stream of the upload file

                // obtains the upload file part in this multipart request
                Part filePart = request.getPart("file");
                if (filePart != null) {
                    // prints out some information for debugging
                    System.out.println(filePart.getName());
                    System.out.println(filePart.getSize());
                    System.out.println(filePart.getContentType());

                    // obtains input stream of the upload file
                    inputStream = filePart.getInputStream();
                }

                Connection conn = null; // connection to the database
                String message = null;  // message will be sent back to client

                try {
                    // connects to the database
                    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/smsglobal", "root", "0168308330");

                    // constructs SQL statement
                    String sql = "INSERT INTO smsbulk (id,quota,provider,bulkname,date,file) values (?,?,?,?,?,?);";
                    PreparedStatement statement = conn.prepareStatement(sql);
                    statement.setString(1, quota);
                    statement.setString(2, provider);
                    statement.setString(3, bulkname);
                    statement.setString(4, LocalDateTime.now().toString());
                    System.out.println(sql);

                    if (inputStream != null) {
                        // fetches input stream of the upload file for the blob column
                        statement.setBlob(5, inputStream);
                    }

                    // sends the statement to the database server
                    int row = statement.executeUpdate();
                    if (row > 0) {
                        message = "File uploaded and saved into database";
                    }
                } catch (SQLException ex) {
                    message = "ERROR: " + ex.getMessage();
                    ex.printStackTrace();
                } finally {
                    if (conn != null) {
                        // closes the database connection
                        try {
                            conn.close();
                        } catch (SQLException ex) {
                            ex.printStackTrace();
                        }
                    }
                    // sets the message in request scope
                    request.setAttribute("Message", message);

                    // forwards to the message page
                    getServletContext().getRequestDispatcher("/Campaign.jsp").forward(request, response);
                }
        }

        /**
         * Handles the HTTP <code>POST</code> method.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    }

关于java - request.getParameter() 在 servlet 中返回 null,除了一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42068187/

相关文章:

java - 如何忽略/跳过包含少量测试方法和 BeforeClass 和 AfterClass 方法的完整 testng 类

java - 三元搜索树的顺序遍历

java - 客户端发送的请求在语法上不正确。在spring中使用@RequestParam

java - 通过 Java 小程序加密表单上的文本字段;浏览器正在缓存加密文本;如何缓存明文?

JavaScript、JSP 和 JSON 不适用于 POST

java - Servlet写入文件末尾包含二进制文件

java - 从 REST Web 服务在 Servlet 之前调用过滤器

java - 单元测试spring-kafka消费者时如何在KafkaEmbedded中设置端口

java - Android内存使用显示错误信息

servlets - spring mvc如何绕过*.html文件的DispatcherServlet?