标签: springmvchtml
[TOC]前端
本文主要介绍springmvc的框架原理,并经过一个入门程序展现环境搭建,配置以及部署调试。java
springmvc是spring框架的一个模块,springmvc和spring无需经过中间整合层进行整合。git
给个官网示意图程序员
组件及其做用github
注:其中加粗的为须要程序员开发的,没加粗的为不须要程序员开发的web
文末参考连接中《跟开涛学SpringMVC》里面有张图挺好的,感受很详细.spring
步骤:架构
DispatcherServlet
)HandlerMapping
)查找Handler
(可根据xml配置、注解进行查找)HandlerMapping
)向前端控制器返回Handler
HandlerAdapter
)执行Handler
HandlerAdapter
)向前端控制器返回ModelAndView
DispatcherServlet
)请求视图解析器(ViewResolver
)进行视图解析,根据逻辑视图名解析成真正的视图(jsp)DispatcherServlet
)返回ViewModelAndView
对象中)填充到request域一个展现商品列表的小页面mvc
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页面找不到