Tomcat 和 Servlet

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. web 相关概念

  1. 软件架构
  • C/S客户端/服务器端

  • B/S浏览器/服务器端

  1. 资源分类

  2. 静态资源所有用户访问后得到的结果都是一样的称为静态资源.静态资源可以直接被浏览器解析
    * 如 html,css,JavaScript

  3. 动态资源每个用户访问相同资源后得到的结果可能不一样。称为动态资源。动态资源被访问后需要先转换为静态资源在返回给浏览器
    * 如servlet/jsp,php,asp....

  4. 网络通信三要素

    • IP电子设备(计算机)在网络中的唯一标识

    • 端口应用程序在计算机中的唯一标识 0~65536

    • 传输协议规定了数据传输的规则

    • 基础协议

      • tcp安全协议三次握手速度稍慢
      • udp不安全协议速度快

2. web 服务器软件

  • 服务器安装了服务器软件的计算机
  • 服务器软件接收用户的请求处理请求做出响应
  • web 服务器软件接收用户的请求处理请求做出响应
    • web服务器软件中可以部署web项目让用户通过浏览器来访问这些项目
    • web容器

常见的 java 相关的 web 服务器软件

  • webLogicoracle公司大型的JavaEE服务器支持所有的JavaEE规范收费
  • webSphereIBM公司大型的JavaEE服务器支持所有的JavaEE规范收费
  • JBOSSJBOSS公司的大型的JavaEE服务器支持所有的JavaEE规范收费
    • TomcatApache基 金组织中小型的JavaEE服务器仅仅支持少量的JavaEE规范servlet/jsp开源的免费

3. Tomcat Windows 安装

1、下载安装

下载地址

找个目录解压缩就行

2、启动

bin/startup.bat 双击运行即可访问http://localhost:8080/

3、关闭

  • bin/shutdown.bat 双击运行
  • ctrl + c
  • 强制关闭直接关掉窗口

4、卸载

直接删除安装目录即可

启动时可能出现的问题

  • 黑窗口一闪而过没有正确配置 JAVA_HOME
  • 启动报错一般是端口被占用修改端口号 conf/server.xml 或强制杀掉占用端口的程序

4. Tomcat 部署项目

Tomcat 部署项目有三种方式

1、直接将项目放到 webapps 目录下即可

  • 访问地址http://localhost:8080/项目名称
  • 简化部署将项目打成一个 war 包再将 war 包放置到 webapps 目录下war 包会自动解压缩

2、配置 conf/server.xml 文件

<!--在<Host>标签体中配置-->
<Context docBase="D:\hello" path="/hehe" />

* docBase:项目存放的路径
* path虚拟目录

3、在 conf\Catalina\localhost 创建任意名称的 xml 文件在文件中编写

<!-- 浏览器访问路径 http://localhost:8080/xml文件名称 -->

<Context docBase="D:\hello" />

5. IDEA 集成 Tomcat

java 动态项目的目录结构

-- 项目的根目录
    -- src/
    -- web/
    	-- WEB-INF/
    		-- web.xmlweb项目的核心配置文件
    	-- index.jsp
        -- classes目录放置字节码文件的目录
        -- lib目录放置依赖的jar包

注意IDEA 2021 创建 javaweb 时没有对 javaee 的支持需要 Ctrl + Shift + Alt + /然后勾选javaee.legacy.project.wizard可参考

6. servlet

servletserver applet 的简写

  • 概念运行在服务器端的小程序
    • 狭义Servlet 就是一个接口 implements定义了Java类被浏览器访问到(tomcat识别)的规则
    • 广义用 Java 编写的服务端程序具有独立于平台和协议的特性主要功能在于交互式地浏览和生成数据生成动态 Web 内容
    • 将来我们自定义一个类实现 Servlet 接口复写方法

6.1 快速入门

步骤

  • 创建 JavaEE 项目
  • 定义类实现 Servlet 接口public class ServletDemo1 implements Servlet
  • 实现 Servlet 的五个抽象方法init、getServletConfig、service、getServletInfo、destroy
  • 配置 Servlet
  • 启动 Tomcat

