#千锋逆战#SpringMVC总结

SpringMVC步骤

1.新建一个maven项目,并设置pom文件,设置当前项目为web项目,将packaging的属性值设置为war方式,添加spring mvc的依赖包, spring-webmvc(4.3.6),分别添加插件,jdk和tomcat;

2.在项目中添加web元素,webapp, WEB-INF以及web.xml,其中在web.xml里面要添加spring mvc的引入,添加DispatcherServlet,这个是spring mvc的核心的前端控制器,注意还要设置DispatcherServlet的contextConfigLocation,如果不设置该属性,则Spring MVC会自动的在WEB-INF下查找[servlet-name]-servlet.xml文件来作为SpringMVC的配置文件;

3.配置Spring MVC的配置文件,classpath下的spring-mvc.xml文件,该文件在本案例中分别配置了视图解析器、消息资源、缺省servlet处理器、注解驱动器、上下文包扫描。

视图解析器:InternalResourceViewResolver, 该属性里可以分别配置前缀和后缀,为了保证程序的安全性,可以将页面放在/WEB-INF/view/下,所以前缀可以直接配置为该值。如果没有这方面的需求,不配置该属性,则前缀为/,代表的是webapp目录,后缀可以根据项目需要设置为.jsp或者.html

消息资源:ReloadableResourceBundleMessageSource,该bean的配置有一个要求,id必须叫做messageSource,Spring MVC框架会读取该id所对应的bean对象来读取资源配置文件,里面设置了basename属性,用作读取该文件,该文件的配置只需要文件名,不能加后缀,为了更好的实现国际化,我们可以在msg文件后面拼接语言和国家,比如msg_zh_CN, msg_en_US以及其他国家的语言均可以按照这种方式来设定。有些ide环境可能只认识resources,则可以将msg文件放入resources目录下,否则不同的ide环境找不到该文件

缺省servlet处理器:mvc:default-servlet-handler,该配置可以保证Spring MVC项目可以直接访问静态资源,比如可以直接访问index.html

注解驱动器:mvc:annotation-driven,该配置使得当前项目可以使用注解来完成配置。在控制器类之上,可以添加Controller注解,里面还有RequestMapping,GetMapping,PostMapping,PathVariable等注解,可以完成各自的功能

上下文的包扫描:context:component-scan,使用该配置,可以使得该basePackage所对应的包下的所有Component组件直接被扫描出来使用,前提是需要在类之上添加@Component注解,但是我们的Controller以及后面要用的Service和Repositoy也都是Component组件,所以可以直接被扫描出来进行使用

该配置文件还配置了两个bean,里面是name和class,那么要注意,name里对应的值是url,name里面允许存放特殊字符,因为路径字符串前面会有一个路径符号/,所以这里只能使用name而不能使用id,意思是该url请求发出来之后,会自动交给后面的控制器类来实现处理的功能,该控制器类是实现了Controller接口的类,该类中有一个返回值为ModelAndView对象的方法名为handlerRequest的包含HttpServletRequest和HttpServletResponse两个参数的方法。ModelAndView对象是一个可以同时包含视图和模型对象的对象,但是在使用的过程中,有时候只需要显示页面,有时候可能在显示页面的同时,还需要数据的传递。注意:Controller接口与Controller注解是两个不同的东西。

4.新增一个Emp的bean类;

5.在controller包下新增EmpController类,用到的注解有Controller,RequestMapping,GetMapping, PostMapping,PathVariable

Controller,代表当前类是一个控制器类,注意,通过查看源码,我们发现该类也是一个Component,所以刚刚的配置包扫描可以直接扫描到当前类,并将其作为一个组件来使用

RequestMapping,请求映射,目的是将某一个请求,映射到具体方法之上。该注解可以使用在类之上,也可以使用在方法之上。如果类和方法都有该配置,那么访问该方法的时候,需要同时拼接类之上的路径和方法之上的路径才能够访问该具体的方法。该注解可以使用method来区分不同的请求,method = RequestMethod.POST,或者GET可以分别来处理post和get请求

