乐趣区

关于后端:Servlet系列两种创建方式xml注解

[TOC]

一、应用 web.xml 的形式配置(Servlet2.5 之前应用)

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"id="WebApp_ID"version="4.0">
  <display-name>java-servlet-demo02</display-name>
  <!-- servlet 配置 -->
  <servlet>
    <!-- 名称 -->
    <servlet-name>WebXmlServlet</servlet-name>
    <!-- servlet 全称类名 -->
    <servlet-class>com.mcode.servlet.controller.WebXmlServlet</servlet-class>
    <!-- 启动的优先级,数字越小越先起作用 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 映射配置 -->
  <servlet-mapping>
    <!-- 对应名称 -->
    <servlet-name>WebXmlServlet</servlet-name>
    <!-- 资源匹配规定:准确匹配 -->
    <url-pattern>/webxml</url-pattern>
  </servlet-mapping>
</web-app>

WebXmlServlet

package com.mcode.servlet.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * ClassName: WebXmlServlet
 * Package: com.mcode.servlet.controller
 * Description:
 *
 * @Author robin
 * @Create 2023/8/30 20:49
 * @Version 1.0
 */
public class WebXmlServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码方式
        resp.setCharacterEncoding("UTF-8");
        // 指定客户端解码形式
        resp.setHeader("content-type", "text/html;charset=UTF-8");
        // 输入
        resp.getWriter().write("基于 webxml 形式配置的 servlet");
    }
}

效果图

url-pattern 匹配规定

匹配规定 取值阐明
准确匹配 / 具体的名称 只有 url 门路是具体的名称的时候才会触发 Servlet
后缀匹配 *.xxx 只有是以 xxx 结尾的就匹配触发 Servlet
通配符匹配 /* 匹配所有申请,蕴含服务器的所有资源
通配符匹配 / 匹配所有申请,蕴含服务器的所有资源,不包含.jsp

load-on-startup 阐明

  1. 元素标记容器是否应该在 web 应用程序启动的时候就加载这个 servlet
  2. 它的值必须是一个整数, 示意 servlet 被加载的先后顺序
  3. 如果该元素的值为正数或者没有设置, 则容器会当 serv1et 被申请时再加载
  4. 如果值为正整数或者 0 时, 示意容器在利用启动时就加载并初始化这个 servlet, 值越小, servlet 的优先级越高, 就越先被加载。值雷同时, 容器就会本人抉择程序来加载

二、应用注解的形式配置(Servlet3.0 后反对,举荐)

AnnotationServlet

package com.mcode.servlet.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * ClassName: AnnotationServlet
 * Package: com.mcode.servlet.controller
 * Description:
 *
 * @Author robin
 * @Create 2023/8/30 20:51
 * @Version 1.0
 */
@WebServlet("/annotation")
public class AnnotationServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码方式
        resp.setCharacterEncoding("UTF-8");
        // 指定客户端解码形式
        resp.setHeader("content-type", "text/html;charset=UTF-8");
        // 输入
        resp.getWriter().write("基于注解形式配置的 servlet");
    }
}

效果图

@WebServlet 注解

属性:上面是一些罕用属性,value 和 url 个别是必须的,然而二者不能共存,若同时指定,个别主动疏忽 value。

属性名 类名 属性形容
name String 指定 servlet 的 name 属性,等价于<servlet-name>, 若没有指定,则默认是类的全限定名
value String[] 等价于 urlPatterns,两者不能共存
urlPatterns String[] 指定一组 servlet 的 url 的匹配模式,等价于<url-pattern>
loadOnStartup int 指定 servlet 的加载程序,等价于<load-on-startup>
initParams WebinitParams[] 指定一组初始化参数,等价于<init-params>
asyncSupported boolean 申明 servlet 是否反对异步操作模式,等价于<async-supported>
displayName String servlet 的显示名,等价于<display-name>
description String servlet 的形容信息,等价于<description>

@WebServlet 属于类级别的注解,标注在继承了 HttpServlet 的类之上。罕用的写法是将 Servlet 的绝对申请门路(即 value)间接写在注解内,
@WebServlet(urlPatterns =“/MyServlet”)。
@WebServlet(“/MyServlet”) 省略了 urlPatterns 属性名
如果 @WebServlet 中须要设置多个属性,则属性之间必须应用逗号隔开.
通过实现 Serlvet 接口或继承 GenericServlet 创立的 Servlet 类无奈应用 @WebServlet 注解。
应用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相干属性。若同时应用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中 的值与注解中 name 取值不能雷同,否则容器会疏忽注解中的配置。

本文由 mdnice 多平台公布

退出移动版