04---servlet07(servlet跳转)

本文介绍了客户端跳转与服务器端跳转的区别及实现方法。客户端跳转通过response.sendRedirect()实现,地址栏显示变化但无法传递request范围属性;服务器端跳转采用RequestDispatcher接口的forward方法,地址栏不变且能传递request范围属性。

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

回顾:关于跳转有两种:
 ·客户端跳转:地址栏跳转之后改变,而且无法传递request范畴的属性,是所有的执行完毕之

后
   在执行跳转,语法:response.sendRedirect()
 ·服务器段跳转:地址栏不发生变化,而且可以传递request范围的属性,属于无条件的跳转,

只要执行
   立刻跳转,语法:<jsp:forward>
 Servlet之中也是可以完成跳转的,而且既然Servlet本身已经存在了HttpServleResponse对象,
  所以直接通过此对象的sendRedirect()方法就可以完成跳转操作;
   package com.lid.servlet;
   import java.io.*;
   import javax.servlet.*;
   import javax.servlet.http.*;

   public class ClientRedirectDemo extends HttpServlet{
    public void doGet(HttpServletRequest req,HttpServletResponse 

res) throws ServletException,IOException{
     req.getSession().setAttribute("name","yuj");
     req.setAttribute("info","lid-yuj");
     res.sendRedirect("get_info.jsp");
     }
    public void doPost(HttpServletRequest 

req,HttpServletResponse res) throws ServletException,IOException{
     this.doGet(req,res);
     }
    }
  编译上面的servlet;然后在web.xml中配置servlet映射;
   <servlet>
     <servlet-name>clientredirectdemo</servlet-name>
     <servlet-class>com.lid.servlet.ClientRedirectDemo</servlet-

class>
    </servlet>
   <servlet-mapping>
     <servlet-name>clientredirectdemo</servlet-name>
     <url-pattern>/forward/ClientRedirectDemo</url-pattern>
    </servlet-mapping>
  get_info.jsp:
   <%@ page contentType="text/html" pageEncoding="gbk"%>
   <html>
   <head><title>这是测试</title></head>
   <body>
    <%
     request.setCharacterEncoding("gbk");
    %>
    <h3>session属性:<%=session.getAttribute("name")%></h3>
    <h3>request属性:<%=request.getAttribute("info")%></h3>
   </body>
   </html>
  输入:http://localhost/lid/forward/ClientRedirectDemo
 执行完成之后,可以发现已经将session的属性的内容获得,而response的属性的内容
 没有获得,原因是上面的是客户端的跳转,而客户端的跳转时无法取得request属性的值的;

因为servlet不能使用<jsp:forward>标签,如果想完成服务器端的跳转,必须依靠RequestDispatcher接

口
 完成;---javax.servlet.RequestDispatcher;

因为RequestDispatcher是个接口,如果想使用此接口,必须对此接口进行实例化操作,但是此时只能依

靠
 ServletRequest接口才可以完成;ServletRequest接口中有如下一个方法:
 ·getRequestDispatcher(String path)

  package com.lid.servlet;
  import java.io.*;
  import javax.servlet.*;
  import javax.servlet.http.*;

  public class ServerRedirectDemo extends HttpServlet{
   public void doGet(HttpServletRequest req,HttpServletResponse res) 

throws ServletException,IOException{
    req.getSession().setAttribute("name","yuj");
    req.setAttribute("info","lid-yuj");
    //转备好跳转
    RequestDispatcher rd=req.getRequestDispatcher

("get_info.jsp");
    //完成跳转
    rd.forward(req,res);
    }
   public void doPost(HttpServletRequest req,HttpServletResponse res) 

throws ServletException,IOException{
    this.doGet(req,res);
    }
   }
 编译以上程序;在web.xml中配置servlet的映射路径;
  <servlet>
    <servlet-name>serverredirectdemo</servlet-name>
    <servlet-class>com.lid.servlet.ServerRedirectDemo</servlet-class>
   </servlet>
  <servlet-mapping>
    <servlet-name>serverredirectdemo</servlet-name>
    <url-pattern>/forward/ServerRedirectDemo</url-pattern>
   </servlet-mapping>
 重启服务器;
 输入:http://localhost/lid/forward/ServerRedirectDemo


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzuld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值