Java 使用来自jsp的request.getParameter在servlet中获取空值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23391520/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 22:46:32  来源:igfitidea点击:

null values getting in servlet using request.getParameter from jsp

javajspservlets

提问by Ronak Joshi

I have a jsp form as below,

我有一个如下的jsp表单,

<form action="../Registration" enctype="multipart/form-data">
    <label> First Name:</label>
    <input type="text" class="large-field" name="firstname">

    <label> Last Name:</label>
    <input type="text" class="large-field" name="lastname">

    <label> Gender:</label>
    <label class="radio">
    <input type="radio" name="gender"  value="Male">
        Male
    </label>
    <label class="radio">
    <input type="radio" name="gender" value="Female">
        FeMale
    </label>


    <label> Address :</label>
    <input type="text" class="large-field" name="address">


    <label> City:</label>
    <input type="text" class="large-field" name="city">


    <label> College:</label>
    <select class="large-field" name="college">
    <option value=""> --- Please Select --- </option>
    <option value="XYZ">XYZ</option>

    </select>

    <label> Branch:</label>
    <select class="large-field" name="branch">
        <option value=""> --- Please Select --- </option>
        <option value="ABC">ABC</option>
    </select>
    <br />
    <label> Mobile Number:</label>
    <input type="text" class="large-field" name="mobilenumber">
    <br />

    <label> Email_ID:</label>
    <input type="text" class="large-field" name="email">
    <br />
    <label> Password:</label>
    <input type="password" class="large-field"  name="password">
    <br />
    <label> Re-Enter Password:</label>
    <input type="password" class="large-field"  name="repassword">
    <br />
    <label> Profile Picture:</label>
    <input type="file" name="file">
    <br />

    <button class="btn btn-primary">Continue</button>
</form>

Then this calls my servlet which is coded as below:

然后这会调用我的 servlet,其编码如下:

package Client_Controller;

import CommonData.ComData;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;

import java.util.*;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.RequestDispatcher;

import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileUploadException;


public class Registration extends HttpServlet {

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

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            String f_name = request.getParameter("firstname");
            String l_name = request.getParameter("lastname");
            String gender = request.getParameter("gender");
            String address = request.getParameter("address");
            String city = request.getParameter("city");
            String college = request.getParameter("college");
            String branch = request.getParameter("branch");
            String mobile = request.getParameter("mobilenumber");
            String email = request.getParameter("email");
            String password = request.getParameter("password");
            String filePath = request.getParameter("file").toString();

            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/table", "root", "root");
            s = con.createStatement();
            s.execute("insert into tblmembers(first_name,last_name,sex,address,city,college_name,branch,mobile,email_id,password) " +
                    "values('" + f_name + "','" + l_name + "','" + gender + "','" + address + "','" + city + "','" + college + "','" + branch + "','" + mobile + "'," + email + ",'" + password + "')");

            out.write("Suceess");
        } catch (Exception e) {
            out.write("" + e);
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

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

        processRequest(request, response);
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        processRequest(request, response);
    }


    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

When data is inserted all values are getting null. I have tried lots of things but not working so need some help. I using bootstrap as front end.

插入数据时,所有值都为空。我已经尝试了很多东西但没有工作所以需要一些帮助。我使用引导程序作为前端。

采纳答案by Luiggi Mendoza

When using enctype="multipart/form-data"you cannot retrieve parameters using plain request.getParameter. Looks like you're using Servlet 2.5 or prior, so you need to parse the request using a third party library that process it by knowing the enctype. This can be easilydone using Apache Common FileUploadlibrary.

使用时,enctype="multipart/form-data"您无法使用 plain 检索参数request.getParameter。看起来您使用的是 Servlet 2.5 或更早版本,因此您需要使用第三方库来解析请求,该库通过知道 enctype 来处理它。这可以使用Apache Common FileUpload轻松完成。

Note that this problem should not arise if using Servlet 3.0 or newer.

请注意,如果使用 Servlet 3.0 或更新版本,则不应出现此问题。

More info:

更多信息:

Also, you have to add method="POST"to your current form to make it work. You cannot upload files using GET request.

此外,您必须添加method="POST"到当前表单中才能使其工作。您不能使用 GET 请求上传文件。

回答by Susie

Change the following button to type submit and try again. My guess is your button is not submitting the form.

更改以下按钮以键入提交并重试。我的猜测是您的按钮未提交表单。

<button type="submit" class="btn btn-primary">Continue</button>

回答by Karibasappa G C

use below one to access file data

使用下面的一个来访问文件数据

  public static Hashtable getParamsFromMultipartForm(HttpServletRequest req) throws FileUploadException {
        Hashtable ret = new Hashtable();
        List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(req);
        for (FileItem item : items) {
            if (item.isFormField()) {
                ret.put(item.getFieldName(), item.getString());
            }
        }
        return ret;
    }

And then, whenever i need the value of any of my params, just write as below

然后,每当我需要任何参数的值时,只需写如下

/at the beginning of a servlet

/ 在 servlet 的开头

Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req);


String myParamFromForm = multipartParams.get("myParamFromForm");

回答by Kapil Jituri

Don't know why but it worked for me when I provided 'name' attribute to input text.

不知道为什么,但是当我为输入文本提供“名称”属性时它对我有用。

My Old codewhich returned null in Servlet:

我在 Servlet 中返回 null 的旧代码

<input id="closure" type="text" size="25"><a
                        href="javascript:NewCal('closure','ddmmyyyy')"><img
                            src="drawables/cal.gif" width="16" height="16" border="0"
                            alt="Pick a date"></a>

Just putting name="closure"worked for me. Now it perfectly returns value of this input text into servlet.

只是把name="closure"对我有用。现在它完美地将此输入文本的值返回到 servlet。

<input id="closure" name="closure" type="text" size="25"><a
                        href="javascript:NewCal('closure','ddmmyyyy')"><img
                            src="drawables/cal.gif" width="16" height="16" border="0"
                            alt="Pick a date"></a>

And I am getting value of this input text in Servlet as follows:

我在 Servlet 中获取此输入文本的值如下:

String closure = request.getParameter("closure");