HTTP&Tomcat&Servlet

JavaWeb的技术栈:

BS架构:浏览器-服务器架构,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器请求服务器,服务器把web资源发送给浏览器。

服务器端有很多资源:

1、静态资源:HTML、CSS、JavaScript,负责页面展示
2、动态资源:Servlet、JSP等,主要用来负责逻辑处理,处理完逻辑后会交给静态资源来展示
3、数据库:存储数据

HTTP协议:
作用:主要定义通信规则
浏览器发送请求到服务器,服务器响应数据给浏览器,整个过程都遵守HTTP协议(一种规则)

Web服务器:
负责解析HTTP协议,解析请求数据,发送响应数据。
浏览器按照HTTP协议发送请求和数据,Web服务器根据HTTP协议解析请求和数据,再按照HTTP协议发送给浏览器。
Tomcat是一种Web服务器

Request是从客户端向服务器发出的请求对象
Response是从服务器端响应给客户端的结果对象
JSP是动态网页技术
绘画技术是来存储客户端和服务器交互所产生的数据
过滤器是来拦截客户端的请求
监听器是来监听特定事件

HTTP

超文本传输协议,规定了浏览器和服务器之间的数据传输规则
请求数据和响应数据需要根据指定的格式进行传输

HTTP协议的特点:

1)基于TCP协议:面向连接、安全
2)基于请求-响应模型 的:一次请求对应一次响应,请求-响应是一一对应的关系
3)无状态协议:每次请求-响应都是独立没有记忆的
*缺点:多次请求间不能共享数据
*优点:速度快
利用会话技术来解决多次请求间无法共享数据

请求数据:
请求行、请求头、请求体

请求行: HTTP请求中的第一行数据,请求行包含三块内容,分别是 GET[请求方式] /[请求URL路径]HTTP/1.1[HTTP协议及版本]
请求方式有七种,最常用的是GET和POST

请求头: 第二行开始,格式为key: value形式
请求头中会包含若干个属性,常见的HTTP请求头有:

在这里插入图片描述
服务器可以根据请求头中的内容来获取客户端的相关信息。
不同浏览器解析HTML和CSS标签的结果不一致,导致相同的代码在不同的浏览器出现不同的效果,服务器根据客户端请求头中的数据获取到浏览器的类型,可根据不同的浏览器设置不同的代码来达到一致的效果。==》浏览器兼容问题

请求体:post请求的最后一部分,存储请求参数。
请求体和请求头之间是有一个空行隔开
在这里插入图片描述
GET和POST请求之间的区别:
1)GET请求参数在请求行中,没有请求体,POST请求的请求参数在请求体中
2)GET请求请求参数大小有限制,POST没有限制

响应数据:
响应行、响应头、响应体
在这里插入图片描述

响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP协议及版本] 200[响应状态码] ok[状态码的描述]

响应头:第二行开始,格式为key:value形式
响应头中会包含若干个属性,常见的HTTP响应头有:
在这里插入图片描述
响应体:存放响应数据。与响应头之间有个空行隔开

响应状态码:
200 ok 客户端请求成功
404 Not Found 请求资源不存在
500 Internal Server Error 服务端发生不可预期的错误

Maven创建web项目

在Tomcat中运行的绝大多数是web项目,使用Maven工具能更简单快捷的创建web项目。

web项目结构分为两种:
1)开发中的项目
在这里插入图片描述
2)开发完可部署的web项目
在这里插入图片描述
开发项目可通过Maven打包命令:package,获取到部署的web项目目录
编译后的java字节码文件和resources的资源文件,会放到WEB-INF下的classes目录下
pom.xml中依赖坐标对应的jar包,会被放到WEB-INF中的lib目录

Maven来创建Web项目有两种方式:

1)使用骨架
2)不使用骨架
注意:上述两种方式创建web项目都不齐全,需要手动补充内容。推荐不使用骨架。
在这里插入图片描述
在这里插入图片描述

Tomcat

web服务器是一个应用程序,对HTTP协议的操作进行封装
Web服务器是安装在服务器端的一款软件

Tomcat是一款软件,开源的轻量级web服务器,支持servlet、jsp少量JavaEE规范。
Tomcat也被成为web容器、servlet容器。Servlet需要依赖Tomcat才能运行。

web服务器的作用:

封装HTTP协议操作,简化开发
将web项目部署到服务器中,对外提供网上浏览服务

在TDEA中使用Tomcat有两种方式:

1)本地集成Tomcat
2)Tomcat插件(推荐)
注意:若对Tomcat的版本有较高要求,要在Tomcat7以上,就只能使用本地集成Tomcat

在pom.xml中添加Tomcat插件:

