`

request和response

阅读更多

1.  Request Response 对象起到了服务器与客户机之间的信息传递作用。

     Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。

    Request 对象

l            从浏览器端取得数据的方法

l            Request.QueryString 集合读取表单 GET 方法数据      

l            Request.Form 集合读取表单 POST 方法数据      

l            Request.ServerVariables 集合读取服务器端环境变量

 

2. 为什么 servlet jsp 中可以直接使用 req res 对象?

自己的理解:(不一定正确,有待学习和理解)

servlet 容器类负责贞听请求,如果捕获到请求,请创建 req res 对象,然后激活 service ()方法,(或者,如果是 get 请求,激活 doGet ()方法;如果是 post ,则激活 doPost ()方法),并且同时也把 req res 对象传递给了 service ()方法(或者是相应的 doGet() doPost() 方法);

也就是说 servlet 容器类贞听到请求后已经自动创建 req res 对象,并传递给 service ()方法了,所以自己编码实现 servlet service ()方法时候,直接使用 req res 对象就可以,因为 service ()方法(由 service 方法根据请求方式再调用相应的 doGet ()和 doPost ()方法) 是容器负责自动调用的,调用的同时也实现的 req res 的传参。 Ok !!

 

问题:迫切需要查看 tomcat javax.servlet.Servlet 接口实现的类来验证自己的理解;

 

参考资料:

Servlet 容器工作原理(一)(二)(三)(四)

http://www.linuxmine.com/45398.html

注释:这是一个通过给出简单实现 servlet 容器的源代码的方式来阐述 servlet 容器( tomcat )工作原理的好资料。

关键内容摘要:

编者注 : 本文和同系列的前面一文“基于 Java Web 服务器工作原理”,都摘自“ Tomcat 运行内幕”一书(一本有关 Tomcat 的教程)。在阅读本文前,最好先阅读前文,以巩固基础信息。在此,将介绍如何建立两个 servlet 容器。 随附本书的应用程序可以下载 ,如果您有兴趣,可以在近段时间内到 作者网站 下载。

 

   本文介绍一个简单 servlet 容器的基本原理。这个 servlet 容器都处理简单的 servlet staticResource 。复杂一些的 servlet 会超出这些容器的容量,您可以从 TOMCAT  运行内幕 一书学习创建复杂的 servlet 容器。

 

 在理解应用程序如何运作之前,您必须熟悉 javax.servlet.Servlet 接口。首先就来介绍这个接口。随后,就介绍 servlet 容器服务 servlet 的具体内容。

 

   javax.servlet.Servlet 接口

 

   servlet 编程,需要引用以下两个类和接口: javax.servlet javax.servlet.http ,在这些类和接口中, javax.servlet.Servlet 接口尤为重要。所有的 servlet 必须实现这个接口或继承已实现这个接口的类。

   Servlet 接口有五个方法,如下:

l         public void init(ServletConfig config) throws ServletException

l         public void service(ServletRequest request, ServletResponse response)  throws ServletException, java.io.IOException

l         public void destroy()

l         public ServletConfig getServletConfig()

l         public java.lang.String getServletInfo()

 

    init service destroy  方法是 Servlet 生命周期的方法。当 Servlet 类实例化后,容器加载 init ,以通知 servlet 它已进入服务行列。 init 方法必须被加载, Servelt 才能接收和请求。如果要载入数据库驱动程序、初始化一些值等等,程序员可以重写这个方法。在其他情况下,这个方法一般为空。

 

   service 方法由 Servlet 容器调用,以允许 Servlet 响应一个请求。 Servlet 容器传递 javax.servlet.ServletRequest 对象和 javax.servlet.ServletResponse 对象。 ServletRequest 对象包含客户端 HTTP 请求信息, ServletResponse 则封装 servlet 响应。 这两个对象,您可以写一些需要 servlet 怎样服务和客户怎样请求的代码。

 

一个功能健全的 servlet 容器对于每个 servlet HTTP 请求会完成以下事情:

 

l         servlet 第一次被调用的时候,加载了 servlet 类并调用它的 init 方法(仅调用一次)

l         响应每次请求的时候 ,构建一个 javax.servlet.ServletRequest javax.servlet.ServletResponse 实例。

l         激活 servlet service 方法,传递 ServletRequest ServletResponse 对象。

l         servlet 类关闭的时候,调用 servlet destroy 方法,并卸载 servlet 类。

 

发生在 servlet 容器内部的事就复杂多了。只是这个简单的 servlet 容器的功能不很健全,所以,这它只能运行非常简单的 servelt ,并不能调用 servlet init destroy 方法。然而,它也执行了以下动作:

 

l         等待   HTTP 请求。

l         构建 ServletRequest   ServletResponse 对象  

l         如果请求的是一个 staticResource ,就会激活 StaticResourceProcessor 实例的 process 方法,传递 ServletRequest ServletResponse 对象。

l         如果请求的是一个 servlet , 载入该类,并激活它的 service 方法,传递 ServletRequest ServletResponse 对象。注意:在这个 servlet 容器,每当 servlet 被请求的时候该类就被载入。

Servlet 容器的关键工作流程 HttpServer1 类的 await 方法
在这个应用程序中, servlet 容器由六个类组成

• HttpServer1
• Request
• Response
• StaticResourceProcessor
• ServletProcessor1
• Constants

  正如前文中的应用程序一样,这个程序的进入口(静态 main 方法)是 HttpServer 类。这个方法创建了 HttpServer 实例,并调用它的 await 方法。这个方法等待 HTTP 请示,然后创建一个 request 对象和 response 对象,根据请求是否是 staticResource 还是 servlet 来分派它们到 StaticResourceProcessor 实例或 ServletProcessor 实例。

代码如下:  
    Listing 2.2. HttpServer1 类的 await 方法
   public void await() {
   ServerSocket serverSocket = null;
   int     port   = 8080;
  
   try {
   serverSocket =   new ServerSocket(port, 1,
   InetAddress.getByName("127.0.0.1"));
     }
   catch (IOException e) {
   e.printStackTrace();
   System.exit(1);
     }
  
   // 循环,等待一个请求
   while (!shutdown) {
   Socket socket     = null;
   InputStream input   = null;
   OutputStream output = null;
  
   try {
   socket = serverSocket.accept();// 贞听用户请求;
   input   = socket.getInputStream();
   output = socket.getOutputStream();
  
   // 如果捕获用户请求,则创建请求对象并解析
   Request request = new Request(input);
   request.parse();
  
   // 创建回应对象
   Response response = new Response(output);
   response.setRequest(request);
  
   // 检测是否是 servlet 或静态资源的请求
   //servlet 请求以 "/servlet/" 开始
   if (request.getUri().startsWith("/servlet/")) {
   ServletProcessor1 processor = new ServletProcessor1();

// 激活 process req res )方法,并同时把 req res 实例传递给 process ()方法;

// tomcat 中,激活的是 service req res )方法(或者相应的 doGet doPost 方法)
   processor.process(request, response);
         }
   else {
   StaticResourceProcessor processor =
   new StaticResourceProcessor();
   processor.process(request, response);
         }
   // 关闭 socket
   socket.close();
  
   // 检测是否前面的 URI 是一个 shutdown 命令
   shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
       }
   catch (Exception e) {
   e.printStackTrace();
   System.exit(1);
       }
     }
   }
   如果 URI 中包含 "/servlet/." ,请求推进到后面,否则,请求传递到 StaticResourceProcessor 实例。

Ok

 

3. 如何理解内置的含义?(不一定正确,有待学习和理解)

http://topic.csdn.net/t/20060211/20/4551196.html

问:

如何深入理解内置对象  
 
最好是在实现原理层次上

答:

tomcat 的体系中,有个 jsp   parser ,它的作用是把 jsp 页面 parse java 程序( servlet ),然后再运行 parse 出来的 servlet ,由此可见, 9 个内置对象就是 jsp   parser 在根据 jsp 页面生成 servlet 的时候自动创建的 java 对象或容器中已经创建的对象。

分享到:
评论

相关推荐

    ASP第4章 Request和Response对象

    ASP中的Request和Response对象是两种核心的内建对象,它们在构建动态网页时扮演着至关重要的角色。Request对象主要用于从客户端获取数据,而Response对象则用于向客户端发送数据。 Request对象提供了五种主要的方式...

    request和response实现跳转和重定向的区别

    在处理用户操作时,我们常常需要对页面进行跳转或重定向,这通常通过`request`和`response`对象来实现。这两者在实现页面跳转时有明显的区别,下面将详细阐述它们的不同之处。 首先,我们了解`request`和`response`...

    request 和response的用法

    在c#Asp.Net简单告诉你request和response的用法;

    Request和Response.txt

    ### Request和Response知识点详解 #### 一、概述 在Web开发中,`Request`与`Response`对象是非常核心且基础的概念。它们是客户端与服务器端交互的重要桥梁,用于处理HTTP请求与响应。本文将深入剖析这两个对象的...

    ASP内置对象Request和Response详解

    ### ASP内置对象Request和Response详解 在Web开发领域,尤其是基于ASP(Active Server Pages)的环境中,`Request`和`Response`对象扮演着至关重要的角色。它们是ASP框架中的核心组件,负责处理客户端请求和服务器...

    JSP内置对象request和response.doc

    JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...

    Request和Response程序设计汇编.pdf

    在本文中,我们将深入探讨关于Request和Response对象在ASP(Active Server Pages)程序设计中的应用。Request对象主要用于从客户端获取信息,而Response对象则负责向客户端输出数据。这两个对象是ASP编程中的核心...

    Struts2通过使用ActionContext类获取request和response对象

    在Struts2中,ActionContext类扮演着重要的角色,它提供了与请求(Request)和响应(Response)对象交互的能力。了解如何通过ActionContext类获取和操作这些对象是开发Struts2应用的基础。 ActionContext类位于`org...

    第二部分第三章Request和Response对象.pptx

    【Request和Response对象】在Web开发中扮演着至关重要的角色,尤其在ASP(Active Server Pages)编程中。这两个对象是ASP交互模型的核心组成部分,用于处理客户端与服务器之间的数据传输。 【对象知识简介】面向...

    09_Java Web——Request&Response案例

    5. **Request和Response的生命周期**:当请求到达服务器,Servlet容器创建Request和Response对象,传递给`service()`方法,然后调用Servlet的`doGet()`或`doPost()`等方法。完成后,Servlet容器负责销毁这些对象。 ...

    Web_3_Request和Response1

    【Web_3_Request和Response1】讲解 在Web开发中,Request和Response是核心概念,它们代表了客户端与服务器之间的通信。本章主要探讨的是如何使用ServletResponse,特别是HttpServletResponse对象来构建响应,以及...

    java web Request和Response详解

    java web Request和Response详解

    JSP内置对象:Request和Response的简单介绍及使用

    在Java Server Pages (JSP) 中,Request和Response是两个非常重要的内置对象,它们分别代表了HTTP请求和HTTP响应。这两个对象是基于Servlet API的HttpServletRequest和HttpServletResponse接口的实例,为开发者提供...

    Spring MVC 中几种获取request和response的方式

    Spring MVC 中几种获取request和response的方式,讲解详细实用!

    asp.net中Request与response常用属性方法

    ASP.NET 中 Request 与 Response 的常用属性方法 ...了解 Request 和 Response 的常用属性方法是 ASP.NET 开发的基础,更好地理解和使用 Request 和 Response 对象可以帮助开发者更好地实现自己的开发目标。

    request与response 详解

    `Request`和`Response`是一对紧密相连的对象,它们共同构成了HTTP通信的基础。在实际开发中,通常需要结合使用这两个对象来实现各种功能: - **转发**: - 使用`RequestDispatcher`接口的`forward()`方法可以在Web...

Global site tag (gtag.js) - Google Analytics