Web核心,HTTP,tomcat,Servlet

1,JavaWeb技术栈

B/S架构:Browser/Server,浏览器/服务器架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可

好处:易于维护升级:服务器端升级后,客户端无需任何部署就可以使用到新的版本

静态资源:HTML、CSS、JavaScript、图片等。负责页面展现

动态资源: Servlet、JSP等。负责逻辑处理

数据库:负责存储数据

HTTP协议:定义通信规则

Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据

2,HTTP

概念: HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则

HTTP协议特点:

1.基于TCP协议:面向连接,安全

2.基于请求-响应模型的:一次请求对应一次响应

3.HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的

缺点:多次请求间不能共享数据。Java中使用会话技术(Cookie、Session)来解决这个问题

优点:速度快

(1)HTTP-请求数据格式

请求数据分为3部分:

1.请求行:请求数据的第一行。其中GET表示请求方式,/表示请求资源路径,HTTP/1.1表示协议版本

2.请求头:第二行开始,格式为key: value形式

3.请求体:POST请求的最后一部分,存放请求参数

常见的HTTP请求头:

Host:表示请求的主机名

User-Agent:浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...

Chrome/79,IE浏览器的标识类似Mozilla/5.o (Windows NT ...) like Gecko;

Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等

GET请求和POST请求区别:

1.GET请求请求参数在请求行中,没有请求体

POST请求请求参数在请求体中

2.GET请求请求参数大小有限制,POST没有

java 复制代码
GET /HTTP/1.1
Host:www.itcase.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 Chrome/91.0.442.106
...
java 复制代码
POST /HTTP/1.1
Host:www.itcase.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 Chrome/91.0.442.106

username=superbaby&password=123456

(2)HTTP-响应数据格式

响应数据分为3部分:

1.响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述

2.响应头:第二行开始,格式为key: value形式

3.响应体:最后一部分。存放响应数据

html 复制代码
HTTP/1.1 200 OK
Server:Teagine
Content-Type:text/html
Transfer-Encoding:chunked...

<html>
<head>
    <title></title>
</head>
<body></body>
</html>

|-------|-------------------------------------------------------|
| 状态码分类 | 说明 |
| 1xx | 响应中------临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |
| 2xx | 成功------表示请求已经被成功接收,处理已完成 |
| 3xx | 重定向---一重定向到其它地方:它让客户端再发起一个请求以完成整个处理 |
| 4xx | 客户端错误―---处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |
| 5xx | 服务器端错误---―处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |

常见的HTTP响应头:

Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;

Content-Length:表示该响应内容的长度((字节数);

Content-Encoding:表示该响应压缩算法,例如gzip;

Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒

|-----|---------------------------------|------------------------------------------------------|
| 状态码 | 英文描述 | 解释 |
| 200 | OK | 客户端请求成功,即处理成功,这是我们最想看到的状态码 |
| 302 | Found | 指示所请求的资源已移动到由Location响应头给定的URL,浏览器会自动重新访问到这个页面 |
| 304 | Not Modified | 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
| 400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
| 403 | Forbidden | 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
| 404 | Not Found | 请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
| 428 | Pecondition Required | 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
| 429 | Too Many Requests | 太多请求,可以限制客户端请求某个资源的数量,配合Retry-After(多长时间后可请求)响应头一起使用 |
| 431 | Request Header FieldsToo Large | 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交 |
| 405 | Method Not A11owed | 请求方式有误,比如应该用GET请求方式的资源,用了POST |
| 500 | Internal server Error | 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
| 503 | Service unavailable | 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
| 511 | Network Authentication Required | 客户端需要进行身份验证才能获得网络访问权限 |

3,Web服务器-Tomcat

Web服务器是一个应该程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。主要功能是"提供网上信息浏览服务"

Web服务器的作用:

封装HTTP协议操作,简化开发

可以将web项目部署到服务器中,对外提供网上浏览服务

(1)Tomcat

概念:Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范

JavaEE: Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJA、RMI、JSP、Servlet、XML、MS、Java IDL、JTS、JTA、JavaMail、JAF

Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖于Tomcat才能运行

(2)部署信息

Tomcat部署项目:

将项目放置到webapps目录下,即部署完成

一般JavaWeb项目会被打成war包,然后将war包放到webapps目录下,Tomcat会自动解压缩war文件

(3)Tomcat maven插件

pom.xml添加Tomcat插件

XML 复制代码
<build>
    <plugins>
        <!--Tomcat 插件-->
        <plugin>
            <groupld>org.apache.tomcat.maven</groupld>
            <artifactld>tomcat7-maven-plugin<lartifactld>
            <version>2.2</version>
        </plugin>
    </plugins>
</build>

4,Servlet

Servlet是Java提供的一门动态web资源开发技术

Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

(1)Servlet快速入门

1.创建web项目,导入Servlet依赖坐标

XML 复制代码
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  1. 创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
java 复制代码
public class ServletDemo1 implements Servlet {
    public void service(){}
}

3.配置:在类上使用@WebServlet注解,配置该Servlet的访问路径

java 复制代码
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {}

4.访问:启动Tomcat,浏览器输入URL访问该Servlet

java 复制代码
http://localhost:8080/web-demo/demo1

(2)Servlet执行流程

Servlet由web服务器创建,Servlet方法由web服务器调用

服务器怎么知道servlet中一定有service方法?

因为我们自定义的Servlet,必须实现servlet接口并复写其方法,而servlet接口中有service方法

(3)Servlet生命周期

Servlet运行在servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:

1)加载和实例化

