Java servlet重定向具有错误的URL并使用错误的HTTP方法

时间:2017-02-22 00:48:05

标签: java jsp http redirect servlets

我有一个表单,它正在向@WebServlet("/SignUp")定义的servlet提交POST请求。

我还在客户端进行检查以确保填充所有表单输入,但如果他们偷偷摸摸并提交带有空输入的表单,我希望servlet将它们发回{{ 1}}(即index.jsp)作为后备。

对于我的SignUp servlet的doPost(),我有以下内容:

/Home

这一切都在基础层面上运作。如果他们忽略输入一个值(我还没有做任何真正的检查,比如.trim()或无效字符),那么它们会被发送回index.jsp(由/ Home servlet支持)。

但是,我的代码工作方式有两个问题,我无法弄清楚如何绕过它们。

  1. 我的index.jsp现在作为POST请求加载,而不是通常的GET。如果用户刷新页面,他们会收到客户端警告,要求在POST请求中刷新页面,这在主页上真的很难看,也很麻烦。

  2. 当我期望它为protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final String METHODNAME = "doGet"; logger.entering(CLASSNAME, METHODNAME); String email = request.getParameter("email"); String pass = request.getParameter("password"); String cpass = request.getParameter("confirmPassword"); String forwardJsp = ""; if (StringUtils.isNotBlank(email) && StringUtils.isNotBlank(pass) && StringUtils.isNotBlank(cpass)) { forwardJsp = "/SignUpMoreInfo.jsp"; } else { // one of the fields was empty request.setAttribute("signupFieldWasEmpty", true); forwardJsp = "/Home"; } request.getRequestDispatcher(forwardJsp).forward(request, response); logger.exiting(CLASSNAME, METHODNAME); } 时,浏览器中的网址仍然包含地址http://localhost:8080/SignUp。这也是丑陋的,并且让用户感到困惑,因为网址不再正确地表示他们与" Home"该网站的页面。

  3. 如何在保持尽可能多的MVC的同时解决我的Java后端代码中的这些问题?

2 个答案:

答案 0 :(得分:1)

您必须在此处使用重定向来启动对string activation = (string)rootActivation.Element("activationOutput").Element("activationString").Value; 的新请求:

试试这个:

/home

但现在的问题是你将丢失这些信息if (StringUtils.isNotBlank(email) && StringUtils.isNotBlank(pass) && StringUtils.isNotBlank(cpass)) { forwardJsp = "/SignUpMoreInfo.jsp"; } else { request.setAttribute("signupFieldWasEmpty", true); response.sendRedirect("/Home"); } 所以如果你想保留它,你必须添加为uri的请求参数:

signupFieldWasEmpty

答案 1 :(得分:0)

您可以使用Post/Redirect/Get模式来避免此问题。

servlet接收Post请求,处理表单,然后将重定向发送到所需的页面。