Tomcat
- 开源web服务器软件
- 下载
- 安装 解压
- 卸载 删除
- 启动:
- bin/startup.bat 双击启动
- 访问 localhost:8080 回车访问
- ip:8080 访问别人
- 可能遇到的问题
- 黑窗口一闪而过:
- 原因:没有正确配置JAVA_HOME环境变量
- 解决方案:正确配置即可
- 启动报错(端口占用)
-
找到占用的端口号,找到进程,杀死进程
- netstate -ano
-
修改自身的端口号
- config 目录(conf/server.xml)修改port redirecctPort
- 一般会将Tomcat的默认端口号修改为80。80端口号是http的默认端口,在访问时,就不用输入端口号
-
- 黑窗口一闪而过:
- 关闭
- 正常关闭
- bin/shutdown.bat
- ctrl + c
- 强制关闭
- 点击启动窗口的X
- 正常关闭
- 配置
- 部署项目的方式:
- 直接将项目放倒webapps目录中即可
- /hello: 项目的访问路径 -->虚拟目录
- 简化部署:将项目打成一个war包,将war放置到webapps目录下,war包会自动解压
- 配置conf/server.xml文件。 在标签体中配置
- docBase:项目存放路径
- path:虚拟目录
<Context docBase="D:\hello" path="/hehe" />
- 在conf\Catalina\localhost 创建任意名称的xml文件,在文件中编写
<Context docBase="D:\hello"/>
- 虚拟名称就是xml文件的名称
- 热部署
- 直接将项目放倒webapps目录中即可
- 部署项目的方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubaEFL7T-1571666132127)(en-resource://database/8606:0)]
- 静态项目和动态项目
- 目录结构
- Java动态项目的目录结构
- 项目的根目录
- WEB_INF目录:
- web.xml: web项目的核心配置文件
- classes目录:放置字节码文件的目录
- lib目录:放置依赖jar包
- WEB_INF目录:
- 项目的根目录
- Java动态项目的目录结构
- 目录结构
- 将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执行原理
- 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问Servlet的资源路径
- 查找web.xml 文件,是否有对应的 标签体内容
- 如果有,则再找到对应的 全类名
- tomcat 会将字节码文件加载进内存,并且创建其对象
- 调用其方法
-
Servlet中的方法 (生命周期)
-
init
-
初始化方法
-
在Servlet被创建时,执行。只会执行一次
-
第一次被访问时创建
- 负数
-
服务器启动时创建
- 0或正数
-
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
- 多个用户同时访问时,可能存在线程安全问题
- 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值
-
-
service
- 提供服务方法
- 每一次Servlet被访问,执行。执行多次
-
destroy
- 销毁方法
- 在Servlet正常关闭时,执行。只会执行一次
- 在Servlet销毁之前执行,用于销毁资源
-
getServletConfig
- 获取 Servlet 的配置对象
-
getServletInfo
- 获取 Servlet 的一些信息 版本,作者…
-
-
Servlet 3.0
- 好处:支持注解配置。可以不使用web.xml
- 步骤:
- 创建JavaEE项目
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用 @WebServlet 注解配置
- @WebServlet(“资源路径”)
IDEA与Tomcat的相关配置
- 配置文件
- C:\Users\ybsde.IntelliJIdea2019.2\system\tomcat_Tomcat
- 工作空间项目 和 Tomcat 部署的web项目
- Tomcat真正访问的目录是 “Tomcat部署的web项目”, “Tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源文件
- WEB-INF 目录下的资源不能被浏览器直接访问
- 断点调试:Dubug 启动
Servlet体系结构 与 urlpartten
-
Servlet – 接口
- GenericServlet – 抽象类
- 将Servlet接口中的其他方法做了默认空实现,只将 service 方法作为抽象
- HttpServlet – 抽象类
- 对http协议的一种封装,简化操作
- 定义类继承HTTPServlet
- 复写doGet 或 doPost 方法
- 对http协议的一种封装,简化操作
- GenericServlet – 抽象类
-
Servlet 相关配置
- urlpartten: Servlet访问路径
- 一个Servlet可以定义多个访问路径
- @WebServlet({"/d03", “/dd03”})
- 路径定义规则
- /xx
- /xxx/xxx “/user/info”
- *.do
- 一个Servlet可以定义多个访问路径
- urlpartten: Servlet访问路径