美文网首页
J2EE--Servlet

J2EE--Servlet

作者: RicherYY | 来源:发表于2020-08-17 15:04 被阅读0次
  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

相关文章

  • J2EE--Servlet

    什么是Servlet? 如何使用Servler? Servlet生命周期 Servlet方法体系 Servlet3...

网友评论

      本文标题:J2EE--Servlet

      本文链接:https://www.haomeiwen.com/subject/ohewdktx.html