Browse Source

# feat:使用WebAppInitializer配置类代替web.xml配置文件

yang yi 1 week ago
parent
commit
461c9d2e9b

+ 49 - 0
src/main/java/space/anyi/config/WebAppInitializer.java

@@ -0,0 +1,49 @@
+package space.anyi.config;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.filter.CharacterEncodingFilter;
+import org.springframework.web.servlet.DispatcherServlet;
+
+import javax.servlet.FilterRegistration;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+/**
+ * @fileName: WebAppInitializer
+ * @projectName: SSM_template
+ * @package: space.anyi.config
+ * @author: 杨逸
+ * @date:2026/4/24 14:18
+ * @description: Web容器初始化类替代web.xml
+ */
+public class WebAppInitializer implements WebApplicationInitializer {
+    @Override
+    public void onStartup(ServletContext servletContext) throws ServletException {
+        // 1. 创建Spring容器
+        AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext();
+        springContext.register(SpringConfig.class);
+
+        // 2. 配置Spring监听器
+        servletContext.addListener(new ContextLoaderListener(springContext));
+
+        // 3. 创建Spring MVC容器
+        AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
+        mvcContext.register(SpringMvcConfig.class);
+
+        // 4. 配置DispatcherServlet
+        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
+                "dispatcherServlet", new DispatcherServlet(mvcContext));
+        dispatcher.setLoadOnStartup(1);
+        dispatcher.addMapping("/");
+
+        // 5. 配置字符编码过滤器
+        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter(
+                "encodingFilter", new CharacterEncodingFilter());
+        encodingFilter.setInitParameter("encoding", "UTF-8");
+        encodingFilter.setInitParameter("forceEncoding", "true");
+        encodingFilter.addMappingForUrlPatterns(null, false, "/*");
+    }
+}

+ 0 - 49
src/main/webapp/WEB-INF/web.xml

@@ -1,49 +0,0 @@
-<?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">
-
-    <!-- 1. 配置 Spring 监听器(加载 spring-context.xml) -->
-    <context-param>
-        <param-name>contextConfigLocation</param-name>
-        <param-value>classpath:spring-context.xml</param-value>
-    </context-param>
-    <listener>
-        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-    </listener>
-
-    <!-- 2. 配置 Spring MVC 前端控制器 -->
-    <servlet>
-        <servlet-name>dispatcher</servlet-name>
-        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-        <init-param>
-            <param-name>contextConfigLocation</param-name>
-            <param-value>classpath:spring-mvc.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>
-
-    <!-- 3. 字符编码过滤器 -->
-    <filter>
-        <filter-name>encodingFilter</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>
-        <init-param>
-            <param-name>forceEncoding</param-name>
-            <param-value>true</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>encodingFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-</web-app>