Servlet的使用——重定向和转发
发布日期:2021-07-27 04:55:59
浏览次数:8
分类:技术文章
本文共 2819 字,大约阅读时间需要 9 分钟。
网络路径问题
路径一共分为相对路径、绝对路径和根路径。
相对路径
用在同一个网站中, aaa/1.jpg,仅限静态资源,如果页面比较多,并且使用框架,会出现混乱。
绝对路径
用在不同网站之间的跳转,比如:http://www.baidu.com/aaa/1.jpg
根路径
http://localhost:8080/day12web1/loginservlet
(1)如果是作用于服务器,根指定就是主机名(服务器) 【/】 表示 (/day12web1)
(2)如果是作用于浏览器,就是在页面中写的路径,【/】标示(http://localhost:8080),要写服务器名一、重定向
重定向就是通过各种方法将网络请求重新定个方向转到其它位置。
1.1 原理
1.2 特点
- 重定向是客户端行为。
- 重定向是浏览器做了至少两次的访问请求。
- 重定向浏览器地址改变。
- 重定向两次跳转之间传输的信息会丢失(request范围)。
- 重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源。 注意:传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录(作用于浏览器)
1.3 代码实现
@WebServlet(name = "LoginServlet", value = "/loginservlet")public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //重定向原理就是通过响应头Headers下的Location实现的 String username = request.getParameter("username"); String password = request.getParameter("password"); if (username.equals("admin") && password.equals("123456")) { //登录成功,重定向,跳转首页 //这个方法是给浏览器使用,根目录必须有服务器名 response.sendRedirect("/0831web1/index.html"); } else { //登录失败 response.getWriter().println("用户名或密码错误"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }}
二、转发
2.1 原理
2.2 特点
- 转发是服务器行为
- 转发是浏览器只做了一次访问请求
- 转发浏览器地址不变
- 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
- 转发只能将请求转发给同一个WEB应用中的组件 注意:如果创建RequestDispatcher 对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录(所用于服务器)
2.3 代码实现
@WebServlet(name = "RegistServlet", value = "/registservlet")public class RegistServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //可以将转发代码的response.setContentType消除 //或者将login.html改为jsp //response.setContentType("text/html;charset=utf-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String repassword = request.getParameter("repassword"); String email = request.getParameter("email"); System.out.println("用户名" + username + ",密码" + password + ",邮箱:" + email); System.out.println("注册成功"); //获取转发器,然后forwoard执行转发,这里地址只能使用相对地址和根地址,只能转发本网站 //该方法是在服务器中使用,所以/就代表了服务器名 request.getRequestDispatcher("/login.html").forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }}
转载地址:https://blog.csdn.net/qq_45337431/article/details/100176835 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年09月27日 22时23分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java小游戏之打飞机(二)
2019-05-27
oop_day04_继承、重写_20150812
2019-05-27
Java笔试面试题006
2019-05-27
oop_day05_package、public、static、final、内部类
2019-05-27
oop_day06_抽象类、接口_20150814
2019-05-27
Java笔试面试题007
2019-05-27
Java 抽象类与接口的区别
2019-05-27
oop_day07_多态_20150815
2019-05-27
Java笔试面试题008
2019-05-27
Java之面向对象详细总结
2019-05-27
Java笔试面试题009
2019-05-27
Java笔试面试题010
2019-05-27
【JavaSE】day01_ API文档 、 字符串基本操作
2019-05-27
写给java程序员的一封情书
2019-05-27
【JavaSE】day02_正则表达式 、 Object 、 包装类
2019-05-27
【Java】Java小游戏之Shoot游戏源码及详解
2019-05-27
【JavaSE】day04_Collection_Iterator_新循环_泛型
2019-05-27
【JavaSE】day05_List集合_List排序_队列和栈
2019-05-27
【JavaSE】day06_Map接口_HashMap_hashCode
2019-05-27