zoukankan      html  css  js  c++  java
  • Java笔记Spring(六)

    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_3_1.xsd"
             version="3.1">
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!--<servlet>-->
        <!--<servlet-name>dispatcher</servlet-name>-->
        <!--<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>-->
        <!--<init-param>-->
          <!--<param-name>contextConfigLocation</param-name>-->
          <!--<param-value>/WEB-INF/dispatcher-servlet2.xml</param-value>-->
        <!--</init-param>-->
        <!--<load-on-startup>1</load-on-startup>-->
      <!--</servlet>-->
      <!--<servlet-mapping>-->
        <!--<servlet-name>dispatcher</servlet-name>-->
        <!--<url-pattern>/</url-pattern>-->
      <!--</servlet-mapping>-->
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>utf-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>

    加载顺序:context-param -> listener -> filter -> servlet

    Servlet不配置的话,并不会在Web启动的时候加载,而且即使配置了Servlet,没有load-on-startup节点或者配置的load-on-startup节点不是正整数,同样不会在启动的时候生效,而是在第一次访问(无论是否匹配相应的pattern)生效

    自定义一个PersonServlet

    package com.example.demo.controller;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class PersonServlet extends HttpServlet {
    
        private Log logger = LogFactory.getLog(PersonServlet.class);
    
        @Override
        public void init() throws ServletException {
            logger.info("personServlet被初始化了");
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //        super.doGet(req, resp);
    
            System.out.println("personServlet被访问了");
        }
    }
    <?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_3_1.xsd"
             version="3.1">
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!--<servlet>-->
        <!--<servlet-name>dispatcher</servlet-name>-->
        <!--<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>-->
        <!--<init-param>-->
          <!--<param-name>contextConfigLocation</param-name>-->
          <!--<param-value>/WEB-INF/dispatcher-servlet2.xml</param-value>-->
        <!--</init-param>-->
        <!--<load-on-startup>1</load-on-startup>-->
      <!--</servlet>-->
      <!--<servlet-mapping>-->
        <!--<servlet-name>dispatcher</servlet-name>-->
        <!--<url-pattern>/</url-pattern>-->
      <!--</servlet-mapping>-->
    
      <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>com.example.demo.controller.PersonServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>utf-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>

    与实际所想一致,PersonServlet在Web启动的时候进行了初始化。

  • 相关阅读:
    在一个字符串中找到第一个只出现一次的字符
    声明数组变量/// 计算所有元素的总和/打印所有元素总和/输出/foreach循环/数组作为函数的参数/调用printArray方法打印
    intellij idea 如何更改编辑器文本字体和大小
    称砝码算法//输入与算法分开
    invalid types 'int[int]' for array subscript// EOF 输入多组数据//如何键盘输入EOF
    scanf和gets的差别
    输入3行字符串/定义flag/while/字符串后要加空格符
    ‘'的单引号/输入字符串/输出单个字符
    窗口迅速关闭的解决办法/scanf/if/for/break
    【笔记】【VSCode】Windows下VSCode编译调试c/c++
  • 原文地址:https://www.cnblogs.com/tq1226112215/p/9078109.html
Copyright © 2011-2022 走看看