- 浏览: 551330 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 746原文地址:http://blog.csdn ... -
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
2015-10-30 18:01 1032原文地址:http://blog.csdn.net/mmllk ... -
过滤器和拦截器的区别
2015-10-30 18:00 642原文地址:http://blog.163.com/hzd_lo ... -
过滤器、监听器、拦截器的区别
2015-10-30 17:59 569原文地址:http://blog.csdn.net/x_yp/ ... -
【JSP】让HTML和JSP页面不缓存的方法
2015-10-14 10:16 462原文地址:http://blog.csdn.net/juebl ... -
jsp去掉浏览器缓存
2015-10-14 09:21 605原文地址:http://bbs.csdn.net/topics ... -
pageContext对象的用法
2015-09-04 21:24 679原文地址:http://blog.csdn.net/warcr ... -
log4j日志文件乱码问题的解决方法
2015-01-06 18:11 797原文地址:http://blog.csdn.net/inkfi ... -
JEECMS 系统权限设计
2014-09-05 16:25 924原文地址:http://chinajweb.iteye.com ... -
使用servlet保存用户上传的文件到本地
2014-08-12 14:46 616原文地址:http://blog.csdn.net/shuwe ... -
Servlet 实现文件的上传与下载
2014-08-12 14:44 868原文地址:http://www.2cto.com/kf/201 ... -
android文件上传到服务器
2014-08-12 11:03 376代码非原创,fix了bug,完善的还是需要再思量: /** * ... -
常用社交网络(SNS、人人网、新浪微博)动态新闻(feed、新鲜事、好友动态)系统浅析
2014-08-05 15:09 914原文地址:http://blog.csdn.net/sunme ... -
Feed系统架构资料收集
2014-08-05 15:08 600原文地址:http://blog.csdn ... -
微博feed系统推拉模式和时间分区拉模式架构探讨
2014-08-05 14:47 388原文地址:http://www.csdn.net/articl ... -
spring 出错,Could not find acceptable representation
2014-08-03 14:41 1484原文地址:http://www.myexception.cn/ ... -
spring @ResponseBody 返回json格式有关问题
2014-08-03 14:20 616原文地址:http://www.myexception.cn/ ... -
httpclient上传文件及传参数
2014-07-27 14:02 1183原文地址:http://hyacinth.blog.sohu. ... -
在eclipse中把java工程变为web工程
2014-06-27 11:18 697项目上点鼠标右键->properties->Pro ... -
配置Tomcat直接显示目录结构和文件列表
2014-06-10 13:52 708配置Tomcat直接显示目录结构和文件列表 TomcatSe ...
相关推荐
request和response实现跳转和重定向的区别
在c#Asp.Net简单告诉你request和response的用法;
JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...
ASP内置对象Request和Response详解
Request和Response.txt 了解他们的作用 看了有益无害的东西~~
asp关于内建对象的介绍!很不错很详细的原创PPT课件!适合教师课堂使用,学生自学等。
request和response的详细解说
ASP 有六个内置对象,Request和Response对象最为常用,本ppt详细介绍了该对象及其使用方法。
7request和response.docx
Request和Response程序设计汇编.pdf
第20章 Request和Response.pdf
Spring MVC 中几种获取request和response的方式,讲解详细实用!
ASP.NET 中 Request 与 Response 的常用属性方法 ...了解 Request 和 Response 的常用属性方法是 ASP.NET 开发的基础,更好地理解和使用 Request 和 Response 对象可以帮助开发者更好地实现自己的开发目标。
第二部分第三章Request和Response对象.pptx
JSP内置对象:Request和Response的简单介绍及使用,需要的朋友可以参考一下
Java Web程序设计-1期 项目库_单元案例_Request和Response-Session对象案例.doc 学习资料 复习资料 教学资源
JAVA Web程序设计-3期(KC006) 05单元案例_Request和Response-Session对象案例.doc 学习资料 复习资料 教学资源
Request 和 Response 学习笔记 Request 和 Response 是 Java Web 开发中最基本的概念,它们是服务器和客户端之间通讯的桥梁。在这个笔记中,我们将详细介绍 Request 和 Response 的概念、作用、使用方法以及相关的...