文章目录
-
- [1. XML 配置方式示例](#1. XML 配置方式示例)
-
- [1.1 项目结构](#1.1 项目结构)
- [1.2 配置文件](#1.2 配置文件)
- [1.3 控制器实现](#1.3 控制器实现)
- [2. JavaConfig 配置方式示例](#2. JavaConfig 配置方式示例)
-
- [2.1 项目结构](#2.1 项目结构)
- [2.2 配置文件](#2.2 配置文件)
- [2.3 控制器实现](#2.3 控制器实现)
- [3. Spring Boot 配置方式示例](#3. Spring Boot 配置方式示例)
-
- [3.1 项目结构](#3.1 项目结构)
- [3.2 配置文件](#3.2 配置文件)
- [3.3 控制器实现](#3.3 控制器实现)
- [4. 静态资源配置最佳实践](#4. 静态资源配置最佳实践)
-
- [4.1 配置静态资源映射](#4.1 配置静态资源映射)
- [5. 性能调优技巧](#5. 性能调优技巧)
-
- [5.1 启用缓存](#5.1 启用缓存)
- [6. 测试对比](#6. 测试对比)
-
- [6.1 访问路径对比](#6.1 访问路径对比)
- [6.2 性能对比](#6.2 性能对比)
- [7. 项目运行准备](#7. 项目运行准备)
-
- [7.1 依赖配置(pom.xml)](#7.1 依赖配置(pom.xml))
- [7.2 部署说明](#7.2 部署说明)

1. XML 配置方式示例
1.1 项目结构
src/main/java
└── crj
└── example
└── xml
└── controller
└── XmlDemoController.java
src/main/webapp
└── WEB-INF
├── views
│ └── xmlDemo.jsp
└── xml-servlet.xml

1.2 配置文件
web.xml
xml
<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">
<!-- 配置 DispatcherServlet -->
<servlet>
<servlet-name>xmlDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xml-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xmlDispatcher</servlet-name>
<url-pattern>/xml/*</url-pattern>
</servlet-mapping>
</web-app>

xml-servlet.xml
xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描控制器 -->
<context:component-scan base-package="crj.example.xml.controller"/>
<!-- 启用 MVC 注解驱动 -->
<mvc:annotation-driven/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
1.3 控制器实现
XmlDemoController.java
java
package crj.example.xml.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/xml")
public class XmlDemoController {
@RequestMapping("/demo")
@ResponseBody
public String handleRequest() {
return "Response from XML configuration";
}
}
2. JavaConfig 配置方式示例
2.1 项目结构
src/main/java
└── crj
└── example
└── javaconfig
├── config
│ ├── JavaConfigWebInitializer.java
│ └── JavaConfigAppConfig.java
└── controller
└── JavaConfigDemoController.java
2.2 配置文件
JavaConfigWebInitializer.java
java
package crj.example.javaconfig.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class JavaConfigWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{JavaConfigAppConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/javaconfig/*"};
}
}

JavaConfigAppConfig.java
java
package crj.example.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "crj.example.javaconfig.controller")
public class JavaConfigAppConfig implements WebMvcConfigurer {
public void configureViewResolvers() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
}
}
2.3 控制器实现
JavaConfigDemoController.java
java
package crj.example.javaconfig.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/javaconfig")
public class JavaConfigDemoController {
@RequestMapping("/demo")
@ResponseBody
public String handleRequest() {
return "Response from JavaConfig configuration";
}
}
3. Spring Boot 配置方式示例
3.1 项目结构
src/main/java
└── crj
└── example
└── springboot
├── SpringBootDemoApplication.java
└── controller
└── SpringBootDemoController.java
3.2 配置文件
SpringBootDemoApplication.java
java
package crj.example.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}

3.3 控制器实现
SpringBootDemoController.java
java
package crj.example.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Controller;
@Controller
@RequestMapping("/springboot")
public class SpringBootDemoController {
@RequestMapping("/demo")
@ResponseBody
public String handleRequest() {
return "Response from Spring Boot configuration";
}
}

4. 静态资源配置最佳实践
4.1 配置静态资源映射
在 JavaConfigAppConfig.java 中添加:
java
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}

5. 性能调优技巧
5.1 启用缓存
在 JavaConfigAppConfig.java 中添加:
java
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("springMvcCache");
}
6. 测试对比

6.1 访问路径对比
| 配置方式 | URL | 响应内容 |
|---|---|---|
| XML 配置 | http://localhost:8080/xml/demo | Response from XML configuration |
| JavaConfig 配置 | http://localhost:8080/javaconfig/demo | Response from JavaConfig configuration |
| Spring Boot 配置 | http://localhost:8080/springboot/demo | Response from Spring Boot configuration |
6.2 性能对比
| 配置方式 | 启动时间 | 配置复杂度 | 推荐场景 |
|---|---|---|---|
| XML 配置 | 较慢 | 高 | 传统项目维护 |
| JavaConfig 配置 | 中等 | 中 | 新项目开发 |
| Spring Boot 配置 | 快 | 低 | 快速开发与微服务架构 |
7. 项目运行准备
7.1 依赖配置(pom.xml)
xml
<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- Spring Boot 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.8</version>
</dependency>
</dependencies>

7.2 部署说明
- 使用 Tomcat 9+ 或 Spring Boot 内置 Tomcat 部署
- 访问路径示例:
- XML 配置:http://localhost:8080/xml/demo
- JavaConfig 配置:http://localhost:8080/javaconfig/demo
- Spring Boot 配置:http://localhost:8080/springboot/demo
下一篇预告 :
《控制器层精进:映射、绑定与类型转换》
将涵盖:
@RequestMapping的高级使用场景- 复杂参数绑定与类型转换
- 异步控制器与流式 API 处理