从jsp到控制器一个接一个地调用2个表单

时间:2014-03-15 12:45:04

标签: java jsp servlets

我在jsp中创建了两个表单。第一个是上传功能,另一个是提交页面功能。我的要求是使用上传功能上传文件。如果上传成功。将文件名传递回jsp并在提交按钮上将文件名和其他详细信息一起传递给其他页面。

我的代码:            MyJsp.jsp

    </tr>
    <tr>
    <td colspan="2" rowspan="2" align="center">                         <form action="UploadDownloadFileServlet" method="post"
                                            enctype="multipart/form-data" class="CSSTableGenerator">
                                            Select the Raw Data Sheet of Customer : <input type="file"
                                                name="fileName" class="button"> <input type="submit" value="Upload"
                                                class="button">
        </form>                         

    <form action="DataController" method="post" >
                                            <input type="submit" name="listUser" value="Confirm Selection"
                                                class="button" align="middle">
        </form>
        </td>
    </tr>
   </table>

我的控制器(Servlet):

UploadDownloadFileServlet.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if(!ServletFileUpload.isMultipartContent(request)){
        throw new ServletException("Content type is not multipart/form-data");
    }

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.write("<html><head></head><body>");
    try {
        List<FileItem> fileItemsList = uploader.parseRequest(request);
        Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();
        while(fileItemsIterator.hasNext()){
            FileItem fileItem = fileItemsIterator.next();
            System.out.println("FieldName="+fileItem.getFieldName());
            System.out.println("FileName="+fileItem.getName());
            System.out.println("ContentType="+fileItem.getContentType());
            System.out.println("Size in bytes="+fileItem.getSize());
            String fileName = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1);
            System.out.println("FILE NAME>>>>"+fileName);
            File file = new File(request.getServletContext().getAttribute("FILES_DIR")+File.separator+fileName);
            System.out.println("Absolute Path at server="+file.getAbsolutePath());
            fileItem.write(file);
            HttpSession session = request.getSession();
            session.setAttribute("Success", "Success");
            getServletContext().getRequestDispatcher("/Welcome.jsp").forward(request, response);
            /*out.write("File "+fileName+ " uploaded successfully.");
            out.write("<br>");
            out.write("<a href=\"UploadDownloadFileServlet?fileName="+fileItem.getName()+"\">Download "+fileName+"</a>");*/
        }
    } catch (FileUploadException e) {
        out.write("Exception in uploading file.");
        HttpSession session = request.getSession();
        session.setAttribute("Failed", "Failed");
        getServletContext().getRequestDispatcher("/Welcome.jsp").forward(request, response);
    } catch (Exception e) {
        out.write("Exception in uploading file.");
        HttpSession session = request.getSession();
        session.setAttribute("Failed", "Failed");
        getServletContext().getRequestDispatcher("/Welcome.jsp").forward(request, response);
    }
    out.write("</body></html>");/**/
}

}

My Next Contoller for submit按钮需要值:

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

        String upload = (String)request.getAttribute("Success");
        if(upload.equalsIgnoreCase("Success")){


        System.out.println("SERVLET DOPOST");
        String action = (String) request.getAttribute("DownLoadToExcel");
        System.out.println(action);
        String[] kpi = request.getParameterValues("kpi");

如何在jsp中知道上传成功并且提交应该继续,否则会出错。

等待回复。

谢谢, MS

1 个答案:

答案 0 :(得分:0)

首先,在UploadDownloadFileServlet成功接收并处理上传之后,您应该让它返回到JSP。您需要将其“重定向”到“MyJsp.jsp”。

HttpServletResponse.sendRedirect("MyJsp.jsp?fileName2="+fileName);
//- you can also call sendRedirect from a PrintWriter -

然后, JSP中的第二个表单,您可以使用某些内容(javascript,scriptlet,标记库,自定义标记等)来检测参数“fileName2”和使用文件名设置隐藏输入。

请注意,对于相同的回复,您不会sendRedirect()forward()

您可以根据需要传递任意数量的参数和文件名。