- 浏览: 565561 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
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 对象或容器中已经创建的对象。
发表评论
-
HTTP协议之multipart/form-data请求分析
2015-11-09 17:41 771原文地址:http://blog.csdn ... -
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
2015-10-30 18:01 1054原文地址:http://blog.csdn.net/mmllk ... -
过滤器和拦截器的区别
2015-10-30 18:00 661原文地址:http://blog.163.com/hzd_lo ... -
过滤器、监听器、拦截器的区别
2015-10-30 17:59 597原文地址:http://blog.csdn.net/x_yp/ ... -
【JSP】让HTML和JSP页面不缓存的方法
2015-10-14 10:16 487原文地址:http://blog.csdn.net/juebl ... -
jsp去掉浏览器缓存
2015-10-14 09:21 630原文地址:http://bbs.csdn.net/topics ... -
pageContext对象的用法
2015-09-04 21:24 709原文地址:http://blog.csdn.net/warcr ... -
log4j日志文件乱码问题的解决方法
2015-01-06 18:11 829原文地址:http://blog.csdn.net/inkfi ... -
JEECMS 系统权限设计
2014-09-05 16:25 946原文地址:http://chinajweb.iteye.com ... -
使用servlet保存用户上传的文件到本地
2014-08-12 14:46 635原文地址:http://blog.csdn.net/shuwe ... -
Servlet 实现文件的上传与下载
2014-08-12 14:44 891原文地址:http://www.2cto.com/kf/201 ... -
android文件上传到服务器
2014-08-12 11:03 397代码非原创,fix了bug,完善的还是需要再思量: /** * ... -
常用社交网络(SNS、人人网、新浪微博)动态新闻(feed、新鲜事、好友动态)系统浅析
2014-08-05 15:09 937原文地址:http://blog.csdn.net/sunme ... -
Feed系统架构资料收集
2014-08-05 15:08 624原文地址:http://blog.csdn ... -
微博feed系统推拉模式和时间分区拉模式架构探讨
2014-08-05 14:47 417原文地址:http://www.csdn.net/articl ... -
spring 出错,Could not find acceptable representation
2014-08-03 14:41 1534原文地址:http://www.myexception.cn/ ... -
spring @ResponseBody 返回json格式有关问题
2014-08-03 14:20 638原文地址:http://www.myexception.cn/ ... -
httpclient上传文件及传参数
2014-07-27 14:02 1197原文地址:http://hyacinth.blog.sohu. ... -
在eclipse中把java工程变为web工程
2014-06-27 11:18 712项目上点鼠标右键->properties->Pro ... -
配置Tomcat直接显示目录结构和文件列表
2014-06-10 13:52 735配置Tomcat直接显示目录结构和文件列表 TomcatSe ...
相关推荐
ASP中的Request和Response对象是两种核心的内建对象,它们在构建动态网页时扮演着至关重要的角色。Request对象主要用于从客户端获取数据,而Response对象则用于向客户端发送数据。 Request对象提供了五种主要的方式...
在处理用户操作时,我们常常需要对页面进行跳转或重定向,这通常通过`request`和`response`对象来实现。这两者在实现页面跳转时有明显的区别,下面将详细阐述它们的不同之处。 首先,我们了解`request`和`response`...
在c#Asp.Net简单告诉你request和response的用法;
### Request和Response知识点详解 #### 一、概述 在Web开发中,`Request`与`Response`对象是非常核心且基础的概念。它们是客户端与服务器端交互的重要桥梁,用于处理HTTP请求与响应。本文将深入剖析这两个对象的...
### ASP内置对象Request和Response详解 在Web开发领域,尤其是基于ASP(Active Server Pages)的环境中,`Request`和`Response`对象扮演着至关重要的角色。它们是ASP框架中的核心组件,负责处理客户端请求和服务器...
JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...
在本文中,我们将深入探讨关于Request和Response对象在ASP(Active Server Pages)程序设计中的应用。Request对象主要用于从客户端获取信息,而Response对象则负责向客户端输出数据。这两个对象是ASP编程中的核心...
在Struts2中,ActionContext类扮演着重要的角色,它提供了与请求(Request)和响应(Response)对象交互的能力。了解如何通过ActionContext类获取和操作这些对象是开发Struts2应用的基础。 ActionContext类位于`org...
【Request和Response对象】在Web开发中扮演着至关重要的角色,尤其在ASP(Active Server Pages)编程中。这两个对象是ASP交互模型的核心组成部分,用于处理客户端与服务器之间的数据传输。 【对象知识简介】面向...
5. **Request和Response的生命周期**:当请求到达服务器,Servlet容器创建Request和Response对象,传递给`service()`方法,然后调用Servlet的`doGet()`或`doPost()`等方法。完成后,Servlet容器负责销毁这些对象。 ...
【Web_3_Request和Response1】讲解 在Web开发中,Request和Response是核心概念,它们代表了客户端与服务器之间的通信。本章主要探讨的是如何使用ServletResponse,特别是HttpServletResponse对象来构建响应,以及...
java web Request和Response详解
在Java Server Pages (JSP) 中,Request和Response是两个非常重要的内置对象,它们分别代表了HTTP请求和HTTP响应。这两个对象是基于Servlet API的HttpServletRequest和HttpServletResponse接口的实例,为开发者提供...
Spring MVC 中几种获取request和response的方式,讲解详细实用!
ASP.NET 中 Request 与 Response 的常用属性方法 ...了解 Request 和 Response 的常用属性方法是 ASP.NET 开发的基础,更好地理解和使用 Request 和 Response 对象可以帮助开发者更好地实现自己的开发目标。
`Request`和`Response`是一对紧密相连的对象,它们共同构成了HTTP通信的基础。在实际开发中,通常需要结合使用这两个对象来实现各种功能: - **转发**: - 使用`RequestDispatcher`接口的`forward()`方法可以在Web...