Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多部分/表单数据如何隐藏参数_Java_Jsp_Servlets_Input_Multipartform Data - Fatal编程技术网

Java 多部分/表单数据如何隐藏参数

Java 多部分/表单数据如何隐藏参数,java,jsp,servlets,input,multipartform-data,Java,Jsp,Servlets,Input,Multipartform Data,我正在开发一个web应用程序。我的jsp带有enctype=“multipart/form data”,当我提交请求时,我无法在servlet中获取请求参数 getParameter()调用将全部返回null。问题是如何克服这个问题 当它没有被加密时,这段代码可以正常工作。我知道这已经被问了很多次,但我没有找到任何直接的答案 JSP <form action="upload" method="post" enctype="multipart/form-data">

我正在开发一个web应用程序。我的jsp带有enctype=“multipart/form data”,当我提交请求时,我无法在servlet中获取请求参数

getParameter()调用将全部返回null。问题是如何克服这个问题

当它没有被加密时,这段代码可以正常工作。我知道这已经被问了很多次,但我没有找到任何直接的答案

JSP

<form action="upload" method="post" enctype="multipart/form-data">
                <input type="file" name="uploadfile[]" id="uploadfile" size="50" multiple="true" />
                <br/><br/>
                <input type="hidden" name ="e_id" value= <%=userBean.getEid%> />
                <input type="hidden" name ="Uid" value= <%=userBean.getUid()%> />
                <input type="submit" name ="button1" value="Upload" />
            </form>



Servlet

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

    int e_id =0;
    String uid = null;

    HttpSession session1 = request.getSession(true);    
    if(ServletFileUpload.isMultipartContent(request)){//process only if its multipart content
        try 
        {
          List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
          for(FileItem item : multiparts)
          {
              if(!item.isFormField())
              {
                    String name = new File(item.getName()).getName();
                    item.write( new File(UPLOAD_DIRECTORY + File.separator + name));

                    e_id = Integer.parseInt(request.getParameter("e_id"));
                    uid = request.getParameter("Uid");
              }
              else {}
...
@覆盖
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException
{
int e_id=0;
字符串uid=null;
HttpSession1=request.getSession(true);
if(ServletFileUpload.isMultipartContent(request)){//仅当其多部分内容
尝试
{
List multiparts=new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
用于(文件项:多部分)
{
如果(!item.isFormField())
{
字符串名称=新文件(item.getName()).getName();
item.write(新文件(UPLOAD_DIRECTORY+File.separator+name));
e_id=Integer.parseInt(request.getParameter(“e_id”);
uid=request.getParameter(“uid”);
}
else{}
...

您需要使用
@MultipartConfig
注释servlet,并获取所用参数的值:

Part idPart = req.getPart("e_id");
try (Scanner scanner = new Scanner(idPart.getInputStream())) {
    String idValue = idPart.nextLine(); // read from the part
} 
我在github中有一个示例,说明了如何使用它:


数据隐藏在请求
InputStream
中。请签出。它位于
else{}
块中-当
item.isFormField()时,
@NikosParaskevopoulos有趣的方法,但变量map仅返回此
内容配置:form data;name=“uploadfile[];filename}
,因此我无法使用
map.get(“id”)
,这可能是我问题的解决方案。@IanRoberts不,它在
else{}
块中也不起作用。