使用注解方式搭建SpringMVC

1.以前搭建Spring MVC 框架一般都使用配置文件的方式进行,相对比较繁琐。spring 提供了使用注解方式搭建Spring MVC 框架的方式,方便简洁。使用Spring IOC 作为根容器管理service、dao、datasource,使用spring MVC 容器作为子容器管理controller、视图解析器

spring 官方文档中有相关示例

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { App1Config.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/app1/*" };
    }
}

使用继承 AbstractAnnotationConfigDispatcherServletInitializer 的方式创建启动类,其中 getRootConfigClasses 指定父容器的配置类,相当于在web.xml 配置文件中配置监听器加载spring的配置文件,getServletConfigClasses指定spring MVC 的配置文件,相当于在web.xml配置DispatcherServlet,getServletMappings 执行拦截路径。

2.首先创建一个Maven 工程,packaging 为war类型,并在插件中指定忽略web.xml,否则会报错

<build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.1.0</version>
              <configuration>
                  <failOnMissingWebXml>false</failOnMissingWebXml>
              </configuration>
          </plugin>
      </plugins>
  </build>

3.创建spring IOC 的配置类,管理除了Controller 以外的组件

package com.spring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.stereotype.Controller;

/**
 * spring 配置文件,构建父容器,扫描service、dao 等,但是controller交给spring mvc 来管理
 * @author Administrator
 *
 */
@ComponentScan(value="com.spring",excludeFilters= {
        @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})
})
public class SpringContextConfig {

}

4.创建Spring MVC 配置类,管理Controller,注意此时需要关闭compentscan 默认的扫描规则,否则会扫描到所有的组件。这样这个容器的就形成了一种互补关系。

@ComponentScan(value = "com.spring",includeFilters= {
        @Filter(type = FilterType.ANNOTATION,classes= {Controller.class})
},useDefaultFilters=false)
public class AppConfig extends WebMvcConfigurerAdapter{

}

5.创建初始化类,指定两个容器的配置类,并指定拦截路径

package com.spring;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import com.spring.config.AppConfig;
import com.spring.config.SpringContextConfig;

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    //获取父容器的配置文件(spring IOC ,类似于spring 配置文件)
    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[] {SpringContextConfig.class};
    }

    //获取父容器的配置文件(springMVC IOC ,类似于spring MVC  配置文件,获取DispatcherServlet)
    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[] {AppConfig.class};
    }

    //获取DispatcherServlet 的映射路径
    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[]{"/"};
    }

}

6.编写测试controller ,services,启动并测试

package com.spring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.spring.service.HelloService;

@Controller
public class HelloController {

    @Autowired
    HelloService helloService;

    @ResponseBody
    @RequestMapping("/hello")
    public String sayHello() {
        String sayHello = helloService.sayHello("World");
        return sayHello;
    }

}

7.之前采用配置文件的方式,我们可以需要在spring MVC 的配置文件中使用 <mvc:annotation-driven/> 去开始MVC 配置,并且配置如视图解析器,拦截器等组件,在采用注解方式后同样可以完成在配置文件中完成的东西,官方文档中给出的示例,需要我们编写一个配置类,然后开启mvc注解,实现 WebMvcConfigurer  接口,这个接口定义了一系列方法对应 在spring MVC 配置文件中配置组件的方法。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    // Implement configuration methods...
}

8.直接在spring MVC 容器的配置类似,实现以上功能,并配视图解析器,静态资源拦截,添加拦截器等。WebMvcConfigurerAdapter 这个抽象类实现了 WebMvcConfigurer ,我们直接继承它,从而避免去挨个实现 WebMvcConfigurer 里面所有的方法

package com.spring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
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.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.spring.intercepter.MyIntercepter;

/**
 * Spring mvc 配置文件,只扫描Controller
 * @author Administrator
 *
 */
@ComponentScan(value = "com.spring",includeFilters= {
        @Filter(type = FilterType.ANNOTATION,classes= {Controller.class})
},useDefaultFilters=false)
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new  MyIntercepter()).addPathPatterns("/**");
    }
}

