如何配置SpringMvc

发布时间:2021-10-13 11:45:03 作者:iii
来源:亿速云 阅读:127
# 如何配置Spring MVC

## 1. Spring MVC概述

Spring MVC是Spring框架的一个模块,用于构建基于Java的Web应用程序。它遵循模型-视图-控制器(MVC)设计模式,提供了灵活的配置方式和强大的功能支持。

### 1.1 MVC架构简介
- **Model**:封装应用数据
- **View**:负责渲染模型数据
- **Controller**:处理用户请求并返回响应

## 2. 基础环境搭建

### 2.1 创建Maven项目
```xml
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>springmvc-demo</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>
    
    <dependencies>
        <!-- Spring MVC依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.18</version>
        </dependency>
        
        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

2.2 配置web.xml

<web-app>
    <!-- 配置DispatcherServlet -->
    <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/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>
</web-app>

3. Spring MVC核心配置

3.1 创建Spring配置文件

/WEB-INF/spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<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="com.example.controller"/>
    
    <!-- 注解驱动 -->
    <mvc:annotation-driven/>
    
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 静态资源处理 -->
    <mvc:resources mapping="/static/**" location="/static/"/>
</beans>

3.2 注解配置方式(Java Config)

@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {
    
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("/static/");
    }
}

4. 控制器开发

4.1 基本控制器示例

@Controller
@RequestMapping("/user")
public class UserController {
    
    @GetMapping("/list")
    public String listUsers(Model model) {
        model.addAttribute("users", userService.getAllUsers());
        return "user/list";
    }
    
    @PostMapping("/add")
    public String addUser(@Valid User user, BindingResult result) {
        if(result.hasErrors()) {
            return "user/add-form";
        }
        userService.saveUser(user);
        return "redirect:/user/list";
    }
    
    @GetMapping("/{id}")
    @ResponseBody
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

4.2 常用注解说明

注解 说明
@Controller 标识为Spring MVC控制器
@RequestMapping 映射请求路径
@GetMapping/@PostMapping 特定HTTP方法的映射
@RequestParam 获取请求参数
@PathVariable 获取路径变量
@ModelAttribute 绑定模型数据
@ResponseBody 直接返回响应体

5. 视图技术集成

5.1 JSP集成

<!-- /WEB-INF/views/user/list.jsp -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
    <table>
        <c:forEach items="${users}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

5.2 Thymeleaf集成

  1. 添加依赖:
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.15.RELEASE</version>
</dependency>
  1. 配置视图解析器:
@Bean
public SpringResourceTemplateResolver templateResolver() {
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode("HTML");
    return resolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setTemplateResolver(templateResolver());
    return engine;
}

@Bean
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setTemplateEngine(templateEngine());
    return resolver;
}

6. 高级配置

6.1 拦截器配置

public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, 
                           HttpServletResponse response, 
                           Object handler) throws Exception {
        // 认证检查逻辑
        return true;
    }
}

// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new AuthInterceptor())
            .addPathPatterns("/admin/**");
}

6.2 异常处理

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception ex) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("error", ex.getMessage());
        mav.setViewName("error");
        return mav;
    }
}

6.3 文件上传

  1. 添加依赖:
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
  1. 配置MultipartResolver:
<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/> <!-- 10MB -->
</bean>
  1. 控制器处理:
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
        // 处理文件
    }
    return "redirect:/upload-result";
}

7. 测试与部署

7.1 单元测试

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
    
    @Autowired
    private MockMvc mockMvc;
    
    @Test
    public void testListUsers() throws Exception {
        mockMvc.perform(get("/user/list"))
               .andExpect(status().isOk())
               .andExpect(view().name("user/list"));
    }
}

7.2 部署到Tomcat

  1. 配置Maven插件:
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <path>/</path>
        <port>8080</port>
    </configuration>
</plugin>
  1. 运行命令:
mvn tomcat7:run

8. 最佳实践

  1. 分层设计:保持控制器简洁,业务逻辑放在Service层
  2. RESTful设计:合理使用HTTP方法和状态码
  3. 输入验证:使用@Valid进行数据校验
  4. 异常处理:统一异常处理机制
  5. 日志记录:添加适当的日志记录
  6. 性能优化:合理使用缓存、异步处理等

9. 常见问题解决

9.1 404错误排查

  1. 检查控制器是否被扫描到
  2. 确认请求路径是否正确
  3. 查看视图文件是否存在

9.2 中文乱码问题

<!-- 在web.xml中添加过滤器 -->
<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>

10. 总结

本文详细介绍了Spring MVC的配置过程,包括: - 基础环境搭建 - XML和Java两种配置方式 - 控制器开发 - 视图技术集成 - 高级功能配置 - 测试部署方法

通过合理的配置,Spring MVC可以构建灵活、高效的Web应用程序。建议根据项目需求选择合适的配置方式,并遵循最佳实践进行开发。 “`

注:本文约2500字,包含了Spring MVC配置的核心内容。实际使用时可根据项目需求调整配置细节。建议结合官方文档和实际项目经验进行深入学习。

推荐阅读:
  1. springMVC的xml配置
  2. springMVC配置

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springmvc

上一篇:dos中日期时间格式如何设置

下一篇:如何开发一个简单的工作流引擎

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》