基于Java注解配置SpringMVC

现在的web应用基本上都是基于XML文件的配置方式,但无论Struts2还是Spring都朝着使用约定优于配置的零配置系统努力。借助于Servlet3规范和Spring3.1的功能增强,我们可以使用java注解来声明应用程序的组件。
开发工具使用eclipse,工程目录如下图

基于Java注解配置SpringMVC_第1张图片
Paste_Image.png

SpringMVC请求处理流程。


基于Java注解配置SpringMVC_第2张图片
Paste_Image.png

与大多数基于Java的Web框架一样,SpringMVC所有请求都会通过一个前端控制器(front controller)Servlet.而DispatcherServle就是Spring的前段控制器,所以首先使用java将DispatcherServlet配置在Servlet容器中

    package spittr.config;

    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 * @ClassName: SpittrWebAppInitializer
 * @Description: TODO
 * @author zhuzhaolin
 * @date 2017年3月19日 下午12:12:14
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 为DispatcherServlet指定servlet 映射.映射的是"/",这表示他会是应用的Servlet。他会从处理进入应用的所有请求。
     * (其实就相当于的子元素用于指定应用于Servlet的URL路径)
     */
    @Override
    protected String[] getServletMappings() {

        return new String[] { "/" };
    }

    /**
     * RootConfig配置类加载的是驱动应用后端的中间层和数据层组件,是父上下文
     */
    @Override
    protected Class[] getRootConfigClasses() {
        return new Class[] { RootConfig.class };
    }

    /**
     * WebConfig配置类中主要是内容是启用组件扫描,配置视图解析器,配置静态资源的处理。 其实就是使用配置在WebConfig配置类中的bean
     */
    @Override
    protected Class[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
    }
}

实际上, AbstractAnnotationConfigDispatcherServletInitializer会同时创 建DispatcherServlet和ContextLoaderListener。GetServletConfigClasses()方法返回的带有@Configuration注解的类将会用来定 义DispatcherServlet应用上下文中的bean。 getRootConfigClasses()方法返回的带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下 文中的bean。

RootCnfig中的代码

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;

@Configuration
@ComponentScan(basePackages={"spittr"} ,
excludeFilters={@Filter(type=FilterType.ANNOTATION ,value=EnableWebMvc.class)})
public class RootConfig {

}

WebConfig中的代码

package spittr.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
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.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc // 启用SpringMVC
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {

    /**
     * 
     * @Title: viewResolver
     * @Description: TODO
     * @return ViewResolver
     * @date   2017年3月19日 下午3:00:49
     * 
     * 配置JSP视图解析器
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        /* resolver.setPrefix("/zhuzhaolin/"); */
        // 配置解析文件的后缀
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // 要求DispatcherServlet将静态资源的请求转发到Servlet容器中的默认Servlet上,而不是使用DispatcherServlet本身来处理此类请求
        configurer.enable();
    }
}

基本配置配置完毕,差一个控制器。假设控制器类要处理对“/”的请求, 并渲染应用的首页.HomeController的代码

package spittr.web;

import static org.springframework.web.bind.annotation.RequestMethod.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value="/"  )
public class HomeController {
    
   @RequestMapping( method=GET)
   public String home(){
       return "home";
   }
}

这里返回一字符串"home"对应WebContent目录下得home.jsp.。至此一个最简单的基于Java配置的SpringMVC写完了。

参考书籍

  • Spring in action
  • Struts2 int action
  • Servlet/jsp 深入详解

你可能感兴趣的:(基于Java注解配置SpringMVC)