最近在教学生学习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进行页面跳转的两种方式的更多相关文章

  1. js实现页面跳转的两种方式

      CreateTime--2017年8月24日08:13:52Author:Marydon js实现页面跳转的两种方式 方式一: window.location.href = url 说明:我们常用 ...

  2. Servlet页面跳转的两种方式

    一.页面跳转 1. 请求转发: (1) 使用requestDispatcher对象: 转发格式:request.getRequestDispatcher("path").forwa ...

  3. web项目中实现页面跳转的两种方式

    <a href="javascript:"></a>跳转在网页本身,URL不改变 <a href="#"></a> ...

  4. Vue路由实现页面跳转的两种方式(router-link和JS)

    Vue.js 路由可以通过不同的 URL 访问不同的内容,实现多视图的单页 Web 应用 1.通过 <router-link> 实现 <router-link> 组件用于设置一 ...

  5. vue 页面跳转的两种方式

    1,标签跳转     <router-link to='two'><button>点我到第二个页面</button></router-link> 2,点 ...

  6. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  7. jquery/js/a标签实现当前页面跳转的两种方法

    在逛购物网站首页时经常看到侧边导航栏,当我们点击导航栏中某一项时会跳转到当前页面的某一处 有两种方法实现,一种是利用js计算好各位置的高度,通过绑定事件使页面跳转到指定位置,另一种是利用a标签进行当前 ...

  8. 微信小程序页面跳转的三种方式总结

    原文链接 https://blog.csdn.net/zgmu/article/details/72123329 首先我们了解到,小程序规定页面路径只能有五层,所以我们尽量避免多层级的页面跳转 页面跳 ...

  9. 微信小程序页面跳转 的几种方式

    最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一.wx.navigateTo(OBJECT) 这是最普遍的一种跳转方式,其官方解释为:“保留当前页面,跳转到应用内的某个页面” 类 ...

  10. php实现页面跳转的几种方式

    PHP中实现页面跳转有一下几种方式,看了几个人写的不是很条理,自己整理一下 在PHP脚本代码中实现 <?php header("location:url地址") ?> ...

随机推荐

  1. 通过URL载入ShellCode代码

    将生成的shellcode放到web服务器上,本地不保存恶意代码,本地只负责加载到内存运行,这样可以很好的躲过查杀. 生成shellcode msfvenom -a x86 --platform Wi ...

  2. LyScript 自实现汇编搜索功能

    通过对LyScript自动化插件进行二次封装,实现从内存中读入目标进程解码后的机器码,并通过Python代码在这些机器码中寻找特定的十六进制字符数组,或直接检索是否存在连续的反汇编指令片段等功能. 插 ...

  3. Gin 获取请求参数

    1.获取URL?后的参数(不区分请求方式) // 获取请求url ? 后的参数(url:8080/add?name=kelvin) func GetUrlParam(ctx *gin.Context) ...

  4. libuv计时器

    目录 1.uv_timer_t - 计时器句柄 2.API 2.1.uv_timer_init 2.2.uv_timer_start 2.3.uv_timer_stop 2.4.uv_timer_ag ...

  5. 痞子衡嵌入式:我入选了2023年度与非网(eefocus)最佳创作者Top15

    最近收到了「与非网」发来的 2023 年度最佳创作者 证书,证书做得一如既往地有质感,这是与非网第二次给痞子衡发证书了,足见与非网对痞子衡的认可. 与非网自 2021 年起,每年都会评选一次年度创作者 ...

  6. spring boot jar混淆加密

    最近在做一个智能床垫的机构版项目,客户要求部署到客户那边要做代码混淆防止代码被反编译. 一:在需要加密的jar的pom.xml文件添加依赖 <!-- 设置 jitpack.io 仓库 --> ...

  7. UVA10225 Discrete Logging 题解

    题目传送门 前置知识 大步小步算法 题意 多组询问,每次询问依次给定 \(p,a,b\),求 \(a^{x} \equiv b \pmod{p}\) 的最小非负整数解,其中 \(a,p\) 互质. 解 ...

  8. mysql备份导入

    mysqldump -uroot -p --single-transaction --master-data=2 --flush-logs --flush-privileges --routines= ...

  9. 开源神器:自动生成随机 mock 数据测试对象

    测试的痛点 大家好,我是老马. 每一位开发者大部分工作都是写代码.测试代码.修BUG. 我们有很多测试代码,总是花费大量的实践去构建一个对象. 于是就在想,能不能自动填充一个对象呢? 于是去 gith ...

  10. 解决ufw下pptp客户端连接问题

    解决ufw下pptp客户端连接问题 解决ubuntu在启动ufw的情况下pptp客户端无法链接的问题. 修改/etc/ufw/before.rules 在COMMIT之前添加如下内容: -A ufw- ...