Tomcat

动态web工程介绍

image-20210810170629200

更多内容详见tomcat 与 nginx,apache的区别是什么? - David的回答 - 知乎

Servlet

一个接口

触发顺序

1. 构造器 第一次触发 
2. init 第一次时触发 
3. service 重复调用 
4. destroy 停止时触发

部署目录

  1. 注解
@WebServlet(name = "NewServlet", value = "/ser")

类名NewServlet 部署到工程目录下的的/ser目录下(localhost:8080/myTomcat/ser)

  1. 改web.xml(Tomcat 10 及以上失效)

区分get/post请求

  1. 父类强转子类
//父类强转子类,使用getmethod方法

HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
        if(httpServletRequest.getMethod().equals("POST")){
        doPOST();
        }else{
        doGET();
        }
  1. 自定义方法继承自(原来的)子类

    1. 自定义类继承HttpServlet类
    2. 重写doGet/doPost
public class HelloServlet extends HttpServlet {
    public void init() {}

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {}

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {}

    public void destroy() {}

}

类关系Servlet

servletConfig

作用

  1. 获取Servlet程序别名servlet-name
  2. 获取初始化参数init-param
  3. 获取ServletContext对象

使用Servlet 的程序和 ServletConfig 是启动时tomcat帮忙创建,我们只需要使用

Servlet 是启动时创建 ServletConfig 是每个servlet程序创建时创建一个

  1. init时使用
        servletConfig.getServleName();    //程序别名
        servletConfig.getInitParameter("key");    //初始化key的值
        servletConfig.getServletContext();    //获取servletContext对象
  1. service中使用
//init
{
    super.init(config);        
}
//service
{
    ServletConfig servletConfig=getServletConfig();
    servletConfig.getInitParameter("key");    //初始化key的值
}

Config.Context

作用

  1. 获取web.xml的上下文参数context-param(任意key-value)
 ServletContext context = getServletConfig().getServletContext();
 context.getInitParameter("key");

2.获取工程路径

context.getContextPath();
//    /myTomcat
  1. 获取工程部署后在磁盘上的绝对路径
        System.out.println(context.getRealPath("/"));
//   D:\Ajian\javatest\myTomcat\target\myTomcat-1.0-SNAPSHOT\
  1. 像map存数据 (用于不同servlet共享数据/停止数据会销毁)
setAttribute  getAttribute removeAttribute

HTTP协议-请求

GET

常见形式

1. a标签
2. form中的method=get
3. link引入css
4. Script引入js文件
5. image引入图片
6. iframe引入html页面
7. 浏览器输地址后回车

img.png

请求行

1. 请求方式                  GET
2. 请求资源路径[+?+请求参数]   /myTomcat/index.html
3. 请求协议版本号             HTTP/1.1

请求头

1. Accept:              客户端可以接受的数据类型
2. Accept-Language:     zh_CN/en_US
3. User-Agent:          浏览器信息
4. Accept-Encoding:     可以接受的数据编码 (压缩)格式
5. Host:                请求的服务器ip:端口
6. Connection:          Keep-Alive/Closed     回传数据后 告诉服务器的行为

Post

常见形式

form中的method=get

请求行

1. 请求方式                              POST
2. 请求资源路径[+?+请求参数]               /myTomcat/index.html
3. 请求协议版本号                         HTTP/1.1

请求头

大部分与 GET相同

1. Accept:              客户端可以接受的数据类型
2. Accept-Language:     zh_CN/en_US
3. User-Agent:          浏览器信息
4. Accept-Encoding:     可以接受的数据编码 (压缩)格式
5. Host:                请求的服务器ip:端口
6. Connection:          Keep-Alive/Closed     回传数据后 告诉服务器的行为

特别

7. Referer:              请求发起时浏览器地址(请求的来源)
8. Content-Type:         multipart/form-data                 以多段的方式提交数据(流的方式,用于上传)
                         application/x-www-form-urlencoded   提交方式是 name=value&name=value,然后进行url编码(非英文转为%xx%xx)
9. Content-Length:       请求体长度
10.Catch-Control:        no-cache不缓存                                     控制缓存  

img_1.png

空行

请求体

key1=value1&key2=value2

HTTP协议-响应

响应行

1. 响应协议和版本号                         HTTP/1.1
2. 响应状态码                              200  
3. 响应状态描述符                           OK

响应头

1. Server:                            服务器信息(如Apache-Coyote/1.1)
2. Content-Type:                    响应体的数据类型(如text/html   application/json)MIME类型
3. Content-Length:                    长度
4. Date:                            请求响应的时间(格林时间)

空行

响应体

(例如 整个html页面)

image-20210814171839089

常见响应状态

200 ok
404 请求收到 但是请求数据not found
302 重定向
500 请求收到 但是内部错误

HTTP中的数据类型

MIME类型

image-20210814173112102