使用Servlet进行页面跳转的两种方式
最近在教学生学习JavaWeb相关的技术,刚好讲到Java当中的Servlet,一个服务端的小程序。
也在和学生讲使用Servlet如何进行页面跳转,一种方式是使用请求转发进行页面跳转,一种方式
是使用响应重定向。下面就来分别聊一聊这两种页面跳转方式。
首先有一个知识点需要注意,如果页面中的静态资源是放在web目录下,但不是在WEB-INF目录下,

则可以通过项目根路径 + 静态资源名称就可以直接访问。如下图所示,

如果是是将页面放在WEB-INF下面,则不能直接访问。

如下图所示,


WEB-INF下面的资源文件就需要通过Servlet去访问。
第一种方式,通过请求转发到某个页面,示例代码如下
@WebServlet("/toTest")
public class RequestForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// (1)请求的页面是直接放在 web 目录下,则可以直接写
// req.getRequestDispatcher("/test.html").forward(req, resp);
// (2)请求的页面是是放在 WEB-INF 目录下,则路径需要加上 WEB-INF 这一级路径
req.getRequestDispatcher("WEB-INF/test2.html").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
forward()方法更改为include方法效果是一样的,访问效果如下。


第二种方式是使用响应重定向,示例代码如下
@WebServlet("/toRedirect")
public class ResponseSendRedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// (1)跳转到外部服务器
// resp.sendRedirect("http://www.jd.com");
// (2)在内部服务器跳转,使用全路径
// resp.sendRedirect("http://localhost:8082/chapterNine/toTest");
// (3)在内部服务器跳转,使用简化写法,页面资源在web 目录下
// resp.sendRedirect(req.getContextPath() + "test.html");
// (4)在内部服务器跳转,使用简化写法,页面资源在WEB-INF 目录下,则需要重定向到另外一个Servlet,通过另外一个Servlet 去访问页面
resp.sendRedirect(req.getContextPath() + "/toTest");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
测试结果如下,

两种页面跳转方式的区别:
(1)请求转发是一次请求-响应;响应重定向是两次请求-响应,相当于发起一次新的请求。
(2)请求转发地址栏地址不会发生改变;响应重定向的地址栏会发生改变。
(3)请求转发只能在当前服务器内部进行;响应重定向可以在在服务器内部进行,也可以重定向到外部服务器,比如百度、京东、淘宝等等。
(4)请求转发,request中的数据可以传递到下一个页面;响应重定向,request中数据会丢失。
使用Servlet进行页面跳转的两种方式的更多相关文章
- js实现页面跳转的两种方式
CreateTime--2017年8月24日08:13:52Author:Marydon js实现页面跳转的两种方式 方式一: window.location.href = url 说明:我们常用 ...
- Servlet页面跳转的两种方式
一.页面跳转 1. 请求转发: (1) 使用requestDispatcher对象: 转发格式:request.getRequestDispatcher("path").forwa ...
- web项目中实现页面跳转的两种方式
<a href="javascript:"></a>跳转在网页本身,URL不改变 <a href="#"></a> ...
- Vue路由实现页面跳转的两种方式(router-link和JS)
Vue.js 路由可以通过不同的 URL 访问不同的内容,实现多视图的单页 Web 应用 1.通过 <router-link> 实现 <router-link> 组件用于设置一 ...
- vue 页面跳转的两种方式
1,标签跳转 <router-link to='two'><button>点我到第二个页面</button></router-link> 2,点 ...
- web页面跳转的几种方式
可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...
- jquery/js/a标签实现当前页面跳转的两种方法
在逛购物网站首页时经常看到侧边导航栏,当我们点击导航栏中某一项时会跳转到当前页面的某一处 有两种方法实现,一种是利用js计算好各位置的高度,通过绑定事件使页面跳转到指定位置,另一种是利用a标签进行当前 ...
- 微信小程序页面跳转的三种方式总结
原文链接 https://blog.csdn.net/zgmu/article/details/72123329 首先我们了解到,小程序规定页面路径只能有五层,所以我们尽量避免多层级的页面跳转 页面跳 ...
- 微信小程序页面跳转 的几种方式
最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一.wx.navigateTo(OBJECT) 这是最普遍的一种跳转方式,其官方解释为:“保留当前页面,跳转到应用内的某个页面” 类 ...
- php实现页面跳转的几种方式
PHP中实现页面跳转有一下几种方式,看了几个人写的不是很条理,自己整理一下 在PHP脚本代码中实现 <?php header("location:url地址") ?> ...
随机推荐
- 强化学习从基础到进阶-案例与实践[4.2]:深度Q网络DQN-Cart pole游戏展示
强化学习从基础到进阶-案例与实践[4.2]:深度Q网络DQN-Cart pole游戏展示 强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域,区别与监督学习和无监 ...
- Linux 文本处理三剑客应用
Linux 系统中文本处理有多种不同的方式,系统为我们提供了三个实用命令,来实现对行列的依次处理功能,grep命令文本过滤工具,cut列提取工具,sed文本编辑工具,以及awk文本报告生成工具,利用这 ...
- C++编译器的RVO和NRVO
1.说明 我一直记得返回对象的函数在调用时会有拷贝构造动作,但是最近实际测试却和记忆有些偏差,经查询是编译的问题 RVO: return value optimization NRVO: named ...
- MySQL8.0清空binlog
环境 centos7.9 mysql Ver 8.0.32 登录MySQL,查看binlog日志 #查看binlog日志开启状态,log_bin值为ON表示开启状态 mysql> show v ...
- 错误:基于tensorflow识别mnist数据集出现ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[10000,32,28,28] and type float on
错误:最近,在尝试运行我以前博客代码的时候出现了如下错误 2020-04-03 10:53:22.982491: W tensorflow/core/common_runtime/bfc_alloca ...
- Cpu是如何选择线程的?
Cpu是如何选择线程的? linux中线程存放格式 linux中线程与进程对应的结构体都是task_struct 唯一不同的点在于线程存放的东西少了点(由于一个进程中的线程们是共享一定数据的那些东西就 ...
- 云计算 - 对象存储服务OSS技术全解
本文全面深入地探讨了对象存储服务(OSS)的核心技术.基础知识和高级功能.从媒体存储到数据备份,再到数据仓库与数据湖,我们不仅解析了OSS在各种应用场景下的关键角色,还深入讨论了其与机器学习.多媒体处 ...
- 关于Oracle多租户架构下的每个PDB的dbtime查询
有客户咨询在19c多租户这样的架构中,除了查询cdb本身外,还想查询具体pdb的负载(DB Time),但是使用之前的脚本发现查询不到,只显示cdb自己的结果,客户写的脚本如下: SELECT i.i ...
- mysql数据库应用
一:安装数据库管理工具 1.进入navicat官网https://navicat.com.cn/ 2.下载navicat for mysql,选免费试用也可直接购买 3.安装好后一直点下一步即可 二: ...
- Windows-Xshell对多个终端同时执行命令(发送命令到多个会话)
方法1:使用查看中的撰(zhuàn)写栏 (1).查看→撰写→撰写栏. (2).底部可以看到"撰写栏",选择全部会话. (3).在撰写栏输入命令,回车后就会发送到所有会话窗口. 方 ...