博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP/Servlet页面重定向
阅读量:4090 次
发布时间:2019-05-25

本文共 1784 字,大约阅读时间需要 5 分钟。

页面重定向 由发表在

页面重定向

在用户登录并通过服务器验证以后,JSP会渲染一段HTML内容返回给浏览器,提示已经登录成功。但这样做存在一些问题:

  • 用户体验不佳,用户成功登录后肯定需要去其他页面。如果登录成功在系统的任何一个页面都应该在导航栏中看到用户信息,如果进入一个提示信息页面,还需要一次点击才能到达目标页面。
  • 在登录成功页面刷新,此时浏览器会提示是否重新提交数据,因为这是一个POST请求,如果点击了确定意味着将之前的数据再次提交一遍,这不是我们所希望的。

上述问题对于任意表单提交都是存在的,包括文章创建表单。

POST/Redirect/GET模式

上一节中表单提交的用户体验非常不友好,为了解决这个问题,一种叫做的模式被提出并广泛应用在Web程序开发中。和传统的表单提交方法不同,这种模式在POST请求完成后,会重定向(HTTP状态码302)到另外一个页面。这样相当于浏览器重新加载了一个页面(使用GET请求),此时用户无论如何刷新浏览器,都是刷新当前GET请求对应的页面而不再是重复提交一次表单。下面是一个用户提交订单到服务器的过程描述:

Servlet重定向

页面重定向相当于返回HTTP状态吗302以及一个重定向地址到浏览器,在Servlet中可以使用HttpServletResponse#sendRedirect()方法来完成。例如在登录成功后,可以跳转到该用户的博客首页:

@WebServlet("/account/login")public class LoginController extends HttpServlet {    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        User user = Data.getByUsername(username);        if (user == null || !user.getPassword().equals(password)) {        } else {            req.getSession().setAttribute("user", user);            resp.sendRedirect("/ServletBlogDemo/userPosts?username=" + user.getUsername());        }    }}

注意这里的重定向地址需要包含本身的Context名字——ServletBlogDemo

例子:创建文章重定向

和登录表单一样,创建文章表单提交成功后,直接跳转到该文章详细页面,这样用户自然而然的知道文章已经创建成功:

@WebServlet("/createPost")public class PostCreateController extends HttpServlet {    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        User currentUser = (User) req.getSession().getAttribute("user");        Post post = new Post(req.getParameter("title"), req.getParameter("content"), currentUser);        Data.posts.add(post);        resp.sendRedirect("/ServletBlogDemo/userPosts?username=" + currentUser.getUsername());    }}

在通常情况下,表单通过POST方法提交数据后,我们推荐使用HTTP状态码302进行重定向来实现更友好的用户体验。

更多文章请访问

你可能感兴趣的文章
9 款你不能错过的 JSON 工具
查看>>
盘点那些改变世界的代码
查看>>
这个时代,达不到百万级以上的并发量,都不叫高并发!!!
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
我写了个 Chrome 插件,一键下载 PornHub 视频!
查看>>
快速提升 Python 技能的 4 个实战项目
查看>>
女装、退学、离职谷歌,他活成了别人不敢想的样子
查看>>
强烈推荐:9 款用起来超爽的编程字体!
查看>>
GitHub 上 10 个顶级开源项目
查看>>
什么情况?开源编辑器 Atom 未经同意收集用户数据???
查看>>
美国程序员把工作外包给中国程序员,啥也不干年入 20 万美元,这操作也是骚...
查看>>
解放生产力!20 个必知必会 VSCode 小技巧
查看>>
Python 爬取 6271 家死亡公司数据,一眼看尽十年创业公司消亡史!
查看>>
看完知乎轮子哥的编程之路,我只想说,收下我的膝盖...
查看>>
公式免费转 LaTex 代码!截图、转换一气呵成
查看>>
19 个恶搞 Linux 命令
查看>>
超强算法:一张图让二次元妹纸活起来!
查看>>
作为一名程序员,我都收集了哪些好玩的生成器?
查看>>
GitHub Actions,卧槽!牛批!
查看>>
三个方向的人工智能工程师有何不同?
查看>>