Servlet之间跳转

本文详细介绍了Servlet中的请求转发(Forward)和重定向(Redirect)两种跳转方式。请求转发在同一个请求范围内传递数据,适用于内部资源跳转;而重定向会导致新的请求,URL会发生变化,适合于服务器外部资源的访问。在MVC模式中,Servlet跳转技术起着关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet之间的跳转:

  • Servlet之间可以实现跳转,从一个Servlet跳转到另一个Servlet,利用Servlet的跳转技术可以很方便的把一块业务模块分开,比如使用一个Servlet接收用户请求,根据业务规则转到其他Servlet进行处理,最后跳转到另一个Servlet把处理结果展示出来。
  • 是实现MVC模式的基础(modle,view,controller)

MVC:一种业务、数据、显示分离的方式组织代码,将业务逻辑聚集到一个部件中,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出在一个逻辑的图形化用户界面的结构中。

Servlet提供了两种跳转方式:

  • request对象提供的:请求转发Forward
  • response对象提供的:重定向Redirect

转发Forward

请求转发原理

在Servlet中,如果当前的Web资源不想处理请求或完成部分功能处理,可以通过forward方式,将当前的请求再传递给其他的web资源处理,这种方式为请求转发。

转发流程图:

graphic

Forward相关方法

1)RequestDispatcher对象

可以通过request.getRequestDispatcher()方法获取
调用这个对象的forward方法就可以实现请求转发

2)转发过程中携带数据:

request本身也是一个域对象,reques可以携带数据传递给其他web资源,作用域范围是当前请求

  • setAttribute方法
  • getAttribute方法
  • removeAttribute方法
  • getAttributeNames方法

案例:登录错误时显示错误界面(要求显示错误原因)

分析:

  1. 用户输入用户名密码,点击登录
  2. 跳转到/login处理请求,验证用户名和密码是否正确
  3. 如果错误跳转到“error.jsp”页面
  4. 错误的原因需要从/login传递给error.jsp页面
  5. 之前学过ServletContext,可以在整个web范围传递数据,但此处不能使用,并发访问时,错误信息无法准确记录
  6. 考虑使用request对象,通过setAttribute记录错误信息,再将请求转发给“error.jsp”页面

步骤:

  1. 创建登录页面,包括用户名、密码,点击登录跳转到/login

  2. 创建LoginServlet,urlPatterns = “/login”,在doPost方法中,验证用户名记密码

  3. 如果用户名及密码错误,将错误信息写入request对象
    request.setAttribute(“errorMsg”,“错误原因”);

  4. 将request对象转发到"error.jsp"页面
    request.getRequestDispatcher("/error.jsp").forward(request,response);

  5. 1在"error.jsp"页面获取请求中错误原因,并显示
    <%=request.getAttribute(“errorMsg”)%> //暂时了解一下即可,后续课程会讲到

重定向Redirect

重定向概念

重定向是根据服务器返回的状态码来实现的。客户端浏览器在请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletResponse的setStatus(int status)方法来设置状态码。如果服务器这个时候返回的状态码是301或者302,则浏览器就会按照返回的网址重新请求该资源。服务器的响应中会带着这个新资源的地址。

重定向相关代码

//设置状态码为302,SC_MOVED_TEMPORAILY就是302的静态常量

response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);


//在请求头中携带新的资源地址

response.setHeader("Location","http://www.baidu.com");



为了使用方便HttpServletResponse中将setStatus和setHeader这两种方法合并到一起叫做

sendRedirect(String location);

重定向和请求转发的区别

重定向和请求转发的区别:
在这里插入图片描述

  • 请求转发,网址不会改变,请求重定向,网址会改变
  • 请求转发只有一个request和response,请求重定向,有两个request和response
  • 服务器外部资源只能是请求重定向,内部资源两者皆可
  • 需要向下一个Servlet通过请求传递数据,需要考虑使用请求转发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值