`

Spring MVC 基本使用

 
阅读更多

springMVC是一个MVC框架,他控制着请求相应的整个流程,从请求一进入到应用服务器到相应离开,都离不开mvc框架。

 

请求过程

  • DisptacherServlet接收到请求,并读取出请求中的数据
  • DisptacherServlet根据请求中的信息(url),去Handlermapping中查找url对应的资源(如果没有则报404)
  • 如果资源指向一个Controller,则将请求和请求数据发送给Controller
  • Controller处理请求(一般Controller将处理动作交给业务层处理),将处理好的数据和视图名返回给DisptacherServlet
  • DisptacherServlet根据视图名去查找ViewResolver视图解析器,将数据交给对应的视图处理
    视图(jsp,html等等)拿到数据后,渲染

使用一个mvc框架要进行几步配置

  • 初始化DisptacherServlet(配置Handlermapping和Controller的位置)
  • 配置Handlermapping(ServletMapping)
  • 标识Controler,配置Controler要处理的url以及返回的视图名
  • 配置视图解析器

第二步和第三步是在一起的,因为Controler就是Servlet。Handlermapping和Controller的配置在web.xml中就相当于<servlet-mapping><servlet>DisptacherServlet需要从web.xml中拿关于springmvc的配置(servlel,servletmapping),才能调度整个流程。

 

DisptacherServlet

通过注册DispatcherServlet来开启SpringMVC。DisptacherServlet是SpringMVC的调度中心,在这里请求会第一次进入到SpringMVC。
DisptacherServlet配置着SpringMVC运作的信息。

在Servlet3.0之前,在web.xml中配置SpringMVC,然后SpringMVC会根据web.xml中的配置初始化。

 

DisptacherServlet

在servlet3.0之后,出现了ServletContainerInitializer,在项目启动最开始时,会自动扫描实现了ServletContainerInitializer接口的类,对Servlet、Listener、Filter进行动态注册,利用此技术,可以通过实现ServletContainerInitializer来配置DisptacherServlet(注册controller,ViewResolve),达到SpringMVC零配置的效果。

 

ServletContainerInitializer

ServletContainerInitializer的作用和web.xml差不多,都是部署servlet,listener,filter,只是一个是用java代码配置,一个用xml配置。

在实现了ServletContainerInitializer接口的类上要注解上@HandlesTypes(//要动态注册的class,一定要是Servlet或者Listener或者Filter)
ServletContainerInitializer接口中只有一个方法onStart(Set<Class>,ServletContext)。
当应用启动的时候,会调用onStart方法,参数Set<Class>就是@HandlesTypes中的类,意味着这些类可以被动态注册

实现动态注册的核心方法:
addServlet(String name,Servlet servlet)
addFilter(String name,Filter filter)
addListener(Listener listener)
这些都是注册Servlet、listener、filter的方法

 

现在最简单就是继承AbstractAnnotationConfigDispatcherServletInitializer,重写getServletConfigClasses、getServletMappings、getRootConfigClasses来配置DisptacherServlet

 

配置DisptacherServlet

这一步,跟配置web.xml作用差不多,就是要部署注册servlet。
在这里我们采用继承重写AbstractAnnotationConfigDispatcherServletInitializer的方法,来配置DisptacherServlet

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

 // 得到中间层(service、dao、aop、po等)的配置
 // Spring配置,得到bean
 @Override
 protected Class<?>[] getRootConfigClasses() {
   return new Class[]{DAOConf.class,ServiceConf.class,AOPConf.class};
 }

 // 得到controler和ViewResolver的配置
 @Override
 protected Class<?>[] getServletConfigClasses() {
   return new Class[]{SpringMvcConf.class}; 
 }

 // 标识哪些url要经过这个DisptacherServlet处理
 @Override
 protected String[] getServletMappings() {
   return new String[]{"/"};//所有url都被DisptacherServlet处理
 }

}

 

SpringMvc配置

这一步是完成SpringMvcConf.class,这个类配置了一些controller和ViewResolver,相当于对DispatcherServlet进行配置。

@Configuration
@EnableWebMvc
// 扫描控制器
@ComponentScan(includeFilters=@ComponentScan.Filter(type=FilterType.ANNOTATION,
    value=Controller.class))
public class SpringMvcConf extends WebMvcConfigurerAdapter {
 
 // 配置视图解析器
 // html解析
 @Bean
 public ViewResolver htmlResolver(){
   InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
   viewResolver.setPrefix("/WEB-INF/view/");
   viewResolver.setSuffix(".html");
   return viewResolver;
 }
 // 静态资源处理
 // 当DisptacherServlet接收到了他匹配的请求,但是找不到相应的Controller,
 // 就会把这个请求返回给默认的处理(比如交给tomcat处理)
 @Override
 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
   configurer.enable();
 }
}

 

这里关键有几步:
@EnableWebMvc,开启springmvc
@ComponentScan开启自动扫包,扫描所有带有@Controller的Bean
添加ViewResolver,这里的配置是使,视图路径为”/WEB-INF/view/”+Controller返回的视图名+”.html”
因为之前配置了所有路径都被DisptacherServlet接收,这会导致一些静态资源找不到controller去处理,结果出现404,configurer.enable()开启了之后,当springmvc不能处理的时候会交回给默认的处理

 

http://blog.zswlib.com/2016/07/15/springmvc%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/

 

分享到:
评论

相关推荐

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    Spring MVC+MyBatis开发从入门到项目实战

    《Spring MVC+MyBatis开发从入门到项目实战》适用于拥有Java基础的软件开发人员学习框架开发,也适用于大中专院校在校师生学习开发技术,以及软件从业实习生提升框架开发技术水平,也可作为高等院校计算机及相关专业...

    基本的spring mvc + spring security实现的登录(无数据库)

    用STS(Spring Tool Suite)开发的,spring mvc + spring security 实现的最简单的登录系统,无数据库。

    spring MVC 基本应用

    spring MVC 基本应用,学习MVC最好的例子源码,eclipse 功能

    spring+spring mvc+mybatis框架整合实现超市货物管理系统

    基于spring+spring mvc+mybatis框架整合实现超市货物管理系统(实现登入功能、mysql数据库的增删改查及分页显示)

    Spring MVC基本概念

    系统开发 Spring MVC框架的基本概念 初学适用

    Spring Mvc(1)Spring MVC 校验

    Spring Mvc(1)Spring MVC 校验 springmvc 基本校验 springmvc 自定义校验 springmvc 组合校验

    两个小时学会了Spring MVC

    手头有个项目用到了Spring MVC框架,一个星期要完成编码,我还不了解MVC框架的原理!于是乎找了本介绍Spring的书,翻到MVC那一章节,没想到两个小时,基本将MVC的原理都搞明白了,哈哈。

    基于Spring+Spring MVC+Mybatis+Layui的电影购票系统

    前台:登录、注册、注销 基本信息修改、修改头像、修改密码 按标签检索电影 根据电影选择场次 根据场次选择座位 购票 查看个人订单 申请退票 发布评论、修改评论、删除评论 后台: 用户管理:增、删、改、查 电影...

    spring3MVC 框架demo

    spring3MVC框架基本配置案例,里面两个功能案例,上传下载功能和使用xheditor发布消息功能

    spring mvc 3.0.5 jar包

    搭建spring MVC框架所必须的包,包含20个spring包,3个依赖包,基本是最精简的包了。使用的是spring3.0.5,在本人机器上运行过,保证可以正常使用。

    Spring MVC 基本框架

    基础版框架程序,数据库自己模拟一个,config下jdbc.properties配置数据库

    spring mvc学习笔记

    spring mvc核心组件 mvc请求过程 基本理论

    spring mvc 权限框架

    描述了Spring mvc的基本配置以及开发常用注解、核心类。 该源码主要是以spring mvc编写的权限模板代码,仅供参考。

    spring MVC完整jar包 内含基本springMVC架构所必需的jar包文件夹

    该资源包含完整的springMVC jar包 另外,为了使用者缩减项目体量,特附加了基本springMVC架构所必需的jar包文件夹,如无特殊需求,仅需添加基本jar包即可。

    spring mvc 使用

    spring mvc 使用技术01 文档资料,需要加强,这个做为自己基本使用

    mybatis spring mvc volectiy项目视图访问控制spring mvc

    最近学习了一下mybatis结合网上的一些列子搭建的一个网站的框架,前端显示用的velocity引擎,数据访问使用mybatis+oracle,视图访问控制spring mvc,框架主要包括一些基本的增删改操作以及拦截器,项目介绍地址:...

    spring MVC HelloWorld

    我自己写的Spring MVC的一个HelloWold,从建HelloWorld工程,搭建环境Install spring,配置web.xml,配置SpringMVC的配置文件springDispatcherServlet-servlet.xml,添加控制器类,建jsp页面,部署 Tomcat,最后运行...

    基于Maven的spring mvc

    基于Maven搭建的spring mvc 标准配置,使用到拦截器等spring mvc的基本应用

    spring mvc 基本配置

    springMvc的基本配置文件注释一些注解类,需要的可以看看

Global site tag (gtag.js) - Google Analytics