SpringMVC起步-构建Web应用程序

1.SpringMVC流程图

先来看看流程图,从浏览器发送请求到响应完成经过的流程

SpringMVC--小小牛博客

2.配置DispatcherServlet

DispatcherServlet是Spring MVC的核心所有请求都将经过它。


public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
  return new Class<?>[] { RootConfig.class };//这里用RootConfig类来配置根上下文(里面是一些Bean)
}

@Override
protected Class<?>[] getServletConfigClasses() {
  return new Class<?>[] { WebConfig.class };//这里用WebConfig类来配置Servlet上下文(里面是一些Bean)
}

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

}

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

3.AbstractAnnotationConfigDispatcherServletInitializer剖析

在Servlet 3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果能发现的话,就会用它来配置Servlet容器。

Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring 3.2引入了一个便利的WebApplicationInitializer基础实现,也就是AbstractAnnotationConfigDispatcherServletInitializer。因为我们的Spittr-WebAppInitializer扩展了AbstractAnnotationConfig DispatcherServlet-Initializer(同时也就实现了WebApplicationInitializer),因此当部署到Servlet 3.0容器中的时候,容器会自动发现它,并用它来配置Servlet上下文.

4.启用Spring MVC

最少配置但勉强能用的Spring MVC配置

@Configuration //配置类注解
@EnableWebMvc //启用Spring MVC
@ComponentScan("spittr.web") //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {

@Bean
public ViewResolver viewResolver() {//配置JSP视图解析器
  InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  resolver.setPrefix("/WEB-INF/views/");
  resolver.setSuffix(".jsp");
  return resolver;
}
//配置静态资源的处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  configurer.enable();
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
  // TODO Auto-generated method stub
  super.addResourceHandlers(registry);
}

}

5.AbstractAnnotationConfigDispatcherServletInitializer额外配置

上面我们继承了AbstractAnnotationConfigDispatcherServletInitializer并重写了三个方法来配置上下文,但实际上还有更多的方法可以进行重载,从而实现额外的配置。

此类的方法之一就是customizeRegistration()。在AbstractAnnotationConfigDispatcherServletInitializer
将DispatcherServlet注册到Servlet容器中之后,就会调用customizeRegistration(),并将Servlet注册后得到的
Registration.Dynamic传递进来。通过重载customizeRegistration()方法,我们可以对DispatcherServlet进行额外的配置

  • 使用customizeRegistration()配置文件上传
@Override
protected void customizeRegistration(Dynamic registration){
  registration.setMultipartConfig (
  new MultipartConfigElement("/tem/uploads")
  );
}

6.添加其他的Servlet和Filter

按照AbstractAnnotationConfigDispatcherServletInitializer的定义,它会创建DispatcherServlet和
ContextLoaderListener。但是,如果你想注册其他的Servlet、Filter或Listener的话,那该怎么办呢?
基于Java的初始化器(initializer)的一个好处就在于我们可以定义任意数量的初始化器类。因此,如果我们想往Web容器中注册其他组件的话,只需创建一个新的初始化器就可以了。最简单的方式就是实现Spring的WebApplicationInitializer接口。

SpringMVC--小小牛博客

本文作者: 小小牛
本文链接: http://blog.lyq3.com/2017/09/04/Spring_in_Action/SpringMVC-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值