ServletDemo1.java

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

public class ServletDemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

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

    }

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

    @Override
    public void destroy() {

    }
}

web.xml 主要配置映射和全类名

<!--配置Servlet -->
<servlet>
    <servlet-name>demo1</servlet-name>		<!-- 名称自定义 -->
    <servlet-class>com.jun.servlet_learn.ServletDemo1</servlet-class>	<!-- 全类名 -->
</servlet>

<servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>

执行原理

  1. 当服务器接受到客户端浏览器的请求后会解析请求URL路径获取访问的 Servlet 的资源路径
  2. 查找web.xml文件是否有对应的 <url-pattern>标签体内容。
  3. 如果有则在找到对应的<servlet-class>全类名
  4. tomcat会将字节码文件加载进内存并且创建其对象
  5. 调用其方法

6.2 Servlet 生命周期

Servlet 生命周期从创建到销毁的整个过程涉及的三个抽象方式

  • init()只执行一次Servlet 被创建时执行一般用于加载资源
  • service()每次访问ServletService方法都会被调用一次即每次请求时都会触发
  • destory()只执行一次Servlet 被销毁时执行销毁之前只有服务器正常关闭才会执行一般用于释放资源

Servlet 什么时候被创建

默认第一次访问时就会被创建也可以自定义其创建时机修改 web.xml

<!-- load-on-startup 是负数Servlet 在第一次访问时创建当是 0 或正整数时则在服务器启动时创建默认为负数-->
<servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>com.jun.servlet_learn.ServletDemo1</servlet-class>
    <load-on-startup>5</load-on-startup>
</servlet>

注意Servlet 是单例的多个用户同时访问可能存在线程安全因此尽量不要在 Servlet 中定义成员变量即使要定义也最好不要修改而是只访问可以定义局部变量

6.3 Servlet 注解

Servlet 3.x 以上的版本支持注解注解的好吃就是当有多个 Servlet 时不需要每个都在 web.xml 中配置直接在类上方添加注解即可

步骤

  1. 创建JavaEE项目选择Servlet的版本3.0以上可以不创建web.xml
  2. 定义一个类实现Servlet接口
  3. 复写方法
  4. 在类上使用@WebServlet注解进行配置@WebServlet("资源路径")
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet(urlPatterns = "/demo1")
public class ServletDemo1 implements Servlet {}

// 简写
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {}


7. Servlet相关配置
	1. urlpartten:Servlet访问路径
		1. 一个Servlet可以定义多个访问路径  @WebServlet({"/d4","/dd4","/ddd4"})
		2. 路径定义规则
			1. /xxx路径匹配
			2. /xxx/xxx:多层路径目录结构
			3. *.do扩展名匹配

WebServlet 之 urlpartten 配置

  • 一个 Servlet 可以定义多个访问路径如 @WebServlet({"/d4","/dd4","/ddd4"})

  • 路径定义规则

    • /xxx路径匹配如@WebServlet("/ddd4")
    • /xxx/xxx多层路径目录结构如@WebServlet("/ddd4/aaa")
    • *.do扩展名匹配如@WebServlet("*.do")其中 * 表示通配符可匹配任意字符

IDEA 与 Tomcat 相关配置

  • IDEA会为每一个tomcat部署的项目单独建立一份配置文件默认C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat查看 idea 控制台的 logUsing CATALINA_BASE

  • Tomcat 采用的真正部署方式其实是在 conf/Catalina 给每个 Servlet 新建一个 xml 配置文件使其能够定位到具体的 Web 项目

  • WEB-INF目录下的资源不能被浏览器直接访问

7. Servlet 继承体系

Servlet -- // 接口
	|
GenericServlet -- // 抽象类
	|
HttpServlet  -- 抽象类
  • GenericServletServlet 接口中其他的方法做了默认空实现只将service()方法作为抽象
  • HttpServlethttp 协议的一种封装简化操作使用时继承并覆写 http 的相关方法即可如doGet()/doPost() 分别对应处理 get/post 请求一般开发中推荐使用这种方式
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;

@WebServlet("/demo2")
public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("http servlet!");
    }
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Tomcat