springMvc学习笔记一
什么是springmvc springmvc就是spring框架的一个模块 所以springmvc与spring之间无需通过中间整合层进行整合的。
springmvc又是基于mvc的web框架 mvc是一种设计模式
详细记录一下springmvc的核心内容,也就是springmvc是如何工作的。
第一步:用户发送请求, 有前端控制器(dispatcherserverlet) 进行接收与发送
第二步:前端控制器发送请求 处理器映射器(HandlerMapping) 查找所需要的Handler(也就是常说的controller 控制器)
根据什么来找的呢,根据请求的url 就是把name作为url来进行查询的,这个后面再说,在配置xml时会提及
第三步:处理器映射器查找到Handler 了之后返回前端控制器,向前端控制器返回Handler
第五步:处理适配器(HandlerAdapter)按照特定规则(HandlerAdapter 继承接口要求的规则)去执行可执行的Handler(controller 控制器)
第六步:执行完毕之后给适配器返回modelandview
剩余的就是一步步返回数据了,所以重要的就是上面的六大步,这六大步,也就是去配置springmvc.xml的关键
最后两步就是试图解析器向前端控制器返回modelandview 前端控制器进行试图渲染
根据上面的流程我们可以了解了springmvc的结构了
整理下重要部分:
1.前端控制器(dispatcherservlet) 作用接收请求响应结果,相当于转发器,也有称之为分发器的。
2.处理器映射器(HandlerMapping)作用根据请求的url 查找匹配的Handler(controller 控制器)
需要把相应的Handler(controller)注册到springmvc框架中,这个地方也需要在xml中配置。
3.处理器适配器(HandlerAdapter)作用按照特定的规则,HandlerAdapter继承的接口找到匹配的Handler 去执行
4.视图解析器(viewResolve) 作用进行视图解析
看懂了springmvc的核心,下一步就是搭建一个springmvc的环境了
我当前用的开发工具是idea,这个工具集成了好多的插件,比如maven 等。
搭建java环境这里不说了。
创建好项目之后,首先配置web.xml 咱们根据springmvc的原理去配置xml
第一步,它需要前端控制器,去接收与分发。配一个前端控制器
前端控制器是什么,我在上面写前端控制器的时候故意把dispatcheservler 这个单词的后面一部分servelet标注了。前端控制器是什么,前端控制器就是一个servlet
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>jar包release里面的dispatcherservlet(前端控制器)复制他的全路径名</servlet-chass>
<%--
咱们配的是springmvc的框架,所以下面还需要定义一个springmvc的配置文件路径,创建一个spring_mvc.xml的文件
在
init-param 里面配置 param-name 名称就是contextconfigLocation param-value 的值就是咱们创建的spring_mvc.xml的文件名称
classpath:sping_mvc.xml 这个springmvc配置文件里面配置了处理器映射器,处理器适配器,视图解析器,等等
这个地方需要注意如果不配置contextconfigLocation 那么默认加载的是web-inf /servlet下面名称为servlet.xml(springmvc-servlet.xml)--%>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring_mvc.xml</param-value>
</init>
</servlet>
下面配置servlet-mapping 主要是截获请求的,用户发送请求数据,前端控制器得截获才行啊,所以这个地方需要配置个截获请求,同样是一个servler
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<%--主要的是下面这个地方-它要截获那些请求,
1、.action访问以.action结尾的 由DispatcherServlet进行解析
2、/,所有访问都由DispatcherServlet进行解析
--%> <url-pattern>/</url-pattetn>
</servlet-mapping>
下面该去spring_mvc.xml 里面配置映射器,处理器,映射器 等等了, 这个顺序是没有固定的,只要配上就可以了。
创建完spring_mvc.xml 首先需要配置这个文件的一些约束了,直接拷贝就行了
下面咱们先来配置一个非注解的 适配器 很简单,一句话
<bean class="org.springframework.web.servlet.mvc.simplecontrollerHandlerAdater">
这个就是适配器
框架为什么会自动他是个适配器呢,看这个jar的源码,咱们找到了这个一个方法
boolean supports(object handler)这么个方法
你会发现,所有的处理器适配器都实现了HandlerAdapter接口,框架也就是根据这个接口来判断他是不是一个适配器。,也就是根据这个方法来看这个适配器支持哪一种类型的handler(也就是controller 控制器)
下面咱们配置一个非注解的映射器
也是一句话很简单
<bean class="org.springframework.web.servlet.handler.beanNameUrlHandlerMapping"/>
仔细看这个依赖jar包,能看出一些东西, bean Name Url HandlerMapping
这个映射器的含义是将bean的name 作为url 来进行查找handler 的
所以我们下面配置handler的配置
<bean name="/queryitem" class="当前配置Handler(controller)的全路径名称"/>
这个name就相当于url 也相当于注解requestMapping(/queryitem)
下面配置视图解析器 也是一个bean
<bean class="org.springmvcframework.web.servlet.view.internalResourceViewResolve"/>
这个作用就是解析jsp 视图,默认使用jstl标签,注意,这个视图解析器可以配置上前缀和后缀例如下面的配置。
<bean class="org.springmvcframework.web.servlet.view.InternalResourceViewResolvew">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
这样写的好处就是前面访问时,不要在加这些共同地方了,例如
http://10.10.07.8:8080/web-inf/pages/方法名 与
后台返回view 时 web-inf/pages/list.jsp 与 list
这就是区别。
下面继续说一种非注解的适配器与非注解的映射器
上面所说的非注解的适配器都是实现了controller的接口
另一个非注解的适配器
<bean class="org.springmvc.framework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
要求编写的Handler都实现HttpRequestHandler接口
下面在加一种非注解的简单映射器
<bean class="org.springmvcframework.web.servlet.handler.simpleurlHandLerMapping">
<property name="mapping">
<prop key="/items11">item1</prop>
<prop key="/items22">item2</prop>
</property>
</bean> <%--下面是配置注册Handler了(controller)---%>
<bean id="item1" name="queryItem(当前控制器的方法名称)" class=“当前控制器的全路径名”>
<bean id="item2" name="queryitem1" class="当前控制器的全路径名"/>
上面学习的都是非注解的,配置有些麻烦,繁琐,下面学习一下注解的映射器与适配器
当然配置也很简单,就一句话
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
下面是适配器
<bean class="org.springmvcframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
上面的两种是3.1之后才出现的,现在主要也就是用这个,3.1之前用的了解一下就可以
DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter
springmvc 还提供了一种全新的注解方式在实际项目开发中都用这种,使用这种全新的注解方式,默认加载了很多的参数绑定方法,比如json转换解析器就默认加载了。
<!-- 配置注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
这种方式内容暂不表述,后续补充,我也没学到,哈哈
注意啊,注解的适配器和映射器是成对使用的。
对于注册的handler可以单个配置,但是麻烦,实际开发中建议使用组件扫描,进行扫描注册,
下面是写法:
<context:component-scan base-package="扫描某个路径包">
<context:include-filter type="annotation" expression="扫描路径下的哪个文件夹"/>例如(controller 文件夹)
<context:include-filter type="annotation" expression="扫描路径下的那个文件夹"/>例如(service 文件夹)
</context:component-scan>
注意: 使用注解适配器及映射器时,在controller 类文件加上@controller 映射注解
方法加上@RequestMapping 映射注解
以上就是今天所学习的内容,明天将学习整合springmvc+mybatis 框架
springMvc学习笔记一的更多相关文章
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- springmvc学习笔记---面向移动端支持REST API
前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- springmvc学习笔记(简介及使用)
springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- springMVC 学习笔记(一):springMVC 入门
springMVC 学习笔记(一):spring 入门 什么是 springMVC springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整 ...
随机推荐
- mysql查询语句处理
两表做链接查询, 查理处理顺序各个阶段: 1) From: 对From子句中的坐标<left_table>和右表<right_table>执行笛卡尔积,产生虚拟表T1: 2 ...
- Spring学习之路三——第一个Spring程序(体会IoC)
体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...
- 简单的线性规划-scipy
根据描述,我们用线性规划带约束来求解问题 # coding=utf-8 from scipy.optimize import linprog import numpy as np def maxGai ...
- Java基础——反射 reflect
什么是反射 (1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
- Django_上传图片和模版获取图片
需求: 在Django中,上传图片,存入数据库中的文件的路径,而不是图片本身,也就是说,图片等数据静态文件都可以放到第三方服务器上,我想在把图片保存到Django本地项目中,并可以通过Django自带 ...
- python_5_模块
创:5_4_2017 修: 什么是模块? --标准库+第三方库+自定义,为实现某一方面的功能集合(变量,函数,类) 如何安装第三方库? --pip install 第三方库 如何导入和使用模块? -- ...
- 企业级分布式存储应用与实战-mogilefs实现
Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...
- mydate97设置时间
1.引入包 2.页面引入 <script type="text/javascript" src="${pageContext.request.contextPath ...
- Linux exec与文件描述符
看到好几篇文章讲述exec都是一知半解,所以我尽量说的清楚明白一些.本文首先讲述Linux文件描述符,然后是exec,最后举例说明exec I/O重定向及其用法. 概念:exec命令用于调用并执行指令 ...
- Spring Boot快速入门(最新)
本章通过完成Spring Boot基础项目的构建并实现一个简单的Http请求处理,让大家对Spring Boot有一个初步的了解,并体验其结构简单.开发快速的特性.预计阅读及演练过程将花费约5分钟. ...