首先,谈一谈http的流程
浏览器发送http请求到服务器,服务器经过处理返回http响应到浏览器,浏览器解析网页显示到屏幕
http请求报文
GET /login.jsp HTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
username=aa&password=123456
请求方法:GET :对应HttpServlet中的doGet方法
还有其他的请求方法:POST,PUT,HEAD等,其中POST请求对应HttpServlet中的doPost方法
URI:/login.jsp
版本协议:HTTP/1.1
最后一行为请求的正文,其他的请求头信息
下图片来源:http://blog.csdn.net/a19881029/article/details/14002273
http响应报文
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
状态码:200
状态信息:OK
其他为响应头
然后谈一谈servlet
先说一下servlet生命周期中比较重要的方法
init方法:初始化servlet中的参数(在web.xml配置)
service方法:响应客户请求,执行servlet的逻辑代码,在HttpServlet中可以理解为进行方法的转向,通过请求方法是GET还是POST来判断使用doGet还是doPost方法来执行响应请求服务的逻辑代码。
参考:http://blog.csdn.net/truong/article/details/17038687
destory方法:当服务器不再需要使用servlet实例或者重新装入时,调用该方法,会释放掉所有在inti方法申请的资源
图片来源:http://www.cnblogs.com/fifiyong/p/6390805.html
关于jsp
早期程序员是没有jsp的,只有servlet进行开发
通过http响应对象HttpServletResponse 的write方法写入响应来进行网页的开发,比较麻烦
所以,jsp的原理也是基于servlet。
在tomcat中又一个work文件目录中,打开对应项目可以看到
这就是访问jsp,会对jsp进行解析,自动创建一个java类,更准确的来说是一个servlet类,
然后进行编译为class保存在同级目录
其中也有一个servlet方法,即访问jsp时执行的响应请求的代码
该_jspService方法中的部分内容
将jsp脚本(表达式)中的java信息并入html一起写入响应
可见jsp的原理也是基于servlet中的HttpServletResponse对象的write方法进行响应的
完整流程
1.浏览器发送请求到服务器
2.服务器解析http请求,封装请求并且生成HttpServletRequest对象,并且可以通过HttpServletRequest对象一些列get方法可以得到URI,请求头等信息
3.创建一个HttpServletResponse对象,用于返回响应对象
4.这通过web.xml的映射访问对应的servlet的service方法。查看是否创建servlet(单例)实例,如果没有创建则创建该容器,并且调用init方法进行初始化,如果已经创建好则进行service调用
4.1如果访问的是jsp文件,对jsp进行进行解析为servlet的java文件,然后编译为class文件,重复4
4.2.servlet转发到servlet,即传递HttpServletRequest和HttpServletResponse
4.3..servlet转发到jsp,传递HttpServletRequest和HttpServletResponse,重复4.1
(重定向根据特性,类似)
5.结束后自动生成报文,返回一个响应给浏览器
本人菜鸟一枚,如有错误,欢迎指出