提示:这本文入门使用
前言
提示:以下是本篇文章正文内容,下面案例可供参考
SpringMVC简单介绍及使用
1、什么是MVC?
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。 Model(模型)︰数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来: Value object(数据Dao,data access object)和服务层(行为Service,业务逻辑)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。 view(视图)︰负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。 Controller(控制器)∶接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。 其实在最早期的时候还有model1和model2的设计模型 最典型的MVC就是JSP + servlet + javabean的模式。 链接: web容器(tomcat). 链接: JavaWeb——Servlet(全网最详细教程包括Servlet源码分析). 回顾servlet: 首先得导入jsp-api和servlet的jar包。 每个web工程中的web.xml都是继承自web容器(如tomcat)配置文件中的web.xml。 配置Myservlet.java 配置web.xml
2、SpringMvc
1.springmvc介绍
spring web MVC是构建在Servlet API上的原始web框架,从一开始就包含在Spring Framework中。正式名称"spring web MVc,”来自其源模块(spring-webmvc)的名称,但它通常被称为"Spring Mvc". 简而言之,springMVC是Spring框架的一部分,是基于java实现的一个轻量级web框架。 学习SpringMVC框架最核心的就是DispatcherServlet的设计,掌握好DispatcherServlet是掌握SpringMVC的核心关键。
2.SpringMVC的优点
1.清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(formobject)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。 ⒉.强大而直接的配置方式:将框架类和应用程序类都能作为javaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。 3.可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、 command型、 from型.wizard型、 multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。 4.可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。5.可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保证错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。 6.可定制的handler mapping和view resolution: Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。 7.灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各种视图技术集成。 8.可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层等等。 9.简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。 10.JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。 11.Spring Bean的生命周期:可以被限制在当前的HTTp Request或者HTTp Session。准确的说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationcontext容器。
3、SpringMVC的实现原理
SpringMVC的具体执行流程: 当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
1、Dispatcherservlet表示前置控制器,是整个SpringMVc的控制中心。用户发出请求,Dispatcherservlet接收请求并拦截请求。 2、HandlerMapping为处理器映射。Dispatcherservlet调用Hand1erMapping ,Hand1erMapping根据请求url查找Handler. 3、返回处理器执行链,根据url查找控制器,并且将解析后的信息传递给Dispatcherservlet4、HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler. 5、执行handler找到具体的处理器 6、contro11er将具体的执行信息返回给Hand1erAdapter , 如Mode1Andview. 7、 Hand1erAdapter将视图逻辑名或模型传递给Dispatcherserv1et。 8、 Dispatcherservlet调用视图解析器(ViewReso1ver)来解析Hand1erAdapter传递的逻辑视图名,9、视图解析器将解析的逻辑视图名传给Dispatcherservlet. 10、Dispatcherservlet根据视图解析器解析的视图结果,调用具体的视图,进行试图渲染 11、将响应数据返回给客户端
3、基于XML的Hello_SpringMvC
1、添加pom依赖
< dependencies>
< dependency> < groupId>org.springframework< /groupId> < artifactId>spring-context< /artifactId> < version>5.2.3.RELEASE< /version> </ dependency> < !-- https : / /mvnrepository.com/artifact/org.springframework/spring-web -->< dependency> < groupId>org.springframework< /groupId> < artifactId>spring-web< /artifactId> < version>5.2.3.RELEASE< /version> </ dependency>
< dependency> < groupId>org.springframework< /groupId> < artifactId>spring-webmvc< /artifactId> < version>5 . 2.3.RELEASE< /version> </ dependency>
webmvc包下的关键类dispatcherServlet 配置web.xml
/:用来匹配所有请求,但是/不会拦截jsp页面 /*:用来匹配所有的请求,会拦截jsp页面
配置controller.java
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response){ //创建对象 ModelAndView mv = new ModelAndView) ; //添加视图名称,要跳转的页面的名称 mv.setViewName(“hello”): //向前端页面添加的属性值 mv.addObject( attributeName:“hello”, attributeValue: “hello, springmxc”); return mv;
还需要在web-inf中创建lib库,导入所需要的jar。 通过前后缀匹配来找到文件jsp。
注解实现
@Controller class controller{ @RequestMapping表示用来匹配当前方法要处理的请求,其中/可以写也可以不写,一般推荐协商**/ @RequestMapping("/hello") public String hello(Map<String,String> map)( map. put(“hello”,“hello,Springmxc”); return “hello”; } }
springmxg处理过程 1、浏览器要发送一个请求 http;:/localhost:8080/springmvc_helloworld _war_exploded/hello 2、首先交给tomcat容器 3、在web.xml文件中配置了DispatcherServlet的类,所以此时会由当前的DispatcherServlet来接受请求 4、接受到请求之后找到对应的Controller,去Controller中寻找@RequestMapping注解标识的方法 5、找到匹配的方法之后,执行方法的逻辑 6、处理完成之后需要返回一个前端页面的名称, 7、有视图处理器来根据名称映射到对应的jsp页面的路径 8、DispatcherServlet拿到对应的路径地址之后返回给浏览器
此时如果创建一个html页面之后,是无法请求到的,原因是: 每个项目的web.xml文件会继承tomcat下的web.xml文件,而在tomcat-web.xml文件中包含了一个DefaultServlet的处理类用来处理静态资源,但是我们在编写自己的DispatcherServlet的时候使用了/的方式,此方式覆盖了父web, xml对于静态资所以此时所有的静态资源的访问也需要由DispatcherServlet来进行处理,但是我们并没有设置对应的Controller,所以报404 **** 为什么jsp能处理呢? 在父web.xml文件中包含了一个JSPServlet的处理类,会有tomcat进行处理,而不是我们定义的DispatcherServler
设置初始化参数,指定默认的springmvc的配置文件 可以选择将springmxc的配置文件添加到/WEB-INF/的目录下。默认是从此目录查找配置文件 但是需要注意的是,配置文件的名称必须是(DispatcherServlet的servlet-name)-servlet.xml
@RequestMapping表示用来匹配当前方法要处理的请求,其中/可以写也可以不写,一般推荐协商 @RequestMapping可以添加在类上,也可以添加在方法上 当添加在类上的时候表示给所有的当前类的方法钱添加一个访问路径 //什么时候需要在类上添加此注解? 当包含多个Controller,通过在不同的Controller中包含同名的请求的时候,需要添加
@RequestMapping配置的参数value:表示要匹配的请求 method:表示请求的方式,post getparams:表示要求请求中必须要包含的参数 //必须要包含username的属性值 @RequestMapping( value = " /hello", params = “username”]) //必须要包含username,age两个属性值,并且username的值为zhangsan @RequestMapping( value = “/hello” , params = (“username=zhangsan”, “age”) headers:表示限制请求头中的相关属性值,用来做请求的限制 produces:限制请求中的Content-Type consumers:限制响应中的Content-Type
@RequestMapping可以进行模糊匹配 ?:替代任意一个字符 *:替代多个字符球 **:替代多层路径 如果能匹配到多个请求,那么优先是精准匹配,其次是模糊匹配
|