HTTP协议
超文本传输协议 , 是一个应用层的网络传输协议. 属于TCP/IP协议集中的一个子协议
特点:简单快速;无连接协议,每次连接服务器只处理一次请求,处理完毕,立即断开;无状态协议,处理客户端的请求时,服务器没有记忆能力;支持多种不同的数据提交方式,GET/POST等等;支持任意类型数据传输,较为灵活.
HTTP协议的组成部分
-
请求
请求头(request header)
请求的头部信息 , 由一个个的键值对组成, 这些键值对描述的是客户端的信息.
请求体
GET请求不存在请求体 ,将请求的参数存储在网址中;POST请求请求体的作用:用于存储客户端请求的数据
请求空行
请求头部与请求体之间的一行空白行
请求行
由一个个的键值对组成, 这些键值对描述的是 请求的方式 ,访问的网址, 以及http协议的版本.
-
响应
响应头
响应头部的信息, 由一个个的键值对组成, 这些键值对描述的是服务器的信息.
响应体
一个单独的数据报, 是服务器给客户端回复的主要内容.
响应行
由一个个的键值对组成, 这些键值对描述的是 : 响应的状态码, 以及响应成功与失败的提示
Servlet
Servlet是运行在服务器上的Java类,用来完成B/S架构下,客户端请求的响应处理
平台独立,性能优良,能以线程方式运行
Servlet API为Servlet提供了统一的编程接口
Servlet的使用
在idea里新建项目,选择java里的web Application。把tomcat的jar库建项目依赖,然后新建tomcat服务器。
然后在src下新建demo目录,在此目录下建servlet1.class,并输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package demo;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;
public class Servlet1 extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<h1>Hello JavaWeb</h1>"); } }
|
在web/web-inf/web.xml的web-app标签下,输入代码,把Servlet映射到网址上
1 2 3 4 5 6 7 8
| <servlet> <servlet-name>haha</servlet-name> <servlet-class>demo.Servlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>haha</servlet-name> <url-pattern>/s1</url-pattern> </servlet-mapping>
|
通过注解来完成映射网址的配置,不需要使用web.xml,直接在servlet代码类主体上加@WebServlet(“/s2”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package demo;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;
@WebServlet("/s2") public class Servlet2 extends HttpServlet {
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out .append("<html>") .append("<head><title>Servlet准备的网页内容</title></head>") .append("<body>") .append("<h1>示例标题</h1>");
for (int i = 0; i < 100; i++) { out.append("<div>嘿嘿嘿"+i+"</div>"); } out .append("</body>") .append("</html>") ; } }
|
servlet的生命周期
指的是Servlet从创建到消亡的周期
Servlet的创建时机:默认情况下, 当用户第一次访问Servlet的映射地址时, Servlet的对象被创建。
Serlvet的销毁时机:当tomcat关闭,或应用被卸载时,Servlet被销毁;(当tomcat关闭后或应用被卸载后,用户无法再访问Servlet,我们Servlet也就不需要在内存中存在了,所以此时被销毁)
tocmat为了方便我们 进行资源的缓存 ,为了让我们能在Servlet创建时, 初始化一些重复利用的资源,为了让我们能在Servlet销毁时,释放这些重复利用的资源, 提供了生命周期对应的方法 :
1.init方法: 当Servlet被创建时,此方法执行,用于告知程序员,第一次访问产生了.我们可以在此方法中初始化后续重复利用的资源.
2.service方法: 服务方法,当用户每一次访问时,都会执行,用于处理用户的请求,以及对用户进行响应.
3.destroy方法: 当servlet即将被销毁时,tomcat会调用此方法,告知程序员.我们可以在此方法中释放初始化的那些重复利用的资源.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package demo;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;
@WebServlet("/s3") public class Servlet3 extends HttpServlet {
@Override public void init() throws ServletException { System.out.println("servlet初始化中..."); }
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().append("<h1>生命周期</h1>"); System.out.println("servlet正在处理请求"); }
@Override public void destroy() { System.out.println("servlet即将被释放..."); } }
|
调整Servlet对象的创建时机 (可以理解为: 懒汉变饿汉)
使用web.xml的配置方式,在里加数字,改变init()执行时间.
取值为数字 , 默认值为-1;当值为负数时:第一次请求时加载.当值≥0时,含义是:服务器启动时,就加载servlet.多个servlet之间值越小越早加载.值相同按照web.xml中自上而下的配置顺序加载!