SpringMVC概念:
他是一个轻量级的开源框架,应用于表现层,基于MVC的设计模式.
SpringMVC的特点:
1.他是单例的可以设置成多例.
2.他的线程是安全的
3.他是基于方法级别的拦截
4.接受请求参数的方式是参数绑定
5.携带参数到页面是通过request域对象.
SpringMVC流程(重点)
1.用户向服务器发送一个请求,被SpringMVC的前端控制器DispatchServlet 捕获.
2.DispatcherServlet接收到请求后调用HandlerMapping处理器映射器.
3.处理器映射器找到具体的处理器(xml配置或者注解,RequesrtMapper),生成处理器对象及处理器拦截器一并返回给DispatcherServlet
4.DispatcherServlet调用HandlerAdapter处理器适配器
5.HandlerAdapter经过适配器调用具体的处理器(Controller)
6.Controller执行完成后返回ModelAndView
7.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体的View
10.DispatcherServlet根据View进行渲染视图
11.DispatcherServlet将渲染完的视图界面最后响应给用户.
SpringMVC中的几个组件说明
DispatcherServlet:前端控制器,控制整个流程,他是SpringMVC的入口
HandlerMapper:处理器映射器
HandlerAdapter:处理器适配器
ViewResolver:视图解析器,可以解析JSP,freemarker,pdf等
SpringMVC的三大件:(面试可能会问)
HandlerMapper\HandlerAdapter\ViewResolver
MVC设计模式概念
M-Model(模型,完成业务逻辑:主要有JavaBean构成,service+dao+entity)
V-View(视图层,主要是做页面的展示,jsp,html...)
C-Controller(控制器,主要是接受请求之后调用模型层(M)根据结果返回页面)
SpringMVC常用注解
1.@Controller:标记在类上,他会表明这个类是一个SpringMVC Controller对象.处理器将会扫描该注解的类的方法,并检测该方法是否使用了@RequestMapping注解.@Controller只是定义类控制器类,真正处理请求的注解是@RequestMapping.
大多数框架使用的时候都是整合因此在一个类上标记@Controller还不能真正意义上说他是SpringMVC的控制器,这个时候Spring不认识这个注解,需要把控制器类交给Spring来管理,一下又两种方式:
1.直接写这个类的全路径
<bean class="com.xxx.xxx.当前类"/>
2. 路径写到当前Controller注解类的上一层
<context:component-scan base-package = "com.xxx"/>注意当前配置@Controller这个类就不要写上去了
Controller不会依赖HttpServletRequest和HttpServletResponse等HttpServlet对象,他是可以直接通过Controller的方法参数获取到的.小Demo
@Controller
public class SaveController() {
@RequestMapping("/save")
public String save() {
System.out.println("保存save");
return "success";
}
}
2.@RequestMapping
RequestMapping是用来处理请求url的注解
RequestMapping中的六个属性:
2.1--value:请求的实际地址
2.2--method:请求的类型.GET,POST,PUT,DELETE等
@RequestMapping(value="",method="RequestMethod.GET")
2.3--consumes:指定请求的提交内容的类型(Content-Type),例如text/html
2.4--produces:指定返回的内容类型
2.5--params:指定request中必须包含某些参数值,才让该方法进行处理
2.6--headers: 指定request中必须包含某些指定的header值,才让该方法处理请求
3.@ResponseBody
该注解用于将Controller的方法返回对象通过HtpMessageConverter转换成指定个时候写到Response对象的body数据中,
使用场景:当返回的数据不是html标签,而是其他的数据格式比如json,xml等使用.
4.@PathVariable
用于将请求url中的模版变量映射到功能处理方法的参数上,取出url模版中的变量作为参数
5.@RequestParam
用于将请求参数区数据映射到功能处理方法的参数上.
6.@CookieValue
参数: value 参数名
required:是否必须
defaultValue:默认值
7.@Resource和@Autowired
他们都是做bean注入时候使用,@Resource不是Spring的注解他的宝石javax.annotation.Resource需要导包,但是Spring支持该注解的注入
共同点:两者都可以卸载字段和setter方法上,如果都写在字段上就不需要在写setter方法
不同点:
@Autowired是Spring提供的注解需要导报,按照byType注入,默认情况下他要求依赖对象必须存在,如果允许为null值,设置他的required属性为false.
@Resource默认按照byName自动注入,他有两个重要的属性,name和type,Spring将该注解的name属性解析为bean的名字,type属性解析为bean的类型,如果想要使用name属性,需要使用byName的自动注入,使用type属性需要使用byType自动注入策略.如果什么属性都不制定,她会通过反射使用byName自动注入策略.
还有其他注解,在这就不一一举例,本人比较懒散.希望文章对你有所帮助.水平有限,不能深入的研究,只能把表象的一些知识和本人的理解和大家分享,如有错误请及时指正,本人感激不尽.
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
随机推荐
- 关于Springmvc中include与Sitemesh装饰器的基本使用
关于Springmvc中include与Sitemesh装饰器的使用 !!!转载请注明出处=>http://www.cnblogs.com/funnyzpc/p/7283443.html 静态包 ...
- 【批处理学习笔记】第十四课:常用DOS命令(4)
系统管理at 安排在特定日期和时间运行命令和程序shutdown立即或定时关机或重启taskkill结束进程(WinXPHome版中无该命令)tasklist显示进程列表(Windows XP Hom ...
- bzoj:1659: [Usaco2006 Mar]Lights Out 关灯
Description 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的少.他们知道按钮开关的位置,但喜闻乐见的是他们并没有手指.你得到 ...
- BZOJ2441: [中山市选2011]小W的问题
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2441 首先要注意到x1>x3且x5>x3(要是没有这个设定就是树状数组水题了.. ...
- linux命令 uname -r 和 uname -a 的解释与演示
1.uname -r : 显示操作系统的发行版号2.uname -a :显示系统名.节点名称.操作系统的发行版号.内核版本等等. 系统名:Linux 节点名称: iZ2zeeailqvwws5dcui ...
- angular-dragon-drop.js 双向数据绑定拖拽的功能
在做公司后台物流的时候,涉及到34个省市分为两个部分,一部分为配送区域,另一部分为非配送区域,想利用拖拽的功能来实现,最好两部分的数组能自动更新. 刚好找到angular-dragon-drop.js ...
- 调用webService的几种方式
转自:http://blog.csdn.net/u011165335/article/details/51345224 一.概览 方式1: HttpClient:可以用来调用webservie服务,也 ...
- 【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统
[Zigbee技术入门教程-号外]基于Z-Stack协议栈的抢答系统 广东职业技术学院 欧浩源 一.引言 2017年全国职业院校技能大赛"物联网技术应用"赛项中任务三题2的 ...
- Tomcat学习笔记(二)—— 一个简单的Servlet容器
1.简介:Servlet编程是通过javax.Servlet和javax.servlet.http这两个包的类和接口实现的,其中javax.servlet.Servlet接口至关重要,所有的Servl ...
- Eclipse报错An internal error occurred during: "J2EE Component Mapping Update". java.lang.NullPointerException
Eclipse每次打开.java文件时,报错信息如下: An internal error occurred during: "J2EE Component Mapping Update&q ...