Skip to content

Latest commit

 

History

History
296 lines (171 loc) · 7.49 KB

01 框架原理和入门配置.md

File metadata and controls

296 lines (171 loc) · 7.49 KB

01 框架原理和入门配置

标签: springmvc


Contents


本文主要介绍springmvc的框架原理,并通过一个入门程序展示环境搭建,配置以及部署调试。

什么是Spring MVC

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。(struts2与Spring整合的时候需要借助单独的jar包)

springmvc是一个基于mvc的web框架。

给个官网示意图


MVC在b/s系统 下的应用

mvc是一个设计模式,mvc在b/s系统下的应用:

1536050065921

SpringMVC框架原理

Spring-mvc-framework

步骤

  1. 发起请求到前端控制器 (DispatcherServlet)

  2. 前端控制器请求处理器映射器 (HandlerMapping) 查找 Handler (可根据 xml 配置、注解进行查找)

  3. 处理器映射器 (HandlerMapping) 向前端控制器返回 Handler

  4. 前端控制器调用处理器适配器 (HandlerAdapter) 执行 Handler

  5. 处理器适配器 (HandlerAdapter) 去执行 Handler

  6. Handler 执行完,给适配器返回 ModelAndView (SpringMVC 框架的一个底层对象)

  7. 处理器适配器 (HandlerAdapter) 向前端控制器返回 ModelAndView

  8. 前端控制器 (DispatcherServlet) 请求视图解析器 (ViewResolver) 进行视图解析,根据逻辑视图名解析成真正的视图 (jsp)

  9. 视图解析器 (ViewResolver) 向前端控制器 (DispatcherServlet) 返回 View

  10. 前端控制器进行视图渲染,即将模型数据 (在 ModelAndView 对象中)填充到 request 域

  11. 前端控制器向用户响应结果

组件及其作用

  1. 前端控制器 (DispatcherServlet)

    接收请求,响应结果,相当于转发器,中央处理器。

    有了DispatcherServlet减少了其他组件之间的耦合度

  2. 处理器映射器 (HandlerMapping)

    作用:根据请求的 url 查找 Handler

  3. 处理器 (Handler)

    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

  4. 处理器适配器 (HandlerAdapter)

    作用:按照特定规则(HandlerAdapter要求的规则)执行Handler。

  5. 视图解析器 (ViewResolver)

    作用:进行视图解析,根据逻辑视图解析成真正的视图 (View)

  6. 视图 (View)

    View 是一个接口实现类支持不同的 View 类型(jsp,pdf等等)

注意:只需要程序员开发,处理器和视图。

springmvc入门程序

一个展示商品列表的小页面

环境搭建

intellij IDEA 15.0.2

  • A方法(有待商榷)

new->project->maven->勾选create from archetype->选中webapp

src/main下新建java文件夹,标记为Sources Root

这样建出来的工程感觉有问题,点开一些xml文件一片红,心里不是很踏实,所以放弃这个方法了

  • B方法

new->project->maven,建一个裸的maven工程,手动建webapp的目录

src/main下新建文件夹webapp

pom.xml文件

添加依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

加上下面的标签会生成Artifacts

<packaging>war</packaging>

build标签的finalName要和Artifacts的output directory一致

<build>
    <finalName>springmvc-2nd-1.0-SNAPSHOT</finalName>
</build>

配置文件

  • 配置前端控制器

web.xml

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)
      若不配置,默认加载WEB-INF/servlet名称-servlet(springmvc-servlet.xml)
    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--
    第一种:*.action,访问以.action结尾,由DispatcherServlet进行解析
    第二种:/,所有访问的地址由DispatcherServlet进行解析,对静态文件的解析需要配置不让DispatcherServlet进行解析,
            使用此种方式和实现RESTful风格的url
    第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析jsp地址,
            不能根据jsp页面找到handler,会报错
    -->
    <url-pattern>*.action</url-pattern>
</servlet-mapping>
  • 配置Handler

将编写Handler在spring容器加载

<!-- 配置Handler -->
<bean name="/queryItems.action" class="com.iot.ssm.controller.ItemsController"/>
  • 配置处理器映射器

在classpath下的springmvc.xml中配置处理器映射器

<!-- 处理器映射器
    将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
  • 配置处理器适配器

所有处理器适配器都实现了HandlerAdapter接口

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">

源码

public boolean supports(Object handler) {
        return handler instanceof Controller;
}

此适配器能执行实现Controller接口的Handler

  • 配置视图解析器

需要配置解析jsp的视图解析器

 <!-- 视图解析器
    解析jsp,默认使用jstl,classpath下要有jstl的包
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

在springmvc.xml中视图解析器配置前缀和后缀:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置jsp路径的前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 配置jsp路径的后缀 -->
        <property name="suffix" value=".jsp"/>
</bean>

程序中不用指定前缀和后缀:

//指定视图
//下边的路径,如果在视图解析器中配置jsp的路径前缀和后缀,修改为items/itemsList
//modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

//下边的路径配置就可以不在程序中指定jsp路径的前缀和后缀
modelAndView.setViewName("items/itemsList");

部署调试

HTTP Status 404 - 处理器映射器根据url找不到Handler,说明url错误

HTTP Status 404 -/springmvc/WEB-INF/jsp/items/itemsLists.jsp 处理器映射器根据url找到了Handler,转发的jsp页面找不到

Maven Repository: org.springframework » spring-webmvc » 5.0.8.RELEASE

参考链接