在重新提交相同请求时将请求属性设置为null

时间:2013-07-25 09:08:36

标签: java jsp servlets

我有这种情况:

我需要将附件上传到服务器。我有jsp pageservlet来处理我的请求。在我上传文件之前,我需要检查重复的文件名,以便在不通知用户的情况下不替换文件。所以在我的servlet中,我正在进行适当的检查并将request attribute设置为true,这样当我forward the request to the jsp page并看到该属性设置为true时,我会向用户显示一个对话框(使用时) ()jquery)以便用户选择要采取的操作(保持两者,覆盖,取消)。

我唯一担心的是当页面刷新时,即same request is submitted,在属性设置为true之后,attribute remains true因此在刷新时我正在加载对话框。当然,我不希望这种情况发生。

有什么东西可以帮我解决这个问题吗?这是我的代码。

UploadFile.java - 我的Servlet

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

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

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
{
     request.setAttribute("duplicate", null);

     if (!isDuplicate(file)){
        // .. handle uploading 
     } 
     else 
     {
        // if duplicate
        request.setAttribute("duplicate", "true");

        ServletContext context = getServletContext();
        RequestDispatcher dispatcher = context.getRequestDispatcher("/ticketsform.jsp");
        dispatcher.forward(request, response);
     }

     response.sendRedirect("ticketform.jsp");
}

ticketform.jsp

<% 
    String isDuplicate = (String)request.getAttribute("duplicate"); 

    if (isDuplicate != null)
    {   %>
        <script type="text/javascript">
            duplicateFilesOption(); // call js function to display dialog
        </script>
<%  }   %>

感谢您提前提供任何帮助:)

2 个答案:

答案 0 :(得分:0)

您可以将以下内容添加到您的jsp中。

这将告诉浏览器重新发送请求,而不是重新显示结果。

<head>   
<meta HTTP-EQUIV=Expires CONTENT="0">   
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">  
<head>

答案 1 :(得分:0)

在ticketform.jsp结束时,请删除该属性。

request.removeAttribute("attribute_name");

因此,在首先从请求中获取值之后,它最终会被删除。