一、项目初始化与基础配置
1.1 创建Maven聚合项目
在IDE中新建Empty Project作为根项目,通过pom.xml配置全局版本管理:
<properties><java.version>1.8</java.version><spring.version>5.3.20</spring.version></properties>
创建子模块时需注意:
- 模块类型选择
maven-archetype-webapp(传统项目)或maven-archetype-quickstart(需手动添加Web支持) - 打包方式强制指定为
war(<packaging>war</packaging>) - 推荐使用JDK 1.8+版本以获得完整注解支持
1.2 Web环境配置
在src/main目录下创建标准Web目录结构:
webapp/├── WEB-INF/│ ├── web.xml # 核心配置文件│ └── lib/ # 依赖库(Maven自动管理)└── static/ # 静态资源
关键配置点:
- 确保
web.xml位于WEB-INF目录下 - 动态Web模块版本建议选择4.0(对应Servlet 4.0规范)
- 静态资源访问路径默认映射到
/static/
二、核心组件配置详解
2.1 DispatcherServlet配置
作为框架入口,需在web.xml中完成双重配置:
<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>
路径匹配规则解析:
/:拦截所有非JSP请求(包括静态资源)*.do:传统路径后缀模式/app/*:路径映射模式- 最佳实践:生产环境建议使用
/模式配合资源过滤
2.2 Spring MVC配置文件
在resources目录下创建spring-mvc.xml,完成三大核心配置:
<!-- 1. 启用注解驱动 --><mvc:annotation-driven/><!-- 2. 静态资源处理 --><mvc:resources mapping="/static/**" location="/static/"/><!-- 3. 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean>
进阶配置:
- 添加
<mvc:default-servlet-handler/>处理未匹配请求 - 配置拦截器:
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.example.MyInterceptor"/></mvc:interceptor></mvc:interceptors>
三、控制器开发实践
3.1 基础控制器实现
@Controller@RequestMapping("/user")public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id, Model model) {model.addAttribute("user", userService.findById(id));return "user/detail"; // 对应/WEB-INF/views/user/detail.jsp}@PostMappingpublic String createUser(@Valid UserDTO userDTO, BindingResult result) {if(result.hasErrors()) {return "user/form";}userService.save(userDTO);return "redirect:/user/" + userDTO.getId();}}
关键注解说明:
@Controller:标识组件为控制器@RequestMapping:路径映射(支持类级和方法级)@GetMapping/@PostMapping:HTTP方法限定@PathVariable:路径参数绑定@Valid:启用参数校验
3.2 高级特性实现
3.2.1 异常处理机制
@ControllerAdvicepublic class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {return ResponseEntity.status(404).body(new ErrorResponse("NOT_FOUND", ex.getMessage()));}}
3.2.2 文件上传处理
@PostMapping("/upload")public String handleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {if(file.isEmpty()) {redirectAttributes.addFlashAttribute("message", "请选择文件");return "redirect:/upload";}try {byte[] bytes = file.getBytes();// 文件处理逻辑...redirectAttributes.addFlashAttribute("message","上传成功: " + file.getOriginalFilename());} catch (IOException e) {e.printStackTrace();}return "redirect:/upload";}
四、性能优化与最佳实践
4.1 配置优化建议
-
线程池配置:
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><property name="corePoolSize" value="5"/><property name="maxPoolSize" value="10"/><property name="queueCapacity" value="25"/></bean>
-
缓存控制:
@Configurationpublic class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/").setCachePeriod(3600); // 缓存1小时}}
4.2 安全防护措施
-
CSRF防护:
<mvc:interceptors><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><bean class="org.springframework.web.servlet.mvc.WebContentInterceptor"><property name="cacheSeconds" value="0"/><property name="useExpiresHeader" value="true"/><property name="useCacheControlHeader" value="true"/><property name="useCacheControlNoStore" value="true"/></bean></mvc:interceptors>
-
XSS防护:
@Configurationpublic class XssConfig {@Beanpublic FilterRegistrationBean<XssFilter> xssFilterRegistration() {FilterRegistrationBean<XssFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new XssFilter());registration.addUrlPatterns("/*");registration.setOrder(1);return registration;}}
五、调试与问题排查
5.1 常见问题解决方案
-
404错误排查流程:
- 检查
DispatcherServlet的url-pattern配置 - 验证控制器方法是否被正确扫描(
@ComponentScan范围) - 确认请求路径与
@RequestMapping匹配规则
- 检查
-
静态资源访问问题:
- 确保配置了
<mvc:resources>或<mvc:default-servlet-handler/> - 检查浏览器开发者工具中的网络请求路径
- 确保配置了
5.2 调试技巧
-
日志配置:
# application.propertieslogging.level.org.springframework.web=DEBUGlogging.level.org.springframework.web.servlet.DispatcherServlet=TRACE
-
内置工具类:
```java
// 获取当前请求信息
HttpServletRequest request = ((ServletRequestAttributes)
RequestContextHolder.getRequestAttributes()).getRequest();
// 获取会话信息
HttpSession session = request.getSession();
```
通过本文的系统化讲解,开发者可以完整掌握SpringMVC框架从环境搭建到高级特性开发的完整流程。建议结合实际项目需求,逐步实践文中提到的各项技术点,特别注意配置细节与安全防护措施的实施。对于企业级应用开发,建议进一步研究Spring Security集成、分布式会话管理等高级主题。