首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“重新提交”之后,如何将新的表单参数从jsp传递给servlet?

问在“重新提交”之后,如何将新的表单参数从jsp传递给servlet?
EN

Stack Overflow用户
提问于 2013-02-19 21:58:14
回答 1查看 2.6K关注 0票数 1

为了简单起见,我有一个jsp文件,其中有一个小表单,其中包含两个选择选项、一个文件上传选项和一个提交按钮。servlet接收这些值,对其进行处理(即将文件放入数据库),然后通过request属性显示一条消息,并重定向回原始jsp页面。

我的问题是,当用户尝试从同一jsp页面上传另一个文件时,servlet接收的是从上一次提交中选择的选择值,而不是新的提交尝试。在servlet已经重定向回jsp之后,同一个用户如何上传具有不同select选项值的另一个文件呢?

同样,在再次成功上载之前,如何清除第一次提交时打印的成功消息?目前,成功消息保留在页面上,即使用户已经开始选择要提交的新值。

相关代码如下:

JSP文件

代码语言:javascript
复制
<body >

<h3 style="color:red">${msg4}</h3>

<form id="uploadForm" method="post" action="UploadServlet"enctype="multipart/form-data">
<br />

<% UserBean currentUser = (UserBean)(session.getAttribute"currentSessionUser"));%>

Course Number:
 <select name="courseNo">
   <option value="CS1">CS1</option>
   <option value="CS2">CS2</option>
 </select> 
<br />
Assignment Number:
 <select name="hwNo" id="hwNo" >
   <option value="1">1</option>
   <option value="2">2</option>
   <option value="3">3</option>
 </select> 
<br />
Assignment (must be a zip file): <input type="file" name="dataFile"     id="fileChooser" /><br />

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

<h3 style="color:red">${msg2}</h3>

</body>

相关的Servlet代码

代码语言:javascript
复制
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        HttpSession session = request.getSession(true);
        UserBean currentUser = (UserBean)(session.getAttribute("currentSessionUser"));
        String uName = currentUser.getUsername();


        if (!ServletFileUpload.isMultipartContent(request))
        {return;}


        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(THRESHOLD_SIZE);
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(MAX_FILE_SIZE);
        upload.setSizeMax(REQUEST_SIZE);


        try 
        { 
            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
            for (FileItem item : items) 
            {
                if (item.isFormField()) 
                {
                    String fieldname = item.getFieldName();

                    if(fieldname.equals("courseNo"))
                        courseNo = item.getString();
                    if(fieldname.equals("hwNo"))
                    {
                        hwNo = item.getString();
                        homeworkNo = Integer.parseInt(hwNo);    
                    }   

                Boolean exists = checkIfHWNoExists(homeworkNo, uName);
                if(exists)
                {
                    request.setAttribute("msg4", "You've already made a submission for " +
                                        "assignment number " + homeworkNo +"." +
                                        "<br />If you need to change your submission, " +
                                        "please contact your teacher.");
                    request.getRequestDispatcher("/upload.jsp").forward(request, response);
                    return;
                }

            }

            if (!item.isFormField())
            {
                (item.getName()).getName();
                File storeFile = new File(item.getName());
                String fileName = storeFile.getName();
                if(!fileName.endsWith(".zip"))
                {
                    request.setAttribute("msg", "Must be a zip file!  Try again!");
                    request.getRequestDispatcher("/upload.jsp").forward(request, response);
                    return;
                }


                else
                {
                    String mimeType = new MimetypesFileTypeMap().getContentType(storeFile);
                                                            //for putting file into database
                    putFileIntoDB(uName, homeworkNo, fileName, mimeType, storeFile);


                    request.setAttribute("msg2", "File uploaded successfully!");
                    request.getRequestDispatcher("/upload.jsp").forward(request, response);
                }
            }
        }


            //request.setAttribute("message", "Upload has been done successfully!");

   }
    catch (Exception ex)
    {
        request.setAttribute("message", "There was an error: " + ex.getMessage());
    }

    ("/message.jsp").forward(request, response);


        }
EN

回答 1

Stack Overflow用户

发布于 2013-02-20 22:08:09

问题出在servlet中的循环中。这里是修正后的doPost方法,完全删除了循环,因为它不是必需的。

代码语言:javascript
复制
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    String courseNo;
    int homeworkNo;

    HttpSession session = request.getSession(true);
    UserBean currentUser = (UserBean)(session.getAttribute("currentSessionUser"));
    String uName = currentUser.getUsername();

    if (!ServletFileUpload.isMultipartContent(request))
    {return;}


    try 
    { 
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

        courseNo = items.get(0).getString();
        homeworkNo = Integer.parseInt(items.get(1).getString());    
        if(checkIfHWNoExists(courseNo, homeworkNo, uName))
        {
          request.setAttribute("msg4", "You've already made a submission for Course Number " + courseNo + ", "+
                                    "Assignment number " + homeworkNo +"." +
                                    "<br />If you need to change your submission, " +
                                    "please contact your teacher.");
                request.getRequestDispatcher("/upload.jsp").forward(request, response);
                return;
            }

         else//ok to add new HW, it doesn't exist
         {
          File storeFile = new File(items.get(2).getName());
          String fileName = storeFile.getName();

          if(!fileName.endsWith(".zip"))
          {
              request.setAttribute("msg", "Must be a zip file!  Try again!");
              request.getRequestDispatcher("/upload.jsp").forward(request, response);
          return;
          }

            else
            {  
                String mimeType = new MimetypesFileTypeMap().getContentType(storeFile); //for putting file into database
                      putFileIntoDB(uName, courseNo, homeworkNo, fileName, mimeType, storeFile);

              request.setAttribute("msg2", "File uploaded successfully!");
              request.getRequestDispatcher("/upload.jsp").forward(request, response);
            }
         }

    }//try
    catch (Exception ex)
     {
       request.setAttribute("msg", "There was an error: " + ex.getMessage());
       request.getRequestDispatcher("/upload.jsp").forward(request, response);
      }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14959306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档