PostMapping和GetMapping也代表请求映射,使用起来会更直观,分别代表处理post和get的请求方式,但是这俩属性只能用于spring 4.3之后的版本。

PathVariable:路径变量,可以用来做路径传参功能,该功能相对于问号传参更加方便,可以直接指定变量的数据类型,而无需再做数据类型的转换,也可以实现传入多个参数,/{abc}/{xyz},方法里面可以使用 public String getPath(@PathVariable int abc,@PathVariable String xyz)方式来接收。注意路径传参会多一级目录,要注意访问路径

该类中的updateEmp(Emp e)方法再特别说一下:该方法可以自动接收表单里面的数据并将其封装为一个Emp对象,注意表单中的控件名一定要和Bean中的Emp类的属性要完全一致,否则找不到某些属性,这个也是Spring MVC中非常便利的地方,可以省去类型转换和封装对象的过程

该类中的方法都参数均很灵活,在需要的地方添加参数就可以直接使用

该类中的方法都返回值为String的都代表最终的展示页面。如果带有redirect,则代表重定向,意思是重定向到某一个具体的请求。

一个控制器里可以同时存在相同的路径url但是是不同的请求方式

关于校验这里,第一个GetMapping("/saveEmp")代表以get方式请求该资源,里面写了一个ModelAndView对象,传了三个参数,第一个是viewname,视图名,拼接上前后缀可以得到真正的物理视图,来打开该物理视图所对应的页面,第二个参数为modelname,模型名,相当于给模型起名字,这里要注意,该模型名意识要被叫做bean对象的小写形式Emp(emp),第三个参数为modelObject,模型对象,将该对象通过模型名传递给第一个参数viewname所对应的页面,在那个页面中可以渲染该数据

关于校验的第二个PostMapping("/saveEmp"),该注解的意思是页面上的表单通过post请求将saveEmp的请求来在这里进行处理。该方法包含有三个参数,第一个是Emp对象,可以自动封装表单中的属性为Bean对象,第二个参数为BindingResult对象,该对象我们通过源码可以发现是Spring中的Errors的子接口,可以用来接收并存储错误信息,这个对象可以接收从EmpValidate校验类中产生的错误信息,存储以交给错误页面的f:errors标签来展示错误信息,第三个参数是Model对象,可以用来储存对象,目的是可以使的bean对象的错误数据进行回显

6.IEmpService.java, Service接口

7.EmpServiceImpl.java, service实现类

8.IEmpDao.java Dao接口

9.EmpDaoImpl.java dao的实现类,使用List模拟一套数据源,可以完成对于Emp对象的CRUD操作,注意如果服务器重新启动,则数据会恢复到最原始的状态

10.EmpValidate.java,用来对于Emp做校验使用,有非空校验,有合法性校验。

11./WEB-INF/view/emp.jsp文件,用来展示所有的员工信息的页面,该页面包含两个超链接,修改和删除,修改使用的时候问号传参,删除使用的是路径传参;

12./WEB-INF/view/updateEmp.jsp

13./WEB-INF/view/saveEmp.jsp, 该页面要注意,引入了Spring MVC的form标签,表单使用的就是SpringMVC的form表单

f:form:使用的是Spring MVC的form标签,里面有一个属性叫做commandName,这个值是从后端传递过来的对象名,注意要与bean的小写方式一致

f:input类似于html中的input标签,但是将name换成了path,代表的是属性名

f:errors,这个标签可以用来展示如果当前表单有错误信息时,可以在对应的域之上进行回显,一般都被放在对应的f:input标签之后,用来描述该属性的错误信息

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • 题记:观察发现,清除学习障碍。明确目标,有记录,做一个头脑清晰的人。 57.昨天一时兴起给孩子们也做了一个TO D...
    恬淡罗罗阅读 349评论 0 2
  • 今天是思维导图第19节课。 下午,我来到教室,刚好正式上课。我就赶紧做到了自己的位置上。我们首...
    吴广泽阅读 777评论 0 1
  • 从前,有一只讲礼貌的乌鸦。还有乌鸦的一些好朋友,喜鹊,没头脑,不高兴,和小麻雀。 ...
    一对快乐的母女阅读 362评论 0 0