Servlet 基础

Servlet

生命周期

从创建到销毁的整个过程

  • 创建

    1. 默认情况下 servlet 在第一次处理请求时创建实例对象,对于每个 servlet,服务器只会创建一个实例对象

    2. 可以通过 load-on-startup 来设置创建时机

      值(为整数)含义
      小于0和默认情况相同
      大于等于0在服务器启动时创建实例;此时值越小创建越早,值相同则自上而下创建
  • 初始化

    1. servlet 在第一次被创建时调用 init() 方法进行初始化,该方法只执行一次,用来创建或者加载数据
@Override
public void init () throws ServletException {

}
  • 请求处理
    1. 当 Servlet 收到请求时,服务器会调用 service() 方法来处理请求;每收到一次请求就调用一次 service() 方法,所以 service() 方法可以被多次调用
    2. service() 方法会检查请求类型 (get、post 等),并调用对应的 doGet、doPost 方法;我们只需根据来自客户端的请求类型重写相应的 doGet()、doPost() 方法
public class MyServlet extends HttpServlet {
    /* GET请求来自于URL、未指定method属性的表单、超链接 */
    protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }
    /* POST请求来自于指定method属性为post的表单 */
    protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }
}
  • 销毁
    1. 一般情况下 servlet 对象在服务器关闭或者重启时销毁
    2. 销毁前调用 destroy() 方法,该方法只会被调用一次;主要进行一些销毁前的收尾工作,例如:关闭数据库连接、释放资源、保存数据等
@Override
public void destroy () {

}

配置

  • 注解配置
/* 只配置url */
@WebServlet("/MyServlet")

/* 配置初始化参数 */
@WebServlet(
    name="",urlPatterns= {"/MyServlet"},
    initParams={
        @WebInitParam(name="",value="")
    }
)
  • 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">
    
    <!-- 定义web应用的名称 -->
    <display-name></display-name>
    <!-- web应用上下文参数 -->
    <context-param>
        <param-name>name1</param-name>
        <param-value>value1</param-value>
    </context-param>
    
    <!-- servlet配置 -->
    <servlet>
        <servlet-name>servletName</servlet-name>
        <servlet-class>servlet.MyServlet</servlet-class>
        <!-- servlet参数 -->
        <init-param>
            <param-name>name2</param-name>
            <param-value>value2</param-value>
        </init-param>
        <!-- 设置servlet的创建时机 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- servlet映射的url -->
    <servlet-mapping>
        <servlet-name>servletName</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
</web-app>

<!--
    17行与29行相对应,查找顺序:30_29_17_18

    访问参数
    String name1 = getServletContext().getInitParameter("name1");
    String name2 = getServletConfig().getInitParameter("name2");
    String servletName = getServletConfig().getServletName();
-->

异常处理

当一个 servlet 抛出异常时,会先在使用了 exception-type 元素的 web.xml 中搜索与抛出的异常类型相匹配的配置

<servlet>
    <servlet-name>servletName</servlet-name>
    <servlet-class>servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletName</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<!-- 特定状态码 -->
<error-page>
    <error-code>404</error-code>
    <location>/MyServlet</location>
</error-page>
<!-- 抛出异常 -->
<error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/MyServlet</location>
</error-page>

<!-- 对所有的异常设置一个通用的处理 -->
<error-page>
    <exception-type>java.lang.Throwable</exception-type >
    <location>/MyServlet</location>
</error-page>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值