每天一个注解之@EnableWebMvc

@EnableWebMvc

@EnableWebMvc 是一个Spring框架的注解,用于在基于Java的Spring应用程序中启用Spring MVC(Model-View-Controller)配置。通常将它应用于带有@Configuration注解的配置类上。

在Spring应用程序中,Spring MVC框架允许使用模型-视图-控制器的架构模式构建Web应用程序。它提供了处理HTTP请求、管理控制器、处理视图以及管理其他与Web相关组件的功能。

通过在配置类中添加@EnableWebMvc,Spring将启用以下功能:

  • RequestMappingHandlerMapping:基于@RequestMapping、@GetMapping、@PostMapping等注解,将传入的HTTP请求映射到适当的控制器方法。

  • RequestMappHandlerAdapter:帮助调用控制器方法并准备要发送回客户端的响应。

  • 异常处理:配置默认的ExceptionHandlerExceptionResolver来处理异常并返回适当的错误响应。

  • 视图解析器:配置视图解析以将视图名称解析为实际的视图实现,例如JSP或Thymeleaf模板。

  • 静态资源处理:配置支持提供静态资源,如CSS、JavaScript和图像。

  • 消息转换器:配置消息转换器,用于在HTTP请求/响应与Java对象之间进行转换(例如JSON与POJO之间的转换)。
    请看WebMvcConfigurer 类源码,重启其中的方法即可实现以上功能

使用实例

以下是在Spring配置类中使用@EnableWebMvc的示例:

@Configuration
@EnableWebMvc
public class MyWebConfig {
    // 可以在这里定义其他配置和bean
}

需要注意的是,@EnableWebMvc是较旧的配置Spring MVC的方式。如果使用SpringBoot,它提供了自动配置,通常不需要显式使用@EnableWebMvc,因为它已经包含在默认配置中。Spring Boot会根据特定的依赖项和注解的存在自动启用与Web相关的配置。

在 MyWebConfig 中可以配置许多与 Spring MVC 和 Web 应用程序相关的内容。下面是一些可以在 MyWebConfig 类中进行配置的常见选项:

  • 视图解析器(View Resolvers):配置用于将视图名称解析为实际视图实现的视图解析器。例如,可以配置使用 JSP 或 Thymeleaf 模板引擎来呈现视图。

首先,确保项目中已经有一个视图文件夹(例如:/WEB-INF/views/),并且在其中存放了要渲染的 JSP 视图文件。
在 MyWebConfig 类中添加一个方法,用于配置视图解析器。该方法需要返回一个 ViewResolver 对象,并使用 InternalResourceViewResolver 类来配置 JSP 视图解析器。
下面是实现的代码:

 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
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
public class MyWebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/"); // 设置视图文件所在目录
        viewResolver.setSuffix(".jsp"); // 设置视图文件后缀名
        return viewResolver;
    }
}

在上述代码中,创建了一个名为 viewResolver 的方法,它返回一个 InternalResourceViewResolver 对象。我们通过调用 setPrefix() 方法设置了视图文件所在的目录为 /WEB-INF/views/,并通过调用 setSuffix() 方法设置了视图文件的后缀名为 .jsp。

这样配置后,当的控制器方法返回视图名时(例如:return “hello”;),Spring MVC 将会自动将视图名解析为 /WEB-INF/views/hello.jsp,然后渲染该 JSP 视图。

  • 静态资源处理(Static Resources Handling):配置用于处理静态资源(如 CSS、JavaScript、图像等)的方式。可以定义静态资源的位置和URL映射规则。
    实现静态资源处理的示例代码:
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.config.annotation.ResourceHandlerRegistry;

@Configuration
@EnableWebMvc
public class MyWebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 定义静态资源位置和URL映射规则
        // 例如,将所有以 /static/ 开头的 URL 映射到 /resources/ 目录下的静态资源
        registry.addResourceHandler("/static/**")
                .addResourceLocations("/resources/");
    }
}

在上述代码中,我们重写了 addResourceHandlers() 方法,并在其中定义了静态资源处理器。

addResourceHandler() 方法用于定义静态资源的 URL 映射规则。在示例中,我们将所有以 /static/ 开头的 URL 映射到 /resources/ 目录下的静态资源。这意味着客户端可以通过 /static/ 后跟静态资源文件名的方式来访问这些资源。

addResourceLocations() 方法用于指定静态资源的位置。在示例中,我们将静态资源放置在 /resources/ 目录下,实际上可以将静态资源放置在任何目录。

