当前位置: 代码迷 >> 综合 >> 【2019.10.21】JavaWeb(三) Tomcat Servelet
  详细解决方案

【2019.10.21】JavaWeb(三) Tomcat Servelet

热度:95   发布时间:2023-12-22 22:35:18.0

Tomcat

  • 开源web服务器软件
  1. 下载
  2. 安装 解压
  3. 卸载 删除
  4. 启动:
    • bin/startup.bat 双击启动
    • 访问 localhost:8080 回车访问
    • ip:8080 访问别人
    • 可能遇到的问题
      • 黑窗口一闪而过:
        • 原因:没有正确配置JAVA_HOME环境变量
        • 解决方案:正确配置即可
      • 启动报错(端口占用)
        • 找到占用的端口号,找到进程,杀死进程

          • netstate -ano
        • 修改自身的端口号

          • config 目录(conf/server.xml)修改port redirecctPort
          • 一般会将Tomcat的默认端口号修改为80。80端口号是http的默认端口,在访问时,就不用输入端口号
  5. 关闭
    1. 正常关闭
      • bin/shutdown.bat
      • ctrl + c
    2. 强制关闭
      1. 点击启动窗口的X
  6. 配置
    • 部署项目的方式:
      1. 直接将项目放倒webapps目录中即可
        • /hello: 项目的访问路径 -->虚拟目录
        • 简化部署:将项目打成一个war包,将war放置到webapps目录下,war包会自动解压
      2. 配置conf/server.xml文件。 在标签体中配置
        • docBase:项目存放路径
        • path:虚拟目录
          <Context docBase="D:\hello" path="/hehe" />
      3. 在conf\Catalina\localhost 创建任意名称的xml文件,在文件中编写 <Context docBase="D:\hello"/>
        • 虚拟名称就是xml文件的名称
        • 热部署

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubaEFL7T-1571666132127)(en-resource://database/8606:0)]

  • 静态项目和动态项目
    • 目录结构
      • Java动态项目的目录结构
        • 项目的根目录
          • WEB_INF目录:
            • web.xml: web项目的核心配置文件
            • classes目录:放置字节码文件的目录
            • lib目录:放置依赖jar包
  • 将Tomcat集成到IDEA目录中,并且创建JavaEE的项目,部署项目

servlet: server applet

  • 概念:运行在服务端的小程序

    • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
    • 实现Servlet接口,复写方法
  • Demo

    • 创建JavaEE项目
    • 定义一个类,实现Servelet接口
    • 实现接口中的抽象方法
    • 配置Servlet

web.xml 配置

<?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">
<!-- 配置Servlet --><servlet><servlet-name>demo1</servlet-name><servlet-class>com.ybs.web.servlet.ServletDemo1</servlet-class></servlet><!-- --><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern></servlet-mapping></web-app>
package com.ybs.web.servlet;import javax.servlet.*;
import java.io.IOException;public class ServletDemo1 implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}// 提供服务的方法@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Hello servlet");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}
  • Servlet执行原理

    1. 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问Servlet的资源路径
    2. 查找web.xml 文件,是否有对应的 标签体内容
    3. 如果有,则再找到对应的 全类名
    4. tomcat 会将字节码文件加载进内存,并且创建其对象
    5. 调用其方法
  • Servlet中的方法 (生命周期)

    1. init

      • 初始化方法

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

      • 第一次被访问时创建

        • 负数
      • 服务器启动时创建

        • 0或正数
      • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

        • 多个用户同时访问时,可能存在线程安全问题
        • 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值
    2. service

      • 提供服务方法
      • 每一次Servlet被访问,执行。执行多次
    3. destroy

      • 销毁方法
      • 在Servlet正常关闭时,执行。只会执行一次
      • 在Servlet销毁之前执行,用于销毁资源
    4. getServletConfig

      • 获取 Servlet 的配置对象
    5. getServletInfo

      • 获取 Servlet 的一些信息 版本,作者…
  • Servlet 3.0

    • 好处:支持注解配置。可以不使用web.xml
    • 步骤:
      1. 创建JavaEE项目
      2. 定义一个类,实现Servlet接口
      3. 复写方法
      4. 在类上使用 @WebServlet 注解配置
        1. @WebServlet(“资源路径”)

IDEA与Tomcat的相关配置

  1. 配置文件
    • C:\Users\ybsde.IntelliJIdea2019.2\system\tomcat_Tomcat
  2. 工作空间项目 和 Tomcat 部署的web项目
    1. Tomcat真正访问的目录是 “Tomcat部署的web项目”, “Tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源文件
    2. WEB-INF 目录下的资源不能被浏览器直接访问
  3. 断点调试:Dubug 启动

Servlet体系结构 与 urlpartten

  • Servlet – 接口

    • GenericServlet – 抽象类
      • 将Servlet接口中的其他方法做了默认空实现,只将 service 方法作为抽象
    • HttpServlet – 抽象类
      • 对http协议的一种封装,简化操作
        1. 定义类继承HTTPServlet
        2. 复写doGet 或 doPost 方法
  • Servlet 相关配置

    • urlpartten: Servlet访问路径
      1. 一个Servlet可以定义多个访问路径
        1. @WebServlet({"/d03", “/dd03”})
      2. 路径定义规则
        1. /xx
        2. /xxx/xxx “/user/info”
        3. *.do