第一章:
u HTTP协议原理 (掌握HTTP遵循请求/响应模型,HTTP是无状态的协议,端口号为80)
u HTTP协议处理流程
1、客户端和Web服务器建立连接
2、客户端发送HTTP请求
3、服务器生成HTTP响应回发
4、关闭连接
u HTTP协议请求和响应信息格式
请求信息:
分为请求行、请求头、空行、消息体(POST)
响应信息:
u WEB服务器缺陷:
只能发送静态页面。解决方法是增加辅助应用,CGI是WEB服务器和外部应用通讯的标准。可使用多种语言开发。但每次请求开启进程,极大消耗服务器资源,JAVA使用WEB容器加servlet解决辅助应用。每次请求开启线程,所有线程共享WEB容器所在的进程
u WEB容器作用
Web容器负责管理和运行Servlet
容器对Servlet的支持包括
1、 通信支持
2、 servlet生命周期管理
3、 多线程支持
4、 JSP支持
5、 处理安全性
u Web应用程序的组成
WEB-INF里面的内容是不能被客户端直接访问。一般用于存放一些比较隐密的信息
u Tomcat目录结构(
bin目录(tomcat启动和关闭目录)
conf(tomcat配置目录)
webapps(web 应用程序放置目录)
work(主要用作JSP翻译和编译目录)
)
第二章
u Servlet类结构
按照sun公司的规范,每个servlet类都必须实现servlet接口。其中service()方法是提供给用户实现的业务方法。GenericServlet对servlet和servletConfig(用于servlet配置的接口)作了简单实现,但没有实现service方法。该方法用它的子类根据自己不同协议的特点进行实现。HttpServlet是GenericServlet的子类。专门针对Http协议实现了service()方法。针对不同的请求类型调用doXX()方法。所以我们在书写servlet类的时候,一般只需要继承HttpServlet,并重写doXX()方法就行了。
u Servlet的编码和部署
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{
}
servlet只有在web容器 注册之后,才能被容器所识别
Servlet3标准中可以使用@webServlet(urlpatterns="/test")注册
u Servlet URL映射路径
1、精确匹配 /abc 以abc请求可以找到该servlet
2、扩展匹配 *.do 以.do结尾请求都可找到该servlet
3、路径匹配 /abc/* 以/abc/目录请求都可找到该servlet
u 加上斜杠后,回到webapps根目录,这时,请求路径必须加入布署名
// 在当前目录下查找
u Servlet生命周期
1、容器启动,会读取conf/server.xml文件,以确定启动端口和WEB应用存放的路径
2、WEB容器启动会读取每个WEB应用的web.xml文件配置信息,并解析web.xml文件。得到servlet配置信息。
3、 容器加载并实例化Servlet
(web.xml文件配置servlet时有个
4、 容器调用init()方法初始化
5、 每次请求调用service()方法完成逻辑
6、 容器丢弃servlet调用destroy()方法
其中1、2、3、4、6只执行一行,只有5是每次请求都会执行。而且在整个生命周期中,servlet 对象只有一个,单实例多线程。
u Servlet的配置对象:ServletConfig 可以读取
u Servlet全局对象:ServletContext 作用于整个WEB应用
作用:1、可使用getRealPath()获得资源真实路径
2、可使用getAttribute()、和setAttribute()方法共享全局变量。
3、可以读取
第三章
u HTTP状态码
HTTP状态码:
100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。
200-299:表示客户请求成功。
300-399:表示用于已经移走的资源文件,指示新的地址。
400-499:表示由客户端引发的错误。
500-599:表示由服务器端引发的错误。
设置状态码sendError(code,”Resource Not Found”);
按照响应信息的格式,先有状态行,再有消息体,所以注意在使用PrintWriter向客户端输出信息之前,设置状态码
u 设置HTTP响应头
目的用于告诉客户端
发送回来的内容的类型
有多少内容被正被发送
发送内容的服务器的类型
设置响应头的方法:setHeader()或setHeaders()。注意:设置响应头只能是HTTP协议。所以setHeader和setHeaders()都是HttpServletResponse中的方法
u 设置HTTP消息体
response.getWriter()获得打印字符流,可以输出文本
response.getOutputStream()获得输出字节流,可以发送二进制数据。
u 重定向原理
重定向调用方法response.sendRedirect("http://127.0.0.1:8080/lovobook/bar.html");
1,浏览器向服务器发送HTTP请求。
2,服务器接收到请求后,如果调用response.sendRedirect()方法,表示资源已被移走。则发送一个302的状态码和location的响应头。在location响应头指明要转发的地址。
3,浏览器在接收到302状态码后,会读取location响应头的内容,并将地址栏的值赋为location响应头的内容。从而再向服务器发出第二次请求。由于是二次请求,所以重定向不能获得封装在request中的属性信息
第四章
u HTTP请求提交的方法主要有GET和POST
Get请求方式
浏览器向Web服务器发送HTTP请求
用户在网页上点击一个超连接
用户提交在网页上填写好的表单
用户在浏览器地址栏中输入URL地址并回车
默认情况下都是使用HTTP协议的GET方法提交请求
POST请求方式