使用注解配置SpringMVC(去掉web.xml和mvc配置文件)

使用配置类和注解代替web.xml和SpringMVC配置文件的功能

1、创建gradle工程spring-annotation, build.gradle配置文件如下:

plugins {
    id 'java'
    id 'war'
}

group 'org.example'
version '1.0-SNAPSHOT'

// 指定JDK版本
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    //优先从本地仓库获取
    mavenLocal()
    // 从阿里云或者公司仓库获取
    maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    // 从中央仓库获取
    mavenCentral()
}

//配置全局依赖版本信息
ext {
    springVersion = "5.3.1"
    mysqlConnectorVersion = "8.0.13"
    mybatisStarterVersion = "1.3.2"
    servletVersion = "3.1.0"
    fastjsonVersion = "1.2.54"
    slf4jVersion = "1.7.16"
    commonsVersion = "3.0"
    logbackVersion = "1.2.3"
    thymeleafVersion = "3.0.12.RELEASE"
    junitVersion = "4.12"
}

dependencies {
    /*springMVC*/
    compile("org.springframework:spring-webmvc:$springVersion")
    /* 日志 */
    compile("ch.qos.logback:logback-classic:$logbackVersion")
    /* servletApi */
    compileOnly("javax.servlet:javax.servlet-api:$servletVersion")
    /* */
    compile("org.thymeleaf:thymeleaf-spring5:$thymeleafVersion")

}

test {
    useJUnitPlatform()
}

2、在src/main下创建webapp/WEB-INF目录

 

3、创建初始化类,代替web.xml

在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

package org.glx.mvc.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

/**
 * web工程的初始化,用来代替web.xml
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 指定spring的配置类
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    /**
     * 指定springMVC的配置类
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }
    /**
     * 指定DispatcherServlet的映射规则,即url-pattern
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 注册过滤器
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();;
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceResponseEncoding(true);
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    }
}

4、创建SpringConfig配置类,代替spring的配置文件

package org.glx.mvc.config;

import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {
    //ssm整合之后,spring的配置信息写在此类中
}

5、创建WebConfig配置类,代替SpringMVC的配置文件

package org.glx.mvc.config;

import org.glx.mvc.interceptor.TestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import java.util.List;
import java.util.Properties;

/**
 * 代替springMVC配置文件:
 * 1、扫描组件  2、视图解析器  3、view-controller  4、default-servlet-handler   5、mvc注解驱动
 * 6、文件上传解析器   7、异常处理    8、拦截器
 */
@Configuration
//1、扫描组件
@ComponentScan("org.glx.mvc.controller")
//5、mvc注解驱动
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    //使用默认的servlet处理静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    //配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        TestInterceptor testInterceptor = new TestInterceptor();
        registry.addInterceptor(testInterceptor).addPathPatterns("/**");
    }

    //配置视图控制 view-controller
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    //配置文件上传解析器
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }

    //配置异常映射
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
        Properties prop = new Properties();
        prop.setProperty("java.lang.ArithmeticException", "error");
        //设置异常映射
        exceptionResolver.setExceptionMappings(prop);
        //设置共享异常信息的键
        exceptionResolver.setExceptionAttribute("ex");
        resolvers.add(exceptionResolver);
    }

    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        // ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(
                webApplicationContext.getServletContext());
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }

    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

    //生成视图解析器并未解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }

}

6、测试功能

