J2EE--Servlet

  1. 什么是Servlet?
  2. 如何使用Servler?
  3. Servlet生命周期
  4. Servlet方法体系
  5. Servlet3.0 注解

1. 什么是Servlet?

  • Servlet是JavaEE的一个组件,也是JavaEE的一个规范
  • Servlet程序类必须遵循Servlet的规范必须实现javax.servlet-Servlet接口
image.png

2. 如何使用Servler?

Servlet 本身不能独立运行,需要在一个web应用中运行的,而一个web应用是部署在tomcat中的。

所以开发一个servlet需要如下几个步骤:

  1. 创建普通的java类并继承HTTPServlet
  2. 覆写service方法
  3. 在service方法中书写逻辑代码
  4. 在webapp下的WEB-INF文件夹下的web。xml文件中配置servlet

示例代码 (前三步)

package servlet;

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

public class ServletDemo 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("hello,Servlet");
    }

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

    @Override
    public void destroy() {

    }
}

示例代码(配置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-name>demo</servlet-name>
        <servlet-class>servlet.ServletDemo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>
    
</web-app>

运行项目地址

image.png

控制台打印输出结果

image.png

解释:

  • 服务器地址:端口号/webapp下的资源名称/请求名
  • <servlet>:要添加的Servlet节点
    • <servlet-name>demo</servlet-name>:Servlet请求名称
    • <servlet-class>servlet.ServletDemo</servlet-class>:请求需要调用类名(全限定名,就是包名+类名)
  • <servlet-mapping>:Servlet映射
    • <servlet-name>demo</servlet-name>:需要映射的请求名
    • <url-pattern>/demo</url-pattern>:请求地址

3.Servlet 生命周期

  1. 加载Servlet类。
  2. 创建Servlet实例。调用Servlet类的init()方法。
  3. 调用Servlet类的service()方法。
  4. 调用Servlet类的destroy()方法

Servlet 生命周期流程图

Servlet生命周期.png

如上图所显示,servlet有三种状态模式:新建、就绪、结束

  • 创建新的Servlet的时候处于新建状态。
  • 调用Servlet类的init()方法后,Servlet处于就绪状态,在就绪状态下Servlet执行任务。
  • 当web容器调用Servlet类的destroy()方法后,Servlet处于结束状态。

分步骤解释生命周期

3.1 加载Servlet类

  • 类加载器负责加载servlet类。
  • 默认当Web容器接收到servlet的第一个请求时,将加载servlet类
访问方式 <load-on-startup>
第一次被访问时创建 负数
在服务器启动时创建 0或正整数

3.2 创建Servlet实例

  • Web容器在加载servlet类之后创建一个servlet的实例。
  • servlet实例在servlet生命周期中只创建一次

3.3 调用init方法

  • Web容器在创建servlet实例后调用init方法一次。
  • init方法用于初始化servlet。
  • Servlet的init()方法,只执行一次

它是javax.servlet.Servlet接口的生命周期方法。init方法的语法如下:

public void init(ServletConfig config) throws ServletException

3.4 调用service方法

  • 每当接收到servlet的请求时,Web容器都会调用service()方法。
  • 如果servlet未初始化,则遵循上述前三个步骤,然后调用service()方法
  • 如果servlet被初始化,它调用service()方法。
  • 每次访问Servlet时,Service方法都会被调用一次

Servlet接口的service方法的语法如下:

public void service(ServletRequest request, ServletResponse response)   
  throws ServletException, IOException

3.5 调用destroy方法

  • 从服务中删除servlet实例之前,Web容器调用destroy()方法。
  • 它使servlet有机会清理所有资源,例如内存,线程等。

Servlet接口的destroy方法的语法如下:

public void destroy()
  • servlet仅初始化一次
  • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
    多个用户同时访问时,可能存在线程安全问题。
    解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

4.Servlet体系介绍

image.png
  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象。将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
  • HttpServlet:对http协议的一种封装,简化操作(只使用这个类)
    1. 定义类继承HttpServlet
    2. 复写doGet/doPost方法
image.png
doPOST.png

5.Servlet3.0 注解

  • 好处:支持注解配置。可以不需要web.xml了。
  • 操作步骤:
    1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
    2. 定义一个类,实现Servlet接口
    3. 复写方法
    4. 在类上使用@WebServlet注解,进行配置 @WebServlet("资源路径")


      image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • servlet: 一、简介: 是jsp前身,在服务器上运行的小程序,一个servlet相当于一个java类,可由“...
    取名废同学阅读 514评论 0 0
  • J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植...
    大佛爱读书阅读 171评论 0 0
  • 本篇要点:1、servlet入门准备2、servlet生命周期3、request和response对象4、解决中文...
    大数据阶梯之路阅读 534评论 0 2
  • Servlet总结 阐述Servlet和CGI的区别?CGI的不足之处:Servlet的优点: Servlet接口...
    哈哈大圣阅读 103评论 0 2
  • Servlet总结 阐述Servlet和CGI的区别?CGI的不足之处:Servlet的优点: Servlet接口...
    程序猿天璇阅读 387评论 0 6