<build>
	<plugins>
		<!--Tomcat插件 -->
		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<port>80</port><!--访问端口号 -->
				<!--项目访问路径
				未配置访问路径: http://localhost:80/tomcat-demo2/a.html
				配置/后访问路径: http://localhost:80/a.html
				如果配置成 /hello,访问路径会变成什么?
				答案: http://localhost:80/hello/a.html
				-->
				<path>/</path>
			</configuration>
		</plugin>
	</plugins>
</build>

Servlet

servlet是javaweb最核心的内容,是java提供的一门动态web资源开发技术
使用servlet可以实现:不同的用户在页面上动态显示不同的内容
Servlet是JavaEE规范之一,其实就是一个接口,我们需要定义一个servlet类实现Servlet接口,并由web服务器运行Servlet.

Servlet的快速入门:
(1)创建web项目,导入Servlet依赖坐标

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>3.1.0</version>
	<!--
	此处为什么需要添加该标签?
	provided指的是在编译和测试过程中有效,最后生成的war包时不会加入
	因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和
	Tomcat中的jar包冲突,导致报错
	-->
	<scope>provided</scope>
</dependency>

(2)创建一个类,实现servlet接口,重写接口中所有方法
重写的方法中最重要的方法是service方法
在这里插入图片描述
(3)在创建的servlet实现类上加@WebServlet注解,配置servlet的访问路径

@WebServlet(“/demo1”)

(4)启动Tomcat,浏览器中输入URL地址http://localhost:8080/web-demo/demo1访问该Servlet

Servlet的执行流程:
向浏览器发出 http://localhost:8080/web-demo/demo1请求,可从请求中可解析出三部分:

localhost:8080 可找到要访问的Tomcat web服务器
web-demo 可以找到部署在Tomcat服务器上的web-demo项目
demo1 可以找到要访问的是项目中的哪个Servlet类,根据@WebServlet后面的值进行匹配

==找到servlet类后,Tomcat服务器会为这个类创建一个对象,然后调用对象中的service方法
service方法有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求
数据,ServletResponse封装的是响应数据,后期我们可以通过这两个参数实现前后端的数据
交互

Servlet的生命周期:
注意:servlet容器==Tomcat服务器
servlet对象是由Tomcat服务器创建的,运行在服务器中,生命周期由服务器管理
分为4个阶段:
1、加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象。

默认情况,Servlet会在第一次访问被容器创建,但是如果创建Servlet比较耗时的话,那么第一个访问的人等待的时间就比较长,用户的体验就比较差,可设置参数使在服务器启动时创建servlet对象
@WebServlet(urlPatterns = “/demo1”,loadOnStartup = 1)
loadOnstartup的取值有两类情况
(1)负整数:第一次访问时创建Servlet对象
(2)0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

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

3、请求处理:每次请求servlet时,服务器就会调用一次servlet的service方法
4、服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()
方法完成资源的释放。

service方法是每次请求servlet都会调用的方法

servlet的体系结构:
其实我们更关注service方法,但必须实现servlet接口的5个方法,比较麻烦。

Servlet的体系结构:
在这里插入图片描述
开发B/S架构的web项目都是针对HTTP协议的,所以自定义的servlet都会继承HttpServlet

@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //使用request对象,获取请求数据
        String name = request.getParameter("name");
        System.out.println(name);

        //使用response,设置响应数据
        response.setHeader("context-type", "text/html;charset=utf-8");
        response.getWriter().write("<h1>"+name+",欢迎您!</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

根据请求方式的不同,调用不同的方法原因:

请求方式:一共7种,常见GET和POST两种请求方式。前端发送GET请求和POST请求时,参数位置不一致:GET请求参数在请求行中,POST请求参数在请求体中

HttpServlet的使用步骤:
(1)继承HttpServlet (2)重写doGet和doPost方法
HttpServlet原理:获取请求方式,根据不同的请求方式调用不同的方法

urlPattern配置:
配置servlet的访问路径(urlPattern)
在这里插入图片描述
urlPattern配置规则:

精确匹配
目录匹配
扩展名匹配
任意匹配

五种配置的优先级为 精确匹配 > 目录匹配> 扩展名匹配 > /* > /
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
xml配置访问路径:
前面对应Servlet的配置,我们都使用的是@WebServlet,这个是Servlet从3.0版本后开始支持注解配置,3.0版本前只支持XML配置文件的配置方法。
步骤:
1)创建servlet类
2)在web.xml中配置该Servlet

<!--
	Servlet 全类名
-->
<servlet>
	<!-- servlet的名称,名字任意-->
	<servlet-name>demo13</servlet-name>
	<!--servlet的类全名-->
	<servlet-class>com.itheima.web.ServletDemo13</servlet-class>
</servlet>
<!--
	Servlet 访问路径
-->
<servlet-mapping>
	<!-- servlet的名称,要和上面的名称一致-->
	<servlet-name>demo13</servlet-name>
	<!-- servlet的访问路径-->
	<url-pattern>/demo13</url-pattern>
</servlet-mapping>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值