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

Java 使用jsp中的request.getParameter在servlet中获取空值,java,jsp,servlets,Java,Jsp,Servlets,我有一个jsp表单,如下所示 <form action="../Registration" enctype="multipart/form-data"> <label> First Name:</label> <input type="text" class="large-field" name="firstname"> <label> Last Name:</label> <inpu

我有一个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>

名字:
姓氏:
性别:
男性
女性
地址:
城市:
学院:
---请选择--
XYZ
分支机构:
---请选择--
基础知识

手机号码:
电子邮件地址:
密码:
重新输入密码:
个人资料图片:
继续
然后调用我的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>
}
包客户端\控制器;
导入CommonData.com数据;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.tomcat.util.http.fileupload.FileItemFactory;
导入org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
导入org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
导入java.util.*;
导入java.sql.*;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入javax.servlet.RequestDispatcher;
导入org.apache.tomcat.util.http.fileupload.FileItem;
导入org.apache.tomcat.util.http.fileupload.FileUploadException;
公共类注册扩展了HttpServlet{
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
字符串f_name=request.getParameter(“firstname”);
字符串l_name=request.getParameter(“lastname”);
字符串性别=request.getParameter(“性别”);
字符串地址=request.getParameter(“地址”);
字符串city=request.getParameter(“city”);
字符串college=request.getParameter(“college”);
String branch=request.getParameter(“branch”);
字符串mobile=request.getParameter(“mobilenumber”);
字符串email=request.getParameter(“email”);
字符串密码=request.getParameter(“密码”);
字符串filePath=request.getParameter(“文件”).toString();
Class.forName(“com.mysql.jdbc.Driver”);
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/table“,”根“,”根“);
s=con.createStatement();
s、 执行(“插入TBL成员(姓名、姓氏、性别、地址、城市、学院名、分支机构、手机、电子邮件id、密码)”+
“值”(“+f_name+”、“+l_name+”、“+SENDER+”、“+address+”、“+city+”、“+college+”、“+branch+”、“+mobile+”、“+email+”、“+password+”);
写出(“成功”);
}捕获(例外e){
写出(“+e”);
}最后{
out.close();
}
}
// 
@凌驾
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
@凌驾
公共字符串getServletInfo(){
返回“简短描述”;
}// 
}
插入数据时,所有值都将变为null。我尝试了很多东西,但都不奏效,所以我需要一些帮助。我使用引导作为前端。

当使用
enctype=“multipart/form data”
时,无法使用普通的
请求.getParameter来检索参数。看起来您使用的是Servlet2.5或更早版本,因此您需要使用第三方库解析请求,该库通过了解enctype来处理请求。使用库可以很容易地做到这一点

请注意,如果使用Servlet3.0或更新版本,则不应出现此问题

更多信息:


此外,您必须将
method=“POST”
添加到当前表单中才能使其正常工作。无法使用GET request上载文件。

请将以下按钮更改为键入submit,然后重试。我猜你的按钮没有提交表单

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

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

  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;
    }
然后,每当我需要我的任何参数的值时,只需写如下

/在servlet的开头

Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req);


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

不知道为什么,但当我为输入文本提供“name”属性时,它对我起了作用

我的旧代码在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>

它正在提交表单,但无法按请求的当前状态分析参数。不,这不起作用@Susie@ElliottFrisch这并不能解决问题,因为OP在该HTML表单中有
。删除该表单后,即使是空值也无法获得@ElliottFrisch@LuiggiMendoza我没有向下滚动到那么远。很好。但如果“”有问题,为什么其他字段会获得空值@LuiggiMendoza@ElliottFrisch我也没有,只是在这个页面中搜索了文件字:PYes,我期待着它的文件上传。但其他领域的解决方案是什么@LuiggiMendoza@RonakJoshi我的答案中的链接不是为了装饰。我通过使用cos-multipart.jar得到了这个问题的解决方案。谢谢@LuiggiMendoza@RonakJoshi别忘了将最好的帖子标记为答案。@Luiggi:org.apache.tomcat.util.http.fileupload.
imports成功编译表明OP实际上使用的是Servlet 3.0,尽管方式完全错误。他的实际问题是他正在阅读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>
String closure = request.getParameter("closure");