jsp提交表单后跳转到servlet,然后用什么方式返回到表单页面?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
         response.setContentType("text/html");
         response.setCharacterEncoding("utf-8");
        Category category = new Category();
        category.add(new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8"));
        response.getWriter().println("<script>alert('添加成功');window.location.href='admin/category.jsp'</script>");
    }

我这里是用window.location.href 脚本操作返回页面。这样合理吗?

阅读 7.8k
4 个回答

response.sendRedirect()

不可以,这是js代码当运行在浏览器里,如果要回到表单页面,可以使用楼上的那种方式,或者请求转发,但是需要指定路径,属于服务器请求。
如果在页面使用js提交表单,则无需这么麻烦

你如果主要用的是jsp,html如果把form的路径填成servlet,确实就需要java来重定向,也就是response.sendRedirect()
但是现在一般都是ajax去提交POST的HTTP请求,所以一般是js来控制跳转。

但你这种写法是最好不要的,前后端过于耦合。

你说的应该是表单页面提交后返回表单列表吧,你给方式可能可用,但应该是古董级的方法了,感觉还要向页面写入脚本,其实用重定向方式很好解决的,具体如下:

1、web.xml配置内容Servlet的规则:

<servlet>
    <servlet-name>main</servlet-name>
    <servlet-class>你的Servlet类全名</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>main</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

2、Servlet类(继承HttpServlet)中的关键配置
(service()服务器接收所有请求的入口)

@Override 
protected void service(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    //根据规范判断请求路径
    String path = req.getServletPath();
    if ("/category.do".equals(path)) {
        //查询所有的表单目录
        category(req,res);
    } else if (
    ....
}

(自定义的addcategory()处理完表单提交后重定向到category.do,客户端收到后会向服务器发起category.do请求)

private void addcategory(HttpServletRequest req, HttpServletResponse res) throws IOException {
...

res.sendRedirect("category.do");
}

如果你一定要用原始的Servlet,这个方式至少简单灵活点。其实这种与前端交互的内容,早已被框架大大简化,建议你别太深入,理解处理原理就行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题