首页 > 其他分享 >使用Servlet进行页面跳转的两种方式

使用Servlet进行页面跳转的两种方式

时间:2023-12-17 21:44:35浏览次数:42  
标签:WEB resp req 跳转 INF 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)请求转发只能在当前服务器内部进行;响应重定向可以在在服务器内部进行,也可以重定向到外部服务器,比如百度、京东、淘宝等等。

 

标签:WEB,resp,req,跳转,INF,Servlet,页面
From: https://www.cnblogs.com/yilangcode/p/17909897.html

相关文章

  • 一个Servlet如何实现增-删-改-查的业务逻辑
    一、业务场景最近在教学生学习JavaWeb中的Servlet,它就是一个Java服务端的小程序,用来提供各种服务。在讲解得时候,自己突然遇到一个问题,那就是现在没有使用什么SpringMvc框架,可以配置二级路径,该如何使用Servlet实现不同的增、删、改、查的方法呢?这个问题自己一时半会也没想明......
  • Servlet中访问路径配置为/*时,使用请求转发造成内存溢出
    一、问题由来最近在测试Servlet的请求转发功能,准备抽取一个公共的PageJumpTestServlet,用来做页面跳转功能。这样不用每次在测试的时候,都单独写一个Servlet用来做页面跳转。自己最初的设想时,在路径配置的时候使用/toPage/*,访问地址示例http://localhost:8080/javaWeb/toPage......
  • 使用JS脚本修改页面内容
    在学习RPA时,我对使用JS脚本修改页面内容进行了深入学习。记录如下:获取元素的方法:1.document.getElementById("xxx")2.document.getElementsByClassName("xxx")3.document.getElementsByTagName("xxx")4.document.getElementsByName("xxx")5.document.querySele......
  • 如何在项目中全局拦截url的跳转?
    如何在项目中全局拦截url的跳转?一、介绍目的全局拦截url的跳转的目的是为了在项目中统一处理url跳转的逻辑,以达到实现一些特定需求的目标。通过全局拦截url的跳转,可以在用户点击url进行页面跳转时进行统一的处理,例如进行权限验证、页面切换动画等。全局拦截url的跳转可以使项目具备......
  • 使用router.replace解决路由跳转问题
    需求:A页面跳转到B页面,B页面带参跳转到C页面,C页面点击确定带参跳转回B页面。但是C页面点击返回按钮可返回到B页面,B页面点击返回按钮可返回到A页面。即A->B(带参)<->C(带参)在Vue3中,如果全部使用router.push带参跳转,则返回时路由跳转会变得很混乱。解决方法:B和C页面的相互跳转全部使......
  • freemarker模板数据解析1--页面语法直接获取
    freemarker模板数据解析1--页面语法直接获取​ 对后端接口传递过来的Map<String,List>类型数据的展示。对于普通Map<String,String>数据,我们很清楚,直接上代码:·接口提供数据:Map<String,String>map=newHashMap<>();map.put("k1","v1");map.put("k2","v2"......
  • 记录--代码刚上线,页面就白屏了
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言白屏一直是一个前端开发谈之变色的问题。“什么?我的页面刚上线就白屏了,是报错了,还是兼容性问题,还是性能问题,多刷新几次就好了,用户网络不行吧。”简单来说,白屏就是用户打开前端页面什么有没有。这是一个很重......
  • 【HarmonyOS】如何实现entry模块页面跳转HSP共享包页面(API9)
    【关键字】API9、ArkTS、跨包路由跳转、entry模块页面跳转HSP共享包页面 【写在前面】本篇文章主要介绍使用API9ArkTS开发鸿蒙应用时,如何实现从entry模块或feature模块页面,跳转到HSPlibrary模块的页面。 【开发步骤】第一步:在API9Stage模型的工程中,【右键-New-Module......
  • fastapi-cdn-host发布了 -- FastAPI接口文档/docs页面空白的问题,现在很好解决了~
    代码地址:https://github.com/waketzheng/fastapi-cdn-host如何安装:pipinstallfastapi-cdn-host使用方法:fromfastapiimportFastAPIfromfastapi_cdn_hostimportmonkey_patch_for_docs_uiapp=FastAPI()monkey_patch_for_docs_ui(app)#增加这行就能解决/docs页面空......
  • 汇编-JGE有符号大于等于则跳转
      .386.modelflat,stdcalloptioncasemap:none.stack4096IncludeIrvine32.incincludelibIrvine32.libExitProcessPROTO,dwExitCode:DWORD.data.codemainPROCmoveax,+100cmpeax,+10jgelabel0;有符号大于......