`

Servlet中的重定向和请求分派

    博客分类:
  • J2EE
阅读更多

1.重定向

    在Servlet中的接口HttpServletRequest提供了sendRedirect()方法用于生成302相应码和Location响应头,从而通知客户端去重新访问Location响应头指定的URL,其定义如下:

    public void sendRedirect(String location ) throws IOException;

   对于sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,也可重定向到一个容器中的其他应用程序中的资源。

    eg:

 

 

//Servlet1.java 

package com.redrect; 

import java.io.IOException; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class Servlet1 extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest request, 
   HttpServletResponse response) throws ServletException, IOException { 
  // TODO Auto-generated method stub 
  this.doPost(request, response); 
} 

@Override 
protected void doPost(HttpServletRequest request, 
   HttpServletResponse response) throws ServletException, IOException { 
  // TODO Auto-generated method stub 
  response.sendRedirect("Servlet2"); //重定向到指定路径的资源 
  // RequestDispatcher dis=request.getRequestDispatcher("Servlet2"); 
  // dis.forward(request, response); 
} 

} 
//Servlet2.java 

package com.redrect; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class Servlet2 extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest request, 
   HttpServletResponse response) throws ServletException, IOException { 
  // TODO Auto-generated method stub 
  this.doPost(request, response); 
} 

@Override 
protected void doPost(HttpServletRequest request, 
   HttpServletResponse response) throws ServletException, IOException { 
  // TODO Auto-generated method stub 
  response.setContentType("text/html;charset=utf-8"); 
  PrintWriter out = response.getWriter(); 
  out.println("<html>"); 
  out.println(" <head><title>servlet2</title></head>"); 
  out.println(" <body>"); 
  out.println("从Servlet2中获取请求参数name的值:"); 
  out.println(request.getParameter("name")); 
  out.println(" </body>"); 
  out.println("</html>"); 
} 

} 

 

同时要在项目中的web.xml对Servlet进行声明:

<servlet> 
  <servlet-name>Servlet1</servlet-name> 
  <servlet-class>com.lkh.redrect.Servlet1</servlet-class> 
</servlet> 
<servlet-mapping> 
  <servlet-name>Servlet1</servlet-name> 
  <url-pattern>/Servlet1</url-pattern> 
</servlet-mapping> 
<servlet> 
  <servlet-name>Servlet2</servlet-name> 
  <servlet-class>com.redrect.Servlet2</servlet-class> 
</servlet> 
<servlet-mapping> 
  <servlet-name>Servlet2</servlet-name> 
  <url-pattern>/Servlet2</url-pattern> 

 

 



2.请求分派

    在Servlet中定义一个接口RequestDispatcher

    其方法如下:

    public void forward(ServletRequest request,ServletResponse response) throws ServletException,IOException;

    public void include(ServletRequest request,ServletResponse response) throws ServletException,IOException;

    对于forward()方法用于将请求转发到RequestDispatcher实例封装的资源,include()方法用于将RequestDispatcher实例封装的资源作为当前响应的一部分包含进来。

    获取RequestDispatcher实例的方式有两种:

    (1)调用ServletContext接口提供的getRequestDispatcher(String url) 方法

    (2)调用ServletRequest接口提供的getRequestDispatcher(String url) 方法

    ServletContext接口提供的getRequestDispatcher(String url) 方法中的路径参数必须以”/"开头

    ServletRequest接口提供的getRequestDispatcher(String url) 方法中的路径参数可以是相对路径也可为绝对路径。

    eg:

    只要将上面中的Servlet1.java 中的doPost()代码改为

    RequestDispatcher dis=request.getRequestDispatcher("Servlet2");
    dis.forward(request, response);

3.重定向和请求分派的比较:

    <1>请求分派只能将请求转发给同一个web应用中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可重定向到其他站点的资源上

    <2>重定向的访问过程结束后,浏览器的地址栏显示的URL会发生改变,变成重定向的目标URL,而请求分派的浏览器地址栏保持初始的URL

    <3>请求分派的发起者和被调者之间共享相同的request实例和response实例,属于同一个“请求/响应”而重定向的发起者和被调用者使用各自的request实例和response实例,各自属于独立的“请求/响应”过程。

 

分享到:
评论
1 楼 hongmeikaile 2011-04-27  
写的很好,对我有帮助

相关推荐

    请求重定向个请求分派

    请求重定向和请求分派是 MVC 架构中关键的技术,它们在 Web 应用程序中扮演着重要的角色。本文将详细介绍请求重定向和请求分派的概念、实现方法和应用场景。 一、请求重定向 请求重定向是指将客户端的请求重新定向...

    java零基础自学 之 Servlet 技术1-4课时

    7. **转发与重定向**:在Servlet中,可以通过`RequestDispatcher`的`forward()`方法将请求转发到其他资源,或者使用`Response.sendRedirect()`方法进行重定向,两者在处理请求流程上有所不同。 8. **会话管理**:...

    Java自设计练习servlet的小项目

    - 实践如何在Servlet中转发和重定向请求,以及如何在`session`和`cookie`中存储用户信息。 - 学习如何配置和使用Servlet容器,如Tomcat,部署Web应用。 通过这个项目,开发者可以巩固Servlet的基础知识,逐步掌握...

    servlet 源码

    - `RequestDispatcher`接口用于在Servlet之间转发和重定向请求。 - `forward()`方法将请求转发给另一个资源,而`redirect()`则告诉客户端重新发起一个新的请求。 6. **过滤器(Filter)**: - Filter是Servlet...

    head_first_servlet&jsp学习笔记

    3. **重定向与请求分派**:重定向改变浏览器地址,分派则在服务器内部转发请求。 【Web应用属性与监听器】 1. **属性与参数**:属性是动态存储在特定范围(请求、会话、上下文)的数据,参数通常是配置项。 2. **...

    Servlet_servlet_

    在本项目"Servlet_servlet_"中,我们看到重点是利用Servlet技术来实现与MySQL数据库的交互,包括数据的增(Add)、删(Delete)、改(Update)和查(Select)操作。这里将详细阐述Servlet与MySQL结合进行CRUD操作的...

    Java_Web_培训

    ### Java Web 培训知识点总结 #### 一、前言和体系结构 ...它采用了请求/响应模型,客户端... - 了解请求重定向和请求分派的概念及应用场景。 通过以上内容的学习,可以为深入理解和掌握Java Web开发打下坚实的基础。

    深入JavaServlet网络编程

    3. 服务:每当收到HTTP请求,Servlet容器会调用`service()`方法,根据请求类型分派到`doGet()`、`doPost()`等具体处理方法。 4. 销毁:当Servlet不再需要时,容器调用`destroy()`方法,释放资源。 三、Servlet容器 ...

    servlet实现身高体重比测试

    - 在Servlet的`doGet()`或`doPost()`方法中获取参数,计算BMI,然后可以通过转发或重定向返回结果页面。 通过实践这个项目,你不仅可以掌握Servlet的基本操作,还能深入了解EL表达式的应用,以及如何在实际Web应用...

    JSP和SERVLET笔试常遇到的一些问题

    JSP(JavaServer Pages)和Servlet是Java Web开发中两个核心的技术,它们主要用于构建动态网站。下面将详细阐述这两个概念以及它们在笔试中常遇到的问题。 1. JSP内置对象: - request:代表HttpServletRequest对象...

    javaee Servlet实例 含源码

    4. **转发与重定向**:Servlet可以使用`RequestDispatcher`的`forward()`方法将请求转发给其他资源,或者使用`sendRedirect()`方法将浏览器重定向到新的URL。 5. **会话管理**:Servlet可以利用`HttpSession`接口来...

    servlet讲解资料

    - **服务**:每次有新的请求到达,Servlet容器都会调用Servlet的service()方法,根据请求类型分派到doGet()或doPost()等具体方法。 - **销毁**:当Servlet不再需要时,服务器会调用destroy()方法释放资源,然后...

    servlet快速学习文档

    - **转发与重定向**:Servlet可以使用RequestDispatcher的`forward()`方法在内部转发请求,或者使用`sendRedirect()`方法让客户端发起新的请求。 - **会话管理**:通过HttpSession接口,Servlet可以存储和检索用户...

    相关servlet学习代码

    Servlet是Java Web开发中的核心组件,它是一种服务器端的Java应用程序,主要用于处理和响应客户端(如浏览器)的请求。在本"相关servlet学习代码"资料中,你将找到关于Servlet基础以及一些实用功能实现的详细示例。...

    Java Servlet开发与实例

    - **转发与重定向**:Servlet可以通过`RequestDispatcher`进行请求转发或重定向到JSP页面,实现视图渲染。 9. **Filter与Listener** - **Filter**:预处理或后处理Servlet请求,实现过滤功能,如登录检查、字符...

    jsp+servlet最简单的增删改查

    1. **请求分派**:Servlet可以使用`RequestDispatcher`将请求分派到JSP页面,例如在处理完业务逻辑后显示结果。 ```java RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp"); dispatcher....

    servlet api

    Servlet API是Java Web开发中的核心组件,主要用于处理HTTP请求并生成响应。它是Java Servlet规范的一部分,由Java EE(现在称为Jakarta EE)定义,由Sun Microsystems(现为Oracle)最初开发,并由Java社区进程...

    Head First Servlets & JSP 学习笔记

    5. **重定向与请求分派**: - **重定向(Redirect)**:使用`sendRedirect()`方法,浏览器会发起新的请求到指定URL,地址栏显示新URL。 - **请求分派(Forward)**:通过`RequestDispatcher`的`forward()`方法,...

    Jsp\Servlet复习PPT大全

    Servlet是Java EE中的一种组件,它运行在服务器端,负责接收和响应客户端的请求。Servlet可以处理各种类型的请求,包括HTTP、FTP等。通过继承`javax.servlet.http.HttpServlet`基类,开发者可以重写`doGet`和`doPost...

    jsp+servlet教学源码小示例,看圣思园视频总结

    在示例中,可能包含名为`*.java`的`servlet`文件,这些文件实现了`javax.servlet.Servlet`和`javax.servlet.http.HttpServlet`接口,用于接收、处理和响应HTTP请求。 1. **JSP基本元素** - **指令(Directives)**...

Global site tag (gtag.js) - Google Analytics