Servlet快速入门

简介: Servlet:server applet概念:运行在服务器端的小程序Servlet是一个接口,定义了java类被浏览器访问到(被Tomcat识别)的规则定义一个类,实现Servlet接口,复写方法。这个实现类就是一个servlet

1. Servlet概念

server applet

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

Servlet是一个接口,定义了java类被浏览器访问到(被Tomcat识别)的规则

定义一个类,实现Servlet接口,复写方法。这个实现类就是一个servlet

2. Servlet快速入门

  1. 创建javaEE项目
  2. 定义一个类,实现Servlet接口

publicclassServletDemo1implementsServlet

  1. 测试Tomcat10无法继承Servlet,Tomcat8可以
  2. 实现接口中的抽象方法
  3. 配置Servlet
    在web.xml中配置

<!--    给类的全类名取个别名-->

   <servlet>

       <servlet-name>demo1</servlet-name>

       <servlet-class>cn.upeveryday.web.servlet.ServletDemo1</servlet-class>

   </servlet>

   <!--    将资源路径映射别名,以便可以通过url访问类资源-->

   <servlet-mapping>

       <servlet-name>demo1</servlet-name>

       <url-pattern>/demo2</url-pattern>

   </servlet-mapping>

通过http://localhost:8080/demo2,可以执行ServletDemo1.class

3. Servlet执行原理

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

4. Servlet的生命周期

   /*

   * 初始化方法

   * 在Servlet被创建时执行,只会执行一次*/

   @Override

   publicvoidinit(ServletConfigservletConfig) throwsServletException {

       System.out.println("init...");

   }

   /*

   * 提供服务方法

   * 每一次Servlet被访问时,执行。执行多次*/

   @Override

   publicvoidservice(ServletRequestservletRequest, ServletResponseservletResponse) throwsServletException, IOException {

       System.out.println("service...");

   }

   /*

   * 销毁方法

   * 在服务器正常关闭时(Servlet被销毁),执行。只执行一次*/

   @Override

   publicvoiddestroy() {

       System.out.println("destory...");

   }

4.1 Servlet被创建的时机

<servlet>

       <servlet-name>demo1</servlet-name>

       <servlet-class>cn.upeveryday.web.servlet.ServletDemo1</servlet-class>

       <!--指定Servlet的创建时机

           1.第一次访问时创建  <load-on-startup>值为负数,默认为-1,即默认第一次访问时创建

           2.服务器Tomcat启动时创建    <load-on-startup>值为0或正数-->

       <load-on-startup>1</load-on-startup>

   </servlet>

4.2 线程安全问题

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

多个用户同时访问,可能存在线程安全问题

如果是多例的,对象会被创建多次,类中的成员会多次初始化,因此不存在线程安全问题

单例,对象只被创建一次,类中的成员也只被初始化一次,则会产生线程安全问题

解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值

5. Servlet3.0注解配置

支持注解配置,不需要web.xml了

在类上使用@WebServlet注解,进行配置

@WebServlet("资源路径")

6. IDEA与Tomcat的相关配置

  1. idea会为每一个Tomcat部署的项目单独建立一份配置文件
  • 查看控制台的log:Using CATALINA_BASE: "C:\Users\ThinkPad\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Tomcat_8_5_63_Tomcat"
  1. 工作空间项目和Tomcat部署的web项目
    工作空间项目:C:\Users\ThinkPad\IdeaProjects\xxx
    Tomcat部署的web项目:C:\Users\ThinkPad\IdeaProjects\xxx\out\artifacts\xxx
    Tomcat真正访问的是“Tomcat部署的web项目”,“Tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源
    WEB-INF目录下的资源不能被浏览器直接访问

7. Servlet的继承体系结构

  • Servlet接口
  • GenericServlet抽象类
  • HttpServlet抽象类

7.1 GenericServlet抽象类

将Servlet接口中其他的方法做了默认空实现,只将service方法作为抽象

7.2 HttpServlet抽象类

对http协议的一种封装,简化操作

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

8. Servlet相关配置

urlPattern:Servlet访问路径

  1. 一个Servlet可以定义多个访问路径

@WebServlet({"/demo1","/demo2","/demo3"})

  1. 路径定义规则:
  1. /xxx
  2. /xxx/xxx:多层路径
  3. *.do
目录
相关文章
|
3月前
|
Java 应用服务中间件
Servlet简介&快速入门
Servlet简介&快速入门
|
4月前
|
Java
Servlet快速入门
Servlet快速入门
25 0
|
应用服务中间件
JavaWeb--快速入门Servlet(Part3)
JavaWeb--快速入门Servlet(Part3)
108 0
|
XML 开发框架 安全
JavaWeb--快速入门Servlet(Part1)
JavaWeb--快速入门Servlet(Part1)
79 0
|
网络协议 Java 应用服务中间件
【JavaWeb】Http协议及Servlet快速入门
本期主要介绍Http协议及Servlet快速入门
145 0
【JavaWeb】Http协议及Servlet快速入门
|
应用服务中间件
JavaWeb--快速入门Servlet(三)
JavaWeb--快速入门Servlet(三)
103 0
JavaWeb--快速入门Servlet(三)
|
前端开发 JavaScript
JavaWeb--快速入门Servlet(二)
JavaWeb--快速入门Servlet(二)
122 0
JavaWeb--快速入门Servlet(二)
|
XML 开发框架 安全
JavaWeb--快速入门Servlet(一)
JavaWeb--快速入门Servlet(一)
121 0
JavaWeb--快速入门Servlet(一)
|
22天前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
15 3