从头到脚细致解说SPRINGMVC,走向spring大家庭的怀抱
1.回顾mvc
二阶段的封装代码中,问题
使用springmvc,减少开发量,让上述的工作,给springmvc去做2.springmvc介绍
首先,springmvc是spring中的一个模块,也是一个mvc设计思想的框架
The Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files.
springmvc设计核心,是DispatcherServlet,是用来接收和分发请求给具体的handler(类似二阶段封装中的Controller,是由程序员开发的),通过请求和handler之间的映射配置(类似mvc.xml),最后,通过视图解析器解析页面响应。支持文件上传3.springmvc框架搭建
需求:浏览器输入请求地址 http://localHost:8080/teacher_springmvc/hello访问服务器,服务器响应hello.jsp给浏览器
1)新建teacher_springmvc01
2)导包
核心包
还需要拷贝之前spring框架中的jar包
3)配置文件
log4j.properties
springmvc框架自己的配置文件,applicationContext-mvc.xml(名字不重要,也可以是springmvc.xml)
配置文件直接拷贝之前spring的配置文件
web.xml(是tomcat加载工程的唯一入口)
给servlet加load标签,一般是servlet在第一次被访问的时候实例化,加了load标签,就是tomcat启动的时候就实例化。
4)部署到tomcat中,启动tomcat
报错:
DispatcherServlet在实例化的时候,会默认去WEB/INF目录下找配置文件,配置文件的文件名为 web.xml中servlet配置的servlet-name + "-servlet.xml"
拷贝applicationContext-mvc.xml到在WEB-INF下,并重命名为springmvc-servlet.xml
重启服务器—》成功
但是!!我们的配置文件,肯定不会直接放在WEB/INF下,而是放在src下,编译之后的目录是WEB/INF下的class目录
这时,我们需要告诉DispatcherServlet,配置文件的路径+文件名,替换默认路径和文件名
删除WEB/INF下的springmvc-serlvet.xml
重启服务器
--成功
5)入门案例,HelloWorld
浏览器输入请求地址 http://localHost:8080/teacher_springmvc/hello访问服务器,服务器响应hello.jsp给浏览器
a. handler编写,用于处理/hello请求
b.hello.jsp
c. 请求地址和handler之间的映射
重启,访问
因为web.xml配置DispatcherServlet拦截的地址为 /*,所以不管是jsp还是/hello还是js,css的请求,会全部都到DispatcherServlet中。会404
处理办法:将需要给DispatcherServlet拦截的请求加个标识,拦截.action结尾的请求
浏览器请求地址:http://localHost:8080/teacher_springmvc/hello.action
映射配置:
重启,重新访问
4.springmvc 注解模式
teacher_springmvc02
1)controller可以脱离springmvc的api
2)配置文件中开启注解
3)代码中使用注解
5.执行流程
1.tomcat启动的时候加载应用,解析web.xml
需要在启动之后,实例化DispatcherServlet.
DispatcherServlet实例化的时候,默认加载了一个配置文件DispatcherServlet.properties
DispatcherServlet加载这个配置文件,主要的目的,就是实例化它的各种帮手。
除了默认加载的配置文件,DispatcherServlet还加载了我们指定的配置文件
先解析applicationContext-mvc.xml,
如果有bean配置,那么实例化bean,然后拿bean的name属性作为key,实例作为value.
如果有开启注解的标签,那么DispatcherServlet会扫面指定的包
扫描指定包的时候,找@Controller和@RequestMapping注解
@Controller注解,用来生成实例
@RequestMapping用来映射请求地址和方法之间的映射
如果还有其他的标签,会继续做相应的事。
2.浏览器请求http://localHost:8080/teacher_springmvc/hello.action
3.tomcat服务器接收到浏览器的请求,先拆分看请求的是 哪个应用,然后看请求地址有没有在web.xml中配置到。如果web.xml中没有配置拦截,那么就根据路径指向具体的资源(比如teacher_springmvc/index.jsp,那么tomcat会发现web.xml中没有要接收这个请求的,那么就从webRoot开始,找index.jsp响应给浏览器,没找到,404)
但是,请求的是teacher_springmvc/hello.action ,web.xml中,有个servlet配置,接收*.action的请求,请求地址hello.action符合要求,那么tomcat就会把这个请求丢给DispatcherServlet
4.DispatcherServlet拿到这个请求,会找处理器映射器帮忙,找是那个映射关系。
找到映射关系,等于找到了哪个Controller处理这个请求
继续找处理器适配器帮忙,调用具体的Controller中的具体方法
5.DispatcherServlet拿到Controller层处理之后的返回值。
又继续找视图解析器帮忙,解析响应指定的页面给浏览器6.@RequestMapping应用
6.1方法上使用
请求地址:
http://localhost:8080/teacher_springmvc/hello.action
6.2用在类上,作用类似namespace
请求该类中每个方法,都需要带上namespace, namespace就是类上的RequestMapping指定的路径
1+2组成的请求地址,在整个工程中不能重复
6.3 @RequestMapping 默认支持get/post两种请求方式。
那如果,我只要支持其中的一种
显式的定义,支持post、get
7.Controller层方法的返回值7.1 ModelAndView
ModelAndView可以给跳转页面地址
绝对路径,以 / 打头
页面跳转是转发还是重定向?
默认为转发
那如果要重定向?页面地址前加上 redirect:
ModelAndView除了可以放view视图(jsp),还可以放model(数据)
7.2 String
返回值String:为需要跳转的页面
默认转发
如果要使用重定向
7.3 void
方法没有返回值,在方法中,使用response直接给页面响应
8.Controller层方法参数8.1 默认参数(Servlet API)
HttpServletRequest, HttpServletResponse, HttpSession, ModelAndView ,ModelMap
8.2 简单类型
String,int之类
形参的命名=前台页面控件的name属性值
类型转换-》框架会做
一般用于属性较少的添加和查询功能8.3 自定义对象
提交参数的key需要和实体类属性名保持一致
提交参数key: 如果是form表单,key就为form控件中的name属性
如果是其他的提交方式,比如get, …action?key1=value1&key2=value2,那么,key1,key2都需要和实体类属性名一致
8.4 包装类
自定义对象中含有自定义对象
Product中Company对象传参
jsp页面,控件的name属性值,需要使用导航符。
8.5数组
checkbox类型
参数使用String类型
参数使用数组类型
如果前台使用的checkbox,那么参数可以是String类型,也可以是数组类型,如果value为number类型,那么数组可以直接定义为int类型数组8.6 类型转换
之前的参数中,有String—》int, 也有String—》double这些类型转换,springmvc框架中内置的。
但是如果想要String Date, 比如产品的发行时间,通过req取出参数肯定是String类型,但是我们的实体类,或者说直接使用参数接收,那么框架不支持转换,需要自定义转换器
1) 定义转换器
2)将转换器注册到框架中
3)mvc框架集成自定义的转换器
需要使用到mvc打头的标签,要使用mvc中的标签,需要引入mvc的约束
使用mvc标签,集成自定义转换器
springmvc框架中,遇到StringDate类型,会自动调用自定义的转换器。
如果已有的转换器,重新定义,比如String Integer ,那么,自定义的转换器会覆盖内置转换器
9.乱码问题
get/post
POST
使用springmvc中的字符集过滤器
GET
使用终极大招
tomcat/conf/server.xml中指定url编码格式
get方式提交,参数是直接跟在请求地址之后,请求地址是由tomcat解析的。让tomcat在解析的时候,使用我们指定的编码格式解析
10.springmvc+spring+mybatis集成(dao+xml配置版本)
teacher_ssm011)导包
导入spring+mybatis最后一个版本的包
至于springmvc,检查下是否含有spring-web和spring-webmvc这两个包,如果没有,重新导入。
2)配置文件
log4j.properties
db.properties---》数据源配置,给spring引入使用
sqlMapConfig.xml --------mybatis
applicationContext.xml----------spring
applicationContext-mvc.xml--------springmvc
web.xml ------DispatcherServlet需要配置,spring中的实例也需要tomcat创建,所以,spring的入口也在web.xml中配置
DispatcherServlet
spring入口—》监听
3)部署,启动
未报错,但是不能证明框架集成成功4)案例
查询所有的企业展示。
1.建表
insert数据…
2)实体类
Company.java
3)CompanyDao接口,CompanyDaoImpl实现类,company.xml
company.xml
实现类
4)sqlMapConfig.xml中注册配置文件
5)CompanyService,接口,实现类
6)Controller
7)service,dao在applicationContext中的bean配置
8)controller中的注解配置
9)springmvc配置文件中,开启注解
10)companyManager.jsp
路径需要Controller中返回的路径一致
a.拷贝资源目录
--》
b.复制companyManager.html到webRoot/pages/backend目录
c.将html修改为jsp
第一步先复制jsp文件内容到html
第二步修改后缀
第三步,修改所有的引用地址为绝对
第四步:使用c标签解析comList
11) 部署,启动
12)浏览器访问地址
11.springmvc+spring+mybatis+mapper代理+注解
1)拷贝teacher_ssm01工程,代码结构调整
2)company.xml中的namespace调整
3)修改company.xml在sqlMapConfig.xml中的路径
4)service使用注解
5)在spring中配置mapper代理生成
6)springmvc配置文件中,一定要打开注解
如果这个扫描的包已经包含了Service,dao等等,那么spring配置文件中applicationContext.xml不需要再开启一次注解
如果applicationContext-mvc.xml中的包只有com.njwb.controller
那么,applicationContext.xml中需要重新开启注解,扫描service,dao …
案例:
添加企业
1)添加企业ID的序列
2)接口,company.xml提供添加
3)service
4)controller
校验参数
调用service添加数据
跳转到列表页
5)修改companyAdd.html
a.修改companyManager.jsp中的跳转地址
b.修改companyAdd.html为jsp文件
c.修改添加页面的form提交地址,提交方式
d.给需要提交到后台数据的控件添加name属性
e.要取详情内容,使用隐藏域
目前代码中的校验
如果属性比较多,代码就会很多,并且,修改中也会有很多的重复代码,因为修改中也需要做校验,并且,校验一般和添加差不多
并且,校验完成之后,目前是跳转到result.jsp
但是从用户的角度来说,校验不通过,一般回到添加页面,并且,原始数据有回显,然后有相依的错误信息提示
不使用校验框架也可以做到,不过,使用校验框架,编码更简单,提示信息也可以作为配置文件12.校验框架
teacher_ssm04使用hibernate校验框架
1)导包
2)在mvc中配置校验器
3)需要在mvc框架中启用校验器
4)代码中使用
在实体类中,使用注解标明这个属性的规则是什么样子的
在Controller的方法中,需要告诉springmvc,形参Company company,需要使用校验框架做校验
页面效果:
将错误信息放到配置文件中
数据回显
校验框架,支持数据回填
默认key为实体类类名,第一个字母小写。不需要显示的传值
案例:
如果就是要修改一下传值的key,使用
并不是每种场景校验都一模一样
比如:添加和修改。
添加中,每个属性都需要校验
修改: 不允许修改的属性,还需要校验么???
假设:企业数据中,佣金不允许修改
添加需要校验 企业名称、佣金、详情
修改需要校验 企业名称、详情
校验需要分场合,分场景
把实体类属性中的校验分组校验分组
1)首先需要定义两个空接口,作为两个标识
2)给实体类中的规则分组
3)Controller中使用分组校验
校验注解:
逻辑性校验校验框架做不了,比如,重名校验13.springmvc中使用ajax
1)使用response响应
2 ) 使用@ResponseBody注解响应
使用该注解,表示,返回值不管是啥,直接响应给浏览器
返回String
返回Company
让springmvc框架自动的将对象转换成json格式的字符串,需要导包
代码:
jsp:
结果:
14.springmvc上传
1)jsp中的form表单处理和Servlet上传处理一致
method="post",enctype需要处理
2)Controller中使用mvc包中的类直接接收文件对象
需求:给企业添加一个图片
1)数据库添加字段
img_url(上传路径), img_real_name(原始文件名)
2)实体类添加属性
3)需要修改的功能:
企业添加,企业修改,企业列表页展示,企业详情也要展示
4)企业添加:
a.修改company.xml中的insert语句
b.Controller添加方法中,参数,直接找框架要浏览器提交的文件对象
c.需要使用文件对象,那么需要在mvc中配置文件解析器
d.页面添加file控件
e.form表单处理
f.测试Controller中能不能拿到文件对象
g.指定文件上传的路径
h.文件上传地址,使用配置形式;文件重命名,使用当前时间的时分秒毫秒形式15.列表页的table中省略显示详情
页面效果:
解决方式
Company实体类中,提供一个get方法,获取这个String
页面使用el取值
16.文件下载
1)页面请求地址
比如
2)需要有一个Controller处理下载请求
a.Servlet通用下载,使用response响应文件流
3)SpringMVC下载
16.Springmvc中的异常处理
teacher_ssm06
1.定义异常处理器
2.注册自定义异常处理器
17. Spring中的定时任务—SpringJob
1)导包
2)定义定时任务
3)配置定时任务
1.定时任务bean
2.定时任务触发器(间隔时间)
3.spring定时任务配置所有的触发器
到点之后,不管上一个定时任务是否结束,
1)到点仍然开启新一轮定时任务,允许同一个定时任务有多个线程存在
2)到点之后,等待上一个定时任务结束,然后再开启新一轮定时任务
如果涉及到数据库数据更新,那么定时任务,不应该是可以多线程。
实现接口就可以了,不需要编写额外的代码
人文地理短视频栏目看鉴海南上线带您一屏深探海南之美视频加载中海南日报海口1月8日讯(记者李丛娇徐晗溪)海南日报海南周刊融媒转型升级,与海南日报新媒体中心联合制作,明起推出短视频栏目看鉴海南,约您在方寸屏幕之上轻划指尖,换个视角看懂
中国足协杯产生四强奥斯卡回归赛场成为亮点昨天,中国足协杯结束了四分之一比赛第二回合的争夺,结果浙江队上海海港和山东泰山上海申花进入了四强。两回合中国足协杯四分之一的比赛没有太多悬念,传统强队纷纷获得晋级,而上海海港队外援
寻江苏宿迁籍烈士潘守伍后人,他在平津战役牺牲,静待亲人为烈士寻亲,为烈士安魂。日前,抖音寻人寻找烈士后人项目与平津战役纪念馆合作,借助今日头条的技术优势,为英烈墙上尚未联系到亲人的5000多名烈士寻找后人。本次要为以下这位烈士寻找后代
江苏宿迁农墨重彩乡村振兴成色足从基础设施提档升级到产业发展提质增效,从治理模式不断创新到民生服务持续向好过去的一年,勤劳的宿迁人民在广袤丰饶的乡村大地上挥洒汗水播种希望,唱响从辽阔农村走向宜居乡村的蝶变之歌。走
视频丨海南海岸警察版早安隆回MV献礼警察节新海南客户端南海网南国都市报1月9日消息(记者王燕珍通讯员代龙超黄琪程)今年1月10日,是第三个中国人民警察节。1月9日,海南省公安厅海岸警察总队发布海南海岸警察版早安隆回MV献礼
提升孩子专注力家长可以这样做!红网时刻新闻1月6日讯(通讯员曹晗)又到了一年一度的寒假,近期在网络上因为辅导孩子学习而让家长暴跳如雷的社会话题,频频登上热搜。孩子上了小学,注意力不集中可以说是最令家长们苦恼的难
干货孕期进补规避六个坑,关键要点禁忌这篇讲透了!头号有新人很早以前就想聊聊孕期进补的话题,但一直担心说了会不会影响别人生意,后来想想,我就是一个小号,想来影响力也没那么大。像我们这种老大难,好不容易怀上了,婆婆妈妈都围着转,恨不
有偏见的母亲和顽劣的孩子,是谁先开始,偏离了爱?因为一头红棕色的头发,小胡萝卜须有了一个外号叫胡萝卜须,此后他没有了真正的名字,所有人都这么称呼他,包括他的父母家人因为长着一个鼹鼠洞模样的鼻子耳朵里有掏不完的耳屑走路像驼背脖子上
绘本阅读猜猜我有多爱你?你去想一想!你去看一看!比心猜猜我有多爱你作者英山姆麦克布雷尼绘制英安妮塔婕朗翻译梅子涵出版明天出版社向他们致敬赞赞赞比心适合年龄1岁比心媒体评论我在很多的场合讲过这个故事,是讲给父母们听,因为令他们感动
这种玩具释放的气体有剧毒,很多学校门口都有,快提醒孩子头条创作挑战赛随着生活水平的提高,孩子们接触的玩具也越来越多,在学校门口,各种各样的玩具琳琅满目,加上便宜的价格,很多家长觉得这些东西总比电子产品好,也比较乐意购买。殊不知,近年来
儿童如何区分游戏和工作丨心理杂货铺编者按中国科学院心理研究所PsyChJournal编辑王日出在中科院之声开了一个杂货铺,铺子里有各种有趣的心理学百货。欢迎大家没事过来逛逛。曾有一次,我问一个小姑娘你觉得play和
从01!扬科维奇首胜,逆转阿联酋球队,执教国足希望大增目前足协陈戌源被带走调查后,相关的工作没有受到太大影响,杜兆才接替陈戌源暂时主导足协的各种工作。国字号球队的集训备战也在有序的进行中,只是关于国足主帅的人选仍然没有最终确定,亚运队
雍正突然暴毙七窍流血,可能是脑血管疾病中风死亡脑溢血雍正突然暴毙,真的是吕四娘冲破禁卫军杀死的吗?雍正十三年,(1735)清世宗猝然离世,作为其亲密大臣的张廷玉记录了当天的惊骇漏将二鼓,方就寝,忽闻宣召甚急。按照官方史料记载前一天,
担任大益茶推广大使,徐杰新职务曝光,买豪车,为父母盖3层别墅徐杰,广东男篮最好的球员之一。178公分的身高,用很多知名解说员的话语来说,00后的徐杰能够吃上CBA的饭已经很不容易,可是偏偏徐杰不仅吃上了,而且徐杰如今也已经有了三个总冠军戒指
静默的白骨塔清宣统三年春月,枣庄中兴公司建造的白骨塔。历经一百一十多年的风吹雨打日晒的侵蚀,仍然巍巍屹立不倒,矗立在鲁南枣庄大地上。塔下是无数悲惨遇难矿工的遗骸。白骨塔,高六米,周长十二米,分
是谁不远万里前往劝阻成吉思汗?拯救万民又为何被称道教第一人!大家好我是小酱油今天给大家分享一个发生在宋末元初时期的故事在历史上也是可以寻找到它的出处的同时也是关于我国本土传统宗教道教全真龙门派创始人长春真人的故事。道教在宋末元初的时候,蒙古
水银做山川河流?人鱼膏做长明灯?秦始皇陵究竟隐藏着什么秘密?有传言说秦始皇陵墓里面有成水银做的山川河流,有人鱼膏做成的永不熄灭的长明灯,还有人人求而不得的长生不老药,秦始皇陵究到底隐藏着什么秘密?为何几千年过去了至今无人敢挖?秦始皇陵犹如一
怛罗斯之战大唐安西军VS阿拉伯铁骑,一场稀松平常的遭遇战巅峰时期的大唐遭遇如日中天的阿拉伯帝国,究竟谁强谁弱?它们之间的对决碰撞是否促使了大唐由盛转衰?今天就让我们来聊聊,那场发生于公元八世纪中叶的怛罗斯之战。看到今天要聊的话题,相信绝
三名军统特务,留守大陆64年后一聚首国民党败退台湾的时候,留在大陆的潜伏特务上万人。经过新中国50年代的抓特务60年代的大浪淘沙,到70年代阶级斗争的弦还绷得紧紧的,再加上岁月不饶人,到2000年之后,估计没有谁还认
刘统勋家被抄出二万两现银,乾隆这点银子不多,他们家没有贪官刘统勋是清代少有的汉臣首席军机大臣,乾隆皇帝对他的评价极高,说他是真宰相,死后追封太傅,赐谥文正。为人臣者能获得如此高的荣誉已经是极限了。刘统勋在影视文学作品中出镜率也很高,其形象
甘肃永昌知县林昂宵平凉府正堂林昂宵史迹介绍甘肃永昌知县林昂宵林昂宵,字丛圃,乾隆壬申恩科(1752年)举人。(入台湾籍)原籍陆丰市大安镇玉瓜坑村人,清高宗乾隆四十三年至四十五年(1778年1780年
杀猪贩的故事故事发生在民国时期,有个满脸麻子的屠夫,以杀猪贩肉为生。野蛮暴躁。屠夫虽然也是个生意人,但是没有那么多弯弯肠子,逢人也不会说什么太好听的话,话不投机几句就能和人吵起来,所以没少得罪