# springmvc学习笔记(1)-框架原理和入门配置

标签: springmvc


Contents


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

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

springmvc框架原理

给个官网示意图

The request processing workflow in Spring Web MVC

组件及其作用

注:其中加粗的为需要程序员开发的,没加粗的为不需要程序员开发的

文末参考链接中《跟开涛学SpringMVC》里面有张图挺好的,感觉很详细.

springmvc_核心架构图

步骤:

springmvc入门程序

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

环境搭建

intellij IDEA 15.0.2

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

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

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

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在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页面找不到

参考链接


作者@brianway更多文章:个人网站 | CSDN | oschina