假设有一个名为 style.css 的 CSS 文件,现在客户端可以通过 /static/style.css 的 URL 来访问这个 CSS 文件,Spring MVC 会自动将请求映射到对应的静态资源

  • 消息转换器(Message Converters):配置用于在 HTTP 请求和响应之间转换数据的消息转换器。常用的消息转换器包括处理 JSON、XML 等数据格式的转换器。
    实现消息转换器配置的示例代码:
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.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.MediaType;

import java.util.List;

@Configuration
@EnableWebMvc
public class MyWebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 添加 JSON 消息转换器
        converters.add(new MappingJackson2HttpMessageConverter());
    }
}

在上述代码中,我们重写了 configureMessageConverters() 方法,并在其中添加了一个 JSON 消息转换器 MappingJackson2HttpMessageConverter。

configureMessageConverters() 方法用于配置消息转换器。在示例中,我们添加了一个 MappingJackson2HttpMessageConverter 实例,这个转换器可以将 Java 对象转换为 JSON 格式的数据,并将 JSON 格式的数据转换为 Java 对象。

Spring MVC 会按照配置的消息转换器的顺序尝试将请求和响应的内容转换为适当的数据格式。如果客户端发送的是 JSON 数据,MappingJackson2HttpMessageConverter 会将其转换为 Java 对象,并将其传递给后端处理。如果后端响应是 Java 对象,MappingJackson2HttpMessageConverter 将把它转换为 JSON 数据并发送给客户端。
还可以根据需要添加其他类型的消息转换器,例如处理 XML 格式的数据。要添加 XML 消息转换器,可以使用MappingJackson2XmlHttpMessageConverter 或其他适合的转换器

  • 拦截器(Interceptors):配置请求拦截器,用于在请求处理前后添加逻辑。拦截器可以用于日志记录、权限检查等场景。

  • 文件上传配置(File Upload Configuration):配置用于处理文件上传的设置,例如设置文件上传的临时位置和最大文件大小。
    临时位置和最大文件大小。文件上传通常涉及到将文件从客户端上传到服务器,并且在处理上传过程中需要一个临时位置来存储文件。

以下是一个实现文件上传配置的示例代码:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class MyWebConfig implements WebMvcConfigurer {

    // 配置文件上传解析器
    // 设置上传文件的临时存储位置和最大文件大小
    // 这里设置为10MB,可以根据实际需要进行调整
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(10485760); // 设置最大文件大小为10MB (10 * 1024 * 1024 bytes)
        resolver.setDefaultEncoding("UTF-8"); // 设置文件编码
        return resolver;
    }
}

在上述代码中,我们使用 CommonsMultipartResolver 来实现文件上传配置。这个解析器基于 Apache Commons FileUpload 库,是一个常用的文件上传解析器。
setMaxUploadSize() 方法用于设置最大文件大小,这里设置为 10MB(10 * 1024 * 1024 字节)。可以根据需要调整此值。
setDefaultEncoding() 方法设置文件编码,这里设置为 UTF-8。
此外,还需要在 web.xml 文件中进行一些配置,以使 Spring MVC 能够找到并使用这个配置类。在 web.xml 中添加以下配置:

<servlet>
    <servlet-name>your-servlet-nameservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
        <param-name>contextClassparam-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        param-value>
    init-param>
    <init-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>your.package.name.MyWebConfigparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
servlet>

替换 中的 your.package.name.MyWebConfig 为实际的配置类的完整包路径。
这样就完成了文件上传的配置。现在,当控制器处理文件上传时,可以使用 Spring MVC 的文件上传功能,并在指定的临时位置找到上传的文件

  • 跨域资源共享(CORS):配置跨域资源共享,允许从其他域中访问的应用程序。

  • 国际化和本地化(Internationalization and Localization):配置应用程序的国际化和本地化支持,以便根据用户的地区和语言提供不同的内容。

  • 安全配置(Security Configuration):配置应用程序的安全性,例如基于角色的访问控制。

  • 异常处理(Exception Handling):定义全局的异常处理器,用于处理应用程序中未处理的异常,并返回适当的错误响应。
    其他定制化配置:根据的应用程序需求,还可以配置其他定制化的设置,例如添加自定义的 Spring Bean、数据库连接配置等。

这里只是一些常见的配置选项,实际上,在 MyWebConfig 类中可以进行更多的配置,具体取决于的项目需求和应用程序的复杂性。

你可能感兴趣的:(每天一个注解,java,spring,boot)