HTTP的Request格式

1.请求行 (Request Line):

GET /index.php HTTP/1.1

2.请求头 (Headers):

Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

3.空行 (Blank Line):请求头结束后有一个空行,表示请求头的结束。

4.请求体 (Body)(可选):仅在某些请求方法(如 POST、PUT)中使用,包含发送到服务器的数据。

完整的HTTP请求示例:

POST /submit HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

name=John&age=30

HTTP的Response数据格式

1.状态行 (Status Line):包含 HTTP 版本、状态码和状态描述。

HTTP/1.1 200 OK

2.响应头 (Headers):

Content-Type: text/html; charset=UTF-8
Content-Length: 1354
Date: Sun, 08 Sep 2024 06:25:42 GMT

3.空行 (Blank Line):响应头结束后有一个空行,表示响应头的结束。
4.响应体 (Body)(可选):包含实际返回的数据,如 HTML 文档、图像等。

完整的HTTP响应示例:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1354
Date: Sun, 08 Sep 2024 06:25:42 GMT

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

TomCat

修改启动端口号: conf/server.xml

Maven Web项目结构

1.开发中的项目
开发中的项目

2.可以部署的Web项目
可以部署的Web项目

TomCat-创建MavenWeb项目

使用骨架创建:
骨架1

骨架2

pom.xml留下这些东西
骨架3

IDEA中集成TomCat7

在pom.xml添加 TomCat7 插件
可以通过 port 标签和 path 标签控制服务器占用的端口和访问时需要填写的路径

        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>

Servlet

Servlet 是 Java EE(Java Platform, Enterprise Edition)中的一种组件,用于生成动态的 Web 内容。

Servlet的生命周期

Servlet 生命周期由以下几个阶段组成:

  1. 加载和实例化 :服务器加载 Servlet 类,并创建一个实例。
  1. 初始化 :调用 init() 方法进行初始化。

调用时机: 默认情况下是Servlet被第一次访问时调用, 但可以通过 loadOnStartup = 1 修改调用时机: 把实现Servlet接口的类的注解写成这样

@WebServlet(urlPatterns = "/demo1", loadOnStartup = 1)

loadOnStartup = 1 代表Servlet类被创建的时候就会调用init方法, 默认值是-1

  1. 请求处理 :每次请求到来时,服务器调用 service() 方法,该方法进一步调用 doGet(), doPost() 等方法。

service() 方法调用时机: 每次Servlet被访问时都要调用一次

  1. 销毁 :在服务器卸载 Servlet 或重启时,调用 destroy() 方法进行资源释放。

destroy() 方法调用时机: jvm释放内存(极少见)或服务器关闭的时候, 只会调用一次

Servlet快速入门

package com.itheima.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet(urlPatterns = "/demo1", loadOnStartup = 1)
public class ServletDemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Servlet hello world~");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return "";
    }

    @Override
    public void destroy() {

    }
}

Servlet urlPattern配置

1.精确匹配
@WebServlet(urlPatterns = "/user/select")

  1. 目录匹配
    @WebServlet(urlPatterns = "/user/*")

3.扩展名匹配
@WebServlet(urlPatterns = "/*.do")

4.任意匹配
@WebServlet(urlPatterns = "/")

@WebServlet(urlPatterns = "/*")

最好不要使用任意匹配的方式!!


因为会覆盖Servlet默认的urlPattern, 可能会产生一些莫名其妙的问题

XML配置方式编写Servlet

Servlet3.0版本前不支持注解配置, 只能使用XML进行配置

步骤:

1.编写Servlet类

2.在web.xml中配置这个Servlet

  <servlet>
    <servlet-name>demo5</servlet-name>
    <servlet-class>com.itheima.web.ServletDemo5</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo5</servlet-name>
    <url-pattern>/demo5</url-pattern>
  </servlet-mapping>