概念
运行在服务器端的小程序
* servlat是一个接口就是规则,定义了Java类别浏览器访问到(Tomcat识别)的规则
* 自定义一个类,实现Servlat接扣,复写方法–>这就是serclat
入门
- 创建Java EE项目
- 已经创建好
- 定义类,实现Servlat接口
- 在src下创建一个包
- 实现接口中的抽象方法
package cn.zcx.web.servlet;
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 {
System.out.println("你好。servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
- 配置servlet
- 在WEB-INF中
- 1为虚拟名称
- 2为实际路径
- 做映射
- 1为撒还能一步配的
- 2为上一个配置访问路径
- demo01代表上一个的路径
- /demo01为通过浏览器访问地路径
<?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_3_1.xsd"
version="3.1">
<!-- 配置Servlet-->
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>cn.zcx.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
</web-app>
访问
- 访问/demo01 service方法被调用输出在控制台
执行原理
- 服务器接收请求后,解析请求URL,获取访问的Servlet资源路径
- 查找web.xml文件,是否有标签体内容
- 查找到后超找全类名
- Tomcat将字节码文件加载进内存并且创建对象
- 调用方法
servlet中方法
三个重要方法(生命周期)
- init方法:
在servlet被创建时执行,只执行一次。
- 创建时间:默认第一次访问时Servlet被创建
- 特殊创建时间:可以指定Servlet创建时机–在web.xml中编辑
- 1. 在添加标签默认负数-1为在第一次被访问时创建
- 2. 标签默认正数0/1为在创建服务器时创建
<!-- 配置Servlet-->
<servlet>
<servlet-name>demo02</servlet-name>
<servlet-class>cn.zcx.web.servlet.ServletDemo02</servlet-class>
// 在<servlet>添加<load-on-startup>标签默认负数-1为在第一次被访问时chuangjian
// <load-on-startup>标签默认正数0/1为在创建服务器时创建
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo02</servlet-name>
<url-pattern>/demo02</url-pattern>
</servlet-mapping>
- 当多用户同时访问会出现线程安全问题—解决:尽量不要定义成员变量。定义成员变量不要对其修改值。
2. servlet方法
每一次Servlet被访问时执行
3. destroy方法
当服务器正常关闭时执行一次。
在Servlet被销毁之前执行用于释放资源
package cn.zcx.web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo02 implements Servlet {
// INIT方法当Servlet被创建时执行一次
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init......");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
// servlet方法每次被访问时执行一次
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet......");
}
@Override
public String getServletInfo() {
return null;
}
// destroy方法,当服务器正常关闭时执行一次。
@Override
public void destroy() {
System.out.println("destroy......");
}
}
两个方法
- ServletConfig方法
Servlet的配置对象,需要自己实现 - getServletInfo方法
获取Servlet信息。几乎不用。
Servlet3.0(为WEB.xml简化)
- 好处:
- 支持注解配置(可以不需要web.xml)
- 步骤:
- 创建项目选择Servlet3.0以上版本,可以不创建WEB.XML
- 定义类实现Servlet接口
- 复写方法
- 在类上使用@WebServlet注解进行配置
@WebServlet(urlPatterns = “资源路径”)
/@WebServlet(value= “资源路径”)
/@WebServlet(“资源路径”)
都可以
idea与tomcat相关配置
- IDEA会为每一个tomcat部署的项目单独创立一份配置
- 在控制台Using CATALINA_BASE: “C:\Users\17567.IntelliJIdea2019.2\system\tomcat\Tomcat_8_5_50_JavaWeb”
- 就是配置文件路径
- 一个项目有两个地方存储, 工作空间 和 tomcat部署的web项目