Tomcat&Servlet
Web服务器介绍
简介
- Web服务器一般指网站服务器,也称之为WWW(World Wide Web)服务器。是指驻留于因特网上某种类型计算机的程序。这个服务器并不是硬件服务器,而是软件服务器。其主要功能是提供网上信息浏览服务,可以向发出请求的浏览器提供文档,也可以放置网站文件,让全世界浏览;还可以放置数据文件,让全世界下载等。
常见服务器
- Web服务器主要用来接收客户端发送的请求和响应客户端请求。
- Tomcat(Apache):当前应用最广的JavaWeb服务器
- JBoss(Redhat红帽):支持JavaEE,应用比较广EJB容器 –> SSH轻量级的框架代替
- GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广
- Resin(Caucho):支持JavaEE,应用越来越广
- Weblogic(Orcale):收费!支持JavaEE,适合大型项目
- Websphere(IBM):收费!支持JavaEE,适合大型项目
Tomcat服务器
介绍
- Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
- Tomcat服务器实际上是JSP 页面和Servlet的容器,主要用来部署和运行Web应用。另外,Tomcat也具有处理HTML页面的功能。
HTTP协议介绍
HTTP概念
- Hypertext Transfer Protocol,HTTP超文本传输协议,是一个简单的请求-响应协议。
HTTP特点
- 基于TCP/IP的高级协议
默认端口号:80
基于请求/响应模型:一次请求对应一次响应 - 简单快速,客户端向服务器请求服务时,只需要传送请求方式和路径
- 灵活,HTTP协议允许传送任意类型的数据,正在传输的类型由content-type标明
- 无连接。就是每个请求都建立一个连接,请求处理完毕并发送至客户端之后就断开连接。这样明显有其缺点,就是在需要连续发送请求时,需要为每一个请求单独的再次建立连接,很浪费时间和资源。于是在HTTP协议1.1版本之后引入了可持续连接,也就是再每一个请求处理完毕后,它不会立刻就断开连接,而是再等待一段时间,如果在此期间又有新的请求过来,那么等待时间刷新,如果没有,则等待时间完毕后,连接关闭。
- 无状态。是指协议对于每次请求的处理没有记忆能力,它不知道之前是否已经访问过,不保留访问痕迹。主要目的是为了保证数据传输的安全性。
HTTP版本
-
HTTP
- 0.9 使用于各种数据信息的简洁快速协议,仅限于传输文本
- 1.0 该协议对每一次请求/响应建立并拆除一次连接,(允许传输超文本)不支持长连接,即无连接
- 1.1 在1.0版本的基础上支持长连接keep-alive
-
HTTPS
- 建立一个信息俺去通道来保证数据传输的安全
- 确保网站的真实性,凡是使用HTTPS的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息
HTTP底层协议
-
TCP协议
-
TCP的特点
- 面向连接,保证可靠性
-
TCP三次握手/HTTP三次握手
- 第一次握手:客户端向服务端发送一个请求消息,服务端收到信息后知道自己与客户端是可以连接成功的;
- 第二次握手:此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后要向客户端做出响应,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的。
- 第三次握手:客户端确认与服务器建立连接后,才开始向服务器端发送数据。
-
目的
- 数据传输的安全性
传输数据的特点
-
请求request
-
请求行
- 请求行中,可以通过request对象的相应方法获取到比如协议名、服务名、端口号、项目名称、请求方式、参数列表等信息。
-
请求头
- 请求头是当前对用户发送的数据的描述信息。请求头信息在请求的时候不需要程序员手动添加,是浏览器发送的时候已经处理好的。(浏览器通知服务器的一些信息)
-
请求体
- 请求体就是请求中携带的数据,也就是我们需要获取的参数。只有在post情况下才会有请求体
-
-
响应response
-
响应行
- 响应行中包含协议和版本 状态码
-
响应头
- 服务器想要告诉浏览器 的一些信息。写法格式:头名称:值
-
响应体
- 服务器处理完后响应给浏览器的源码信息
-
Servlet
概念
- servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求
Servlet使用
-
准备工作
- 写一个HTML页面将一个表单中的账号和密码传递到java类中并打印输出到控制台。
-
编写步骤
- 创建HTML页面并设计一个表单
- 创建一个普通类,并继承HTTPServlet抽象类,并重写Service方法
- 在web.xml文件中注册servlet,作为前后台连接中间件
- 修改前台表单中action的请求地址
- 通过浏览器输入对应的地址来访问测试
-
实现方式
- 创建HTML页面并设计一个表单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/day11/login" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>- 创建一个普通类, 并继承HTTPServlet抽象类, 并重写Service方法
package com.ujiuye.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /* ctrl+o 重写方法 */ public class LoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求体中的数据 String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username); System.out.println(password); } }- 在web.xml文件中注册servlet, 作为前后台连接的中间件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--将loginServlet注册到web容器中--> <servlet> <servlet-name>LoginServlet</servlet-name> <!--全限定类名:包名+类名 --> <servlet-class>com.ujiuye.servlet.LoginServlet</servlet-class> </servlet> <!--给已注册到web容器的servlet配置的访问地址--> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <!--访问地址 一个web项目与多个servlet 一个servlet有一个唯一的地址 --> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>- 修改前台表单中action的请求地址
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/day11/login" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>