@RequestMapping("/")
public String index(){
    return "index";
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<h3>回答1:</h3><br/>SpringMVCweb.xml配置主要包括以下内容: 1. 配置DispatcherServletweb.xml配置DispatcherServlet,指定它的servlet-name和servlet-class,以及它所处理的请求的url-pattern。 2. 配置ContextLoaderListener 在web.xml配置ContextLoaderListener,指定它的listener-class,以及它所加载的Spring配置文件的位置。 3. 配置字符编码过滤器 在web.xml配置字符编码过滤器,指定它的filter-name、filter-class和encoding。 4. 配置静态资源访问 在web.xml配置静态资源访问,指定它的servlet-name、url-pattern和文件路径。 5. 配置异常处理器 在web.xml配置异常处理器,指定它的error-page和exception-type,以及处理异常的servlet或jsp页面。 6. 配置文件上传 在web.xml配置文件上传,指定它的servlet-name、url-pattern和文件上传的最大大小。 以上是SpringMVCweb.xml配置的主要内容。 <h3>回答2:</h3><br/>Spring MVC是一个基于Java的web框架,它提供了一种轻量级的WEB开发方式。在使用Spring MVC时,我们需要对其进行web.xml配置,以实现相应的功能。 在web.xml中,我们需要将Spring MVCDispatcherServlet配置Servlet组件,并添加相应的Servlet映射规则。同时,我们还需要配置Spring MVC的上下文环境,并在其中配置Spring MVC的bean以及其他的第三方组件和服务。 下面我们来详细说明Spring MVCweb.xml配置。 1. 配置DispatcherServlet DispatcherServlet是Spring MVC的核心控制器,用于接收和分发客户端请求。为了配置DispatcherServlet,我们需要在web.xml文件中添加以下条目: ``` <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 其中,Servlet名称(servlet-name)用于标识DispatcherServlet组件,而Servlet类(servlet-class)则指定了DispatcherServlet的Java类。 2. 配置上下文环境 我们需要在web.xml配置Spring MVC的上下文环境。因为Spring框架使用了IoC(Inverse of Control,控制反转)和依赖注入的机制,在这里我们需要指定Spring MVC用来扫描和装载的应用程序上下文。为了配置上下文环境,我们需要添加以下条目: ``` <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ``` 在这里,我们指定了一个Spring配置文件的位置,使得DispatcherServlet能够找到它。同时,我们还需要添加一个监听器,使得Spring MVC能够在应用程序启动时初始化上下文环境。 3. 配置字符编码过滤器 在Spring MVC中,我们常常需要处理中文字符,因此在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> ``` 在这里,我们使用CharacterEncodingFilter作为过滤器,将编码设置为UTF-8,并强制进行编码转换。 4. 配置视图解析器 Spring MVC的视图解析器用于将处理器(例如控制器)返回的逻辑视图名称转换为Servlet的URL路径。对于视图解析器的设置,我们需要添加以下条目: ``` <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 这里我们定义了一个名为viewResolver的bean,它作为视图解析器用来解析视图的逻辑名称。prefix属性指定了视图文件所在的文件夹,而suffix属性指定了视图文件的扩展名。 5. 配置文件上传 在web应用中,文件上传是一个常见的需求。Spring MVC提供了丰富的API来实现文件上传。为了配置文件上传,我们需要添加以下条目: ``` <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10240000"/> </bean> ``` 在这里,我们使用了CommonsMultipartResolver来实现文件上传,并设置了最大文件上传的大小为10MB。 以上是Spring MVC的常见web.xml配置。当然,根据应用程序的需求,还可以添加其他的组件,例如拦截器、数据源等。总之,web.xml配置能够为应用程序提供丰富的功能支持,让开发者能够更加高效、便捷地进行开发。 <h3>回答3:</h3><br/>Spring MVC是一种流行的Java Web框架,它使用基于注解的控制器和依赖注入的方式实现Web应用程序的开发。Spring MVCWeb.xml配置文件是其中一个非常重要的配置文件。 在Spring MVC框架中,Web.xml文件具有指定DispatcherServlet和其他Servlet之间的关系的能力。我们可以通过Web.xml文件来指定Spring MVC中的各种组件的配置和部署环境。 通常,Web.xml文件中包含两个Servlet: - DispatcherServlet,用于将请求路由到正确的处理程序并返回响应。DispatcherServlet是整个Spring MVC应用程序的核心部分。 - ContextLoaderListener,用于加载整个应用程序的根Web应用程序上下文。 在Web.xml文件中,我们需要配置这些元素: - Context Param:在应用程序的所有Servlet中,定义有关应用程序环境的参数的全局配置。例如,我们可以使用上下文参数指定应用程序中使用的数据库连接的URL和密码等。 - Servlet:程序中的每个Servlet必须在Web.xml文件中定义。Servlet在Web应用程序中扮演处理HTTP请求的角色。DispatcherServlet是一个Servlet,它接受请求并处理Web应用程序中的所有Servlet。 - Servlet Mapping:Servlet和URL之间的关系必须在Web.xml文件中定义。Servlet映射决定哪个Servlet处理来自特定URL的请求。 - Filter:过滤器是Web应用程序中的组件,它可以用于修改从客户端到服务器的请求或从服务器到客户端的响应。Filter也在Web.xml文件中定义,以便和其他组件建立正确的关系。 总而言之,Web.xml文件是配置Spring MVC的一个必要的指南。在配置Web.xml文件时,需要详细了解各个元素的作用和相互之间的关系。对于开发人员而言,熟悉Web.xml配置是非常重要的一步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值