下面是自定义的拦截器

package com.spring.intercepter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyIntercepter implements HandlerInterceptor{

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("----------目标方法执行前-------------");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("----------目标方法执行后-------------");

    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("----------页面响应前-------------");

    }

}

测试controller 如下:

package com.spring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.spring.service.HelloService;

@Controller
public class HelloController {

    @Autowired
    HelloService helloService;

    @ResponseBody
    @RequestMapping("/hello")
    public String sayHello() {
        String sayHello = helloService.sayHello("World");
        return sayHello;
    }

    @RequestMapping("/helloworld")
    public String helloWorld() {
        return "hello";
    }
}

测试结果如下,成功跳转到jsp,并且显示了图片,拦截器也做了相应的输出

至此基本完成Spring MVC 注解版搭建,其余的功能组件可以在通过编写配置类的方式进行注册。

原文地址:https://www.cnblogs.com/li-zhi-long/p/10641755.html

时间: 2024-11-05 14:42:41

使用注解方式搭建SpringMVC的相关文章

纯手写SpringBoot框架之注解方式启动SpringMVC容器

使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会使用Java语言在SpringBoot创建内置Tomcat,使用注解方式启动SpringMVC容器. 代码实现.1.pom.xml文件,需要依赖的jar包. <dependencies> <!--Java语言操作Tomcat--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <arti

全注解方式配置SpringMVC

1.在J2EE三层的注解: 表现层:@Controller 业务层: @Service 持久层: @Repository 其他: @Component 注解起效需要几方: 1.需要一个注解 2.直接贴在什么地方 3.第三的扫描程序. 步骤: 1.开启注解扫描 <context:component-scan base-package="com._520it.springmvc.hello"/>  扫描哪个地方,这个是扫描一个包(如果扫描全部怎么配) 2.在对应的类上贴对应的注

Spring Boot2.0之注解方式启动Springmvc

回顾下springmvc原理图: DispatcherServlet是Spring MVC的核心,每当应用接受一个HTTP请求,由DispatcherServlet负责将请求分发给应用的其他组件. 在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文件一般会打包进最后的war包种:但是Spring 3引入了注解,我将要介绍,如何基于注解配置Spring MVC. 1.Spring mvc无配置文件夹,采用注解方式启动. 把配置的内容 转换为 Ja

SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建

之前搭建了@Select标签来做SringBoot+Mybatis的集成.这次使用@SelectProvider标签的方式搭建一次. 一.搭建SpringBoot的项目 https://start.spring.io/自己配置SpringBoot的项目,点击"Generate Project"按钮就可以下载下来一个配置好的SpringBoot项目. 二.项目结构 三.项目代码   原文地址:https://www.cnblogs.com/Lyh1997/p/10195183.html

注解的方式搭建springmvc步骤

1.cope   jar包到lib中 2.配置web.xml文件 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <!-- Map all requests to the DispatcherSer

用java 配置方式 搭建springmvc + spring data jpg + mysql

主要记录下java config 的方式配置项目 pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency

SpringMVC注解方式与文件上传

目录: springmvc的注解方式 文件上传(上传图片,并显示) 一.注解 在类前面加上@Controller 表示该类是一个控制器在方法handleRequest 前面加上 @RequestMapping("/index") 表示路径/index会映射到该方法上 将上一篇的博客改为注解方式: SpringMVC的基础配置及视图定位 1.修改springmvc-servlet.xml 去掉映射相关的配置,因为已经使用注解方式了增加 <context:component-scan

零配置简单搭建SpringMVC 项目

SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对SpringMVC启动时加载顺序做简单的说明. 1.SpringMVC启动流程图 2.SpringMVC项目启动流程介绍 SpringMVC 是Spring 框架的重要模块,借助于Spring 的容器技术,可以非常方面的搭建Web项目. SpringMVC项目启动时要完成Spring 容器的初始化和Sp

SpringMVC的注解方式

mvc-servlet.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.springf