如何从GET请求的Servlet重定向到POST请求的Servlet?
问题原因与解决办法
为什么会出现405错误?
response.sendRedirect("upload") 本质是告诉浏览器重新发起一个GET请求到目标地址,而你的upload.java仅配置支持POST方法,浏览器发送的GET请求不被允许,因此返回405错误。
解决方案
方案1:让upload支持GET请求
如果业务允许upload接收GET请求,直接在upload.java中添加doGet方法,复用doPost的逻辑:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 直接调用doPost处理GET请求 doPost(request, response); }
方案2:强制通过POST请求访问upload(原请求为GET时)
如果upload必须仅接受POST请求,且当前mystart是GET请求触发的,无法通过重定向/转发实现,需要在mystart中输出一个自动提交的HTML表单,让浏览器自动发起POST请求:
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 输出自动提交的表单 out.println("<html><body>"); out.println("<form style='display:none' action='upload' method='POST'>"); // 如需传递参数,添加隐藏域 // out.println("<input type='hidden' name='yourParam' value='"+ request.getParameter("yourParam") +"'>"); out.println("</form>"); out.println("<script>document.forms[0].submit();</script>"); out.println("</body></html>");
补充:如果mystart本身是POST请求的情况
如果mystart是通过POST请求触发的,也可以用服务器内部转发替代重定向,这种方式会保留原请求的方法(POST),且不会改变浏览器地址栏:
request.getRequestDispatcher("upload").forward(request, response);
内容的提问来源于stack exchange,提问作者Gidde
相关产品推荐
相关产品推荐

