Spring MVC基础知识

来源:互联网 发布:bilibili以前知乎 编辑:程序博客网 时间:2024/06/06 02:28

本章要点

Model1 和Model2

MVC思想及其优点

Spring MVC 的优势

Spring MVC 的前端控制器 DispatcherServlet

开发第一个 Spring MVC 应用

基于 Controller 接口的控制器

基于注解的控制器

Spring MVC 的工作流程


2.1.1 传统Model1 和 Model2

Model1:整个 Web 应用几乎全部由JSP页面组成,用少量的 JavaBean 来处理数据库的连接、数据库访问等操作。

Model2:基于MVC架构的设计模式。 Servlet作为前端控制器,负责接收客户端发送的请求,然后调用后端的 JavaBean 来完成实际的逻辑处理;最后,将其转发到相应的 JSP页面来处理显示逻辑。

2.1.2 MVC 思想及其优势

MVC 是所有面向对象程序设计语言应该遵循的规范。 MVC 思想将一个应用分成三个基本部分: Model(模型) 、View(视图) 和 Controller(控制器)。在经典的 MVC 模式中,事件由控制器进行处理,控制器根据事件的类型改变模型和视图。具体地说,每个模型对应一系列的视图列表,这种对应通常采用注册来完成,即把多个视图注册到同一模型,当模型发生改变时,模型向所有注册过的视图发送通知,接下来,视图从对应的模型中获取信息,然后完成视图显示的更新。从设计模式角度去看, MVC 思想非常类似于观察者模式,但其与观察者模式存在少许差别:在观察者模式下,观察者和被观察者可以是两个互相对等的对象;但在 MVC 中,被观察者往往只是单纯的数据体,而观察者则是单纯的视图页面。

2.2 Struts2 和 Spring MVC

Spring MVC 具有如下特点:

Spring MVC 拥有强大的灵活性、非侵入性、和可配置性。

Spring MVC 提供了一个前端控制器 DispatcherServlet。

Spring MVC 分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器等等,每一个功能实现由一个专门的对象负责完成。

Spring MVC 可以自动绑定用户输入,并正确的转化数据类型。例如,Spring MVC能自动解析字符串,并将其设置为模型的 int 或 float 类型的属性。

Spring MVC 使用一个名称/值的 Map 对象实现更加灵活的模型数据传输

Spring MVC 内置了校验器,校验用户的输入,如果校验不通过,则重定向会输入的表单。并且输入校验是可选的,并且支持声明方式及编程方式。

Spring MVC 支持国际化

Spring MVC 支持多种视图技术

Spring MVC 提供了强大的 JSP 标签库,支持数据绑定功能。

2.3.1 Spring MVC 的 DispatcherServlet

DispatcherServlet 是前端控制器,所有的请求都围绕这个 DispatcherServlet 来分派请求。DispatcherServlet 是一个 Servlet (继承自 HttpServlet ),因此使用时需要把它配置在 web.xml文件当中,配置如下:

<servlet>

  <!-- Servlet 的名称 -->

  <servlet-name>springmvc</servlet-name>

  <!-- Servlet 对应的 Java 类 -->

  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  <!-- 当前 Servlet 的参数信息 -->

  <init-param>

    <!-- contextConfigLocation 是参数名称,该参数的值包含 Spring MVC 的配置文件路径 -->

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/springmvc-config.xml</param-value>

  </init-param>

  <!-- 在 Web 应用启动时立即加载 Servlet -->

  <load-on-startup>1</load-on-startup>

</servlet>

<!-- Servlet 的映射声明 -->

<servlet-mapping>

  <!-- 请求对应的 Servlet 的名称 -->

  <servlet-name>springmvc</servlet-name>

  <!-- 监听当前域的所有请求 -->

  <url-pattern>/</url-pattern>

</servlet-mapping>

DispatcherServlet 加载时会需要一个 Spring MVC 配置文件,如果没用 init-param 配置Spring MVC配置文件路径,则应用程序会去WEB-INF文件夹下面去找对应的[ servlet-name ]-servlet.xml 文件。作为 Spring MVC 的配置文件,解析该文件内容并根据文件配置信息创建一个 WebApplicationContext容器对象,也称为上下文环境。WebApplicationContext 继承自ApplicationContext 容器,它的初始化方式和 BeanFactory、ApplicationContext 有所区别,因为WebApplicationContext需要ServletContext实例,也就是说,它必须在拥有Web容器的前提下才能完成启动Spring Web 应用上下文的工作。

2.3.2 基于Controller接口的控制器

DispatcherServlet是前端控制器,是将用户的请求分发到对应的处理类中,而这种处理类称为Handle。在Spring 2.5版本之前,这种处理类必须实现org.springframework.web.servlet.mvc.Controller接口。Controller接口的实现类必须实现一个方法,该方法如下:

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception Controller接口实现类可以通过handleRequest方法传递的参数访问对应的请求HttpServletRequest和HttpServletResponse对象,处理完请求后,必须返回一个包含模型对象和视图路径的ModelAndView对象。缺点:Controller接口的实现类只能处理单一请求动作,而Spring 2.5 之后新增的基于注解的控制器可以支持同时处理多个请求动作,并且无需实现任何接口,更加灵活。

第一个Spring MVC应用

1.创建项目


2.给项目添加必要的jar包


3.配置DispatcherServlet


4.配置springmvc-config.xml配置文件

5.配置Handler处理类


6.编写jsp页面

示例:基于注解的控制器

Spring2.5版本开始新增了可基于注解的控制器,也就是说控制器不用再实现Controller接口,而是通过注释的方式来描述。

与SpringMVC应用一样,只需修改两个地方。

1.Controller 类的实现

2. 修改Spring MVC 配置文件



2.3.3 详解DispatcherServlet


initStrategies 方法将在WebApplicationContext初始化后自动执行,自动扫描上下文的Bean,根据名称或类型匹配的机制查找自定义的组件,如果没有找到则会装配一套Spring的默认组件。在org.springframework.web.servlet路径下有一个DispatchServlet.properties配置文件,该文件指定了DispatcherServlet所使用的默认组件。

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver           本地化解析器                             
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver                     主题解析器
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,
\org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping                                                                 处理器映射器
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,
\org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,
\org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter                                                                  处理器适配器 
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,
\org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,
\org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver                                                                       异常处理器
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator          视图名称解析器
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver            视图解析器
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager      FlashMap映射器
如果我们需要使用自定义的类型组件,则只需在Spring配置文件中配置自定义的Bean组件即可。SpringMVC如果发现上下文中有用户自定义的组件,就不会使用默认的组件。



原创粉丝点击