1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建servlet对象

java 复制代码
@WebServlet(urlPatterns = "/demo",loadOnStartup =1)

负整数:第一次被访问时创建Servlet对象

0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

2)初始化

2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

init方法:

调用时机:默认情况下,Servlet被第一次访问时,调用

调用次数:一次

3)请求处理

3.请求处理:每次请求Servlet时,Servlet容器都会调用servlet的service()方法对请求进行处理

Servlet方法:

调用时机:默认情况下,Servlet被第一次访问时,调用

调用次数:多次

4) 服务终止

4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

destroy方法:

调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用

调用次数:1次

(4)Servlet方法介绍

1)初始化方法

在Servlet被创建时执行,只执行一次

void init(ServletConfig config)

2)提供服务方法

每次Servlet被访问,都会调用该方法

void service(ServletRequest req, ServletResponse res)

3)销毁方法

当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁servlet

void destroy()

4)获取ServletConfig对象

ServletConfig getServletConfig()

5)获取Servlet信息

String getServletlnfo()

java 复制代码
    private ServletConfig servletConfig;

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
        System.out.println("init...");
    }

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

(5)Servlet的体系结构

我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet

java 复制代码
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post...");
    }
}
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/tomcat/demo4" method="post">
    <input name="username"><input type="submit">
</form>

</body>
</html>

运行后控制台会输出get...

之后访问a.html,输入随意值,控制台会输出post...

java 复制代码
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        //根据请求方法的不同,进行分别的处理
        HttpServletRequest request=(HttpServletRequest) req;
        //1.获取请求方式
        String method=request.getMethod();
        //2.判断
        if ("GET".equals(method)){
            //get方式的处理逻辑
            doGet(req,res);
        }else if ("POST".equals(method)){
            //post方式的处理逻辑
            doPost(req,res);
        }
    }

封装处理

java 复制代码
public class ServletDemo5 extends MyHttpServlet {}

HttpServlet使用步骤:

1.继承HttpServlet

2.重写doGet和doPost方法

HttpServlet原理:获取请求方式,并根据不同的请求方式,调用不同的doXxx方法

(6)urlPattern配置

Servlet要想被访问,必须配置其访问路径(urlPattern)

  1. 一个Servlet,可以配置多个urlPattern
java 复制代码
@WebServlet(urlPatterns = {"/demo7","/demo8"})
  1. urlPattern 配置规则

1)精确匹配

配置路径:@WebServlet("/user/select")

访问路径:localhost:8080/tomcat/user/select

2)目录匹配

配置路径:@WebServlet("/user/*")

访问路径:localhost:8080/tomcat/user/aaa

localhost:8080/tomcat/user/bbb

精确匹配优先级大于目录匹配

3)扩展名匹配

配置路径:@WebServlet("*.do")

访问路径:localhost:8080/tomcat/aaa.do

localhost:8080/tomcat/bbb.do

4)任意匹配

配置路径:@WebServlet("/")

@WebServlet("/*")

访问路径:localhost:8080/tomcat/hehe

localhost:8080/tomcat/haha

/*的优先级高于/

/和/*的区别:

当我们的项目中的Servlet配置了"/",会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet

当我们的项目中配置了"/*",意味着匹配任意访问路径

优先级:精确路径>目录路径>扩展名路径> /* > /

(7)XML配置方式编写Servlet

步骤:

1.编写Servlet类

2.在web.xml中配置该Servlet

XML 复制代码
    <!-- Servlet 全类名-->
    <servlet>
        <servlet-name>demo8</servlet-name>
        <servlet-class>com.sys.ServletDemo8</servlet-class>
    </servlet>

    <!-- Servlet 访问路径-->
    <servlet-mapping>
        <servlet-name>demo8</servlet-name>
        <url-pattern>/demo8</url-pattern>
    </servlet-mapping>
相关推荐
软件技术员21 分钟前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
耗同学一米八34 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
东华果汁哥1 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
肖永威2 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
mengao12342 小时前
centos 服务器 docker 使用代理
服务器·docker·centos
布鲁格若门2 小时前
CentOS 7 桌面版安装 cuda 12.4
linux·运维·centos·cuda
Eternal-Student2 小时前
【docker 保存】将Docker镜像保存为一个离线的tar归档文件
运维·docker·容器
C-cat.2 小时前
Linux|进程程序替换
linux·服务器·microsoft
dessler2 小时前
云计算&虚拟化-kvm-扩缩容cpu
linux·运维·云计算