回顾: 关于跳转之前就强调过有两种:

       1. 客户端跳转: 地址栏跳转之后改变,而且无法传递request范围的属性,是在所有的操作执行完毕之后才发生跳转的操作,语法:request.sendRedirect()

       2.服务器端跳转:  地址栏不改变,而且可以传递request范围的属性,属于无条件跳转,只要执行到了,则立刻执行跳转的操作。 语法:<jsp:forward>

  


   Servlet之中也是可以完成跳转的,而且既然Servlet本身已经存在了HttpServeltResponse对象,所以直接通过此对象的sendRedirect()方法可以完成跳转操作。

servlet.init()for servlet、客户端跳转

  1. package ServletDemo; 
  2. import java.io.IOException; 
  3. import javax.print.attribute.standard.Sides; 
  4. import javax.servlet.*; 
  5. import javax.servlet.http.*; 
  6. public class kehuduanTiaozhuan extends HttpServlet { //继承HttpServlet 
  7.     public void doGet(HttpServletRequest req,HttpServletResponse resp) 
  8.            throws ServletException,IOException{   //处理服务 
  9.      req.getSession().setAttribute("name", "赵玉强"); 
  10.      req.setAttribute("info","zhaoyuqiang.blog.51cto.com");//设置属性 
  11.      resp.sendRedirect("get_info.jsp");//设置跳转的页面 
  12.     } 
  13.      public void doPost(HttpServletRequest req,HttpServletResponse resp) 
  14.            throws ServletException,IOException{ //处理POST请求 
  15.         this.doGet(req, resp);   //调用doGet()方法       
  16.      } 

  1. get_info.jsp 
  2. <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%> 
  3. <html> 
  4. <head> 
  5. <title>WEB开发</title> 
  6. </head> 
  7. <body> 
  8. <% request.setCharacterEncoding("utf-8");%> 
  9. <h2>session属性:<%=session.getAttribute("name") %></h2> 
  10. <h2>request属性:<%=request.getAttribute("info") %></h2> 
  11. </body> 
  12. </html> 

在web.xml中的配置如下:

  1. <servlet> 
  2.        <servlet-name>tiaozhuan</servlet-name> 
  3.        <servlet-class>ServletDemo.kehuduanTiaozhuan</servlet-class> 
  4.   </servlet> 
  5.   <servlet-mapping> 
  6.        <servlet-name>tiaozhuan</servlet-name> 
  7.        <url-pattern>/jsp/kehuduanTiaozhuanTest</url-pattern>  //之所以加上/jsp,是因为我们                  的get_info.jsp文件在jsp文件夹之下。 
  8.   </servlet-mapping> 

在浏览器中  http://localhost:8080/test/jsp/kehuduanTiaozhuanTest 

   现在看一下浏览器的地址栏,已经变成了http://localhost:8080/test/jsp/get_info.jsp,

也就是说现在的地址栏发生了改变。

   此时,执行完成之后,可以发现已经将session的属性的内容进行了传递,但是request属性范围并没有传递,因为客户端跳转根本就无法完成request属性的跳转

servlet开发步骤,服务器端跳转

    服务器端的跳转比客户端的跳转稍微麻烦一点,因为在Servlet中没有<jsp:forward>的指令,所以要想执行服务器端跳转的话,就必须依靠RequestDispatcher接口来完成,此接口提供了两个方法如下下图:

   使用RequestDispatcher接口的forward()方法就可以完成跳转功能的实现,但是如果想要使用此接口还需要使用ServletRequest接口提供的如下方法进行实例化

跳转, 

   但是现在的一个问题是RequestDispatcher是一个接口,那么如果要想使用此接口必须为其进行接口的对象实例化操作,但是此时只能依靠ServletRequest接口才可完成。

      RequestDispatcher getRequestDispatcher(String path)

 

  1. package ServletDemo; 
  2. import java.io.IOException; 
  3. import javax.print.attribute.standard.Sides; 
  4. import javax.servlet.*; 
  5. import javax.servlet.http.*; 
  6. public class fuwuduanTiaozhuan extends HttpServlet { //继承HttpServlet 
  7.     public void doGet(HttpServletRequest req,HttpServletResponse resp) 
  8.            throws ServletException,IOException{   //处理服务 
  9.      req.getSession().setAttribute("name", "赵玉强"); 
  10.      req.setAttribute("info","zhaoyuqiang.blog.51cto.com");//设置属性 
  11.      //实例化RequestDispatcher对象,同时指定跳转路径 
  12.      RequestDispatcher rd=req.getRequestDispatcher("get_info.jsp"); 
  13.      rd.forward(req, resp);//服务器跳转 
  14.     } 
  15.      public void doPost(HttpServletRequest req,HttpServletResponse resp) 
  16.            throws ServletException,IOException{ //处理POST请求 
  17.         this.doGet(req, resp);   //调用doGet()方法       
  18.      } 

  1. <servlet> 
  2.      <servlet-name>tiaozhuan</servlet-name> 
  3.   <servlet-class>ServletDemo.fuwuduanTiaozhuan</servlet-class> 
  4. </servlet> 
  5. <servlet-mapping> 
  6.      <servlet-name>tiaozhuan</servlet-name> 
  7.   <url-pattern>/jsp/fuwuduanTiaozhuanTest</url-pattern> 
  8. </servlet-mapping> 

get_info.jsp的内容不变。

 

在地址栏中输入路径:  http://localhost:8080/test/jsp/fuwuduanTiaozhuanTest

web页面跳转的两种方式、

 

 运行之后看一下地址栏,发现地址并没有发生改变。这就是服务器端的跳转。

   对于这两个应该用哪一种跳转,很明显,如果要用到传递request对象的时候一般都会用服务端跳转,传递sessionapplication等的时候就用客户端跳转比较好。

  服务器端跳转在开发中至少占到了95%,所以服务器端的跳转是个重点内容

h5跳转页面的几种方式,