springmvc框架原理和入门配置学习

 


Contents


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

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

springmvc框架原理

组件及其作用

  • 前端控制器(DispatcherServlet):接收请求,响应结果,相当于转发器,中央处理器。减少了其他组件之间的耦合度
  • 处理器映射器(HandlerMapping):根据请求的url查找Handler
  • Handler处理器:按照HandlerAdapter的要求编写
  • 处理器适配器(HandlerAdapter):按照特定规则(HandlerAdapter要求的规则)执行Handler。
  • 视图解析器(ViewResolver):进行视图解析,根据逻辑视图解析成真正的视图(View)
  • 视图(View):View是一个接口实现类试吃不同的View类型(jsp,pdf等等)

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

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

springmvc_核心架构图

步骤:

  • 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.前端控制器向用户响应结果

springmvc入门程序

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

环境搭建

intellij IDEA 15.0.2

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

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

pom.xml文件

添加依赖

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

加上下面的标签会生成Artifacts

xml <packaging>war</packaging>

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

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

配置文件

  • 配置前端控制器

web.xml

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>

xml <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容器加载

  • 配置处理器映射器

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

  • 配置处理器适配器

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

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

源码

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

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

  • 配置视图解析器

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

```xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

```

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

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

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

```java //指定视图 //下边的路径,如果在视图解析器中配置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页面找不到

参考链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值