Servlet原理
- 1.浏览器页面发出http请求到达web服务器、web服务器解析你的请求地址webapps中找到你具体要访问的哪个项目/day11/再根据/login找到该项目下去web.xml与url-pattern进行匹配。
- 2.如果匹配成功再找到与url-pattern同级的servlet-name的servlet名称、 然后再找到servlet标签中的servlet-name进行匹配、然后再找到与servlet-name同级的servlet- class进行匹配、就可以获取到servlet具体地址com.ujiuye.servlet.LoginServlet (节点中内容匹配使用是dom4j xml解析技术)
- 3.通过反射技术创建loginServlet类的对象。然后井调用里面service方法
Servlet生命周期
-
概述
- select从创建到销毁的一系列过程,整个servlet的生命周期可以分为三个阶段
-
初始化阶段
- init():标志着servlet在内存中被创建了
- 1、在请求第一次到达servlet的时候创建
- 2、只调用一次(单例对象多线程)
-
提供服务阶段
- service():标志着servlet正在处理请求
- 请求一次执行一次
-
销毁阶段
- destroy():标志着servlet被销毁了
- 1、当服务器关闭的时候执行
- 2、只调用一次
Servlet进化史
-
猿人阶段
import javax.servlet.*; import java.io.IOException; /** * @author: ChengLong * @version: 11.0.2 * @datetime: 2021/8/16 15:48 */ /* * 猿人阶段 * * */ public class MyServlet_01 implements Servlet { /** * 初始化方法 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { } /** * 获取servlet配置初始化参数 * @return */ @Override public ServletConfig getServletConfig() { return null; } /** * 提供服务 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("我是servlet第一种常见方式"); } /** * 获取servlet基本信息 * @return */ @Override public String getServletInfo() { return null; } /** * 销毁的 * */ @Override public void destroy() { } } -
古代社会阶段
import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; /** * @author: ChengLong * @version: 11.0.2 * @datetime: 2021/8/16 15:53 */ /* *古代社会阶段 * */ public class MyServlet_02 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("我是第二种方式"); } } -
现代社会阶段
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author: ChengLong * @version: 11.0.2 * @datetime: 2021/8/16 15:56 */ /* * 现代社会阶段 * */ public class MyServlet_03 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是第三种创建方式"); } }
Servlet注解使用方式
-
Servlet的注解(@WebServlet)是Servlet3.0及以上版本支持的,主要目的是简化web.xml配置。
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; /** * @author: ChengLong * @version: 11.0.2 * @datetime: 2021/8/16 16:23 */ @WebServlet("/my4") public class MyServlet_04 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是注解配置的"); } } -
注意
- 一个Servlet的配置可以使用注解,也可以使用web.xml文件,但二者不能共存,只能任选其一,否则会报错。
@WebServlet("/m4") 相当于/m4
- 一个Servlet的配置可以使用注解,也可以使用web.xml文件,但二者不能共存,只能任选其一,否则会报错。
Servlet路径多元化
-
url-pattern配置方式共有三种
- 完全路径匹配(一层路径/指定多层路径) :以 / 开始
/hello , /hello1 - 目录匹配(多种路径都可以访问 排除已经指定的路径) :以 / 开始 需要以 * 结束
/(所有), /aaa/ (aaa目录下的所有), /aaa/bbb/* - 扩展名匹配(后缀名)不能以 / 开始 以 * 开始的.
*.do , *.action
- 完全路径匹配(一层路径/指定多层路径) :以 / 开始

浙公网安备 33010602011771号