Spring MVC 学习笔记 Viewresol和View===
springMVC学习笔记
SpringMVC的主要组件?前端控制器dispatcherServlet:接收请求,响应结果,减少其他组件之间的耦合度处理器映射器HandlerMapping:根据请求的url来查找Handler处理适配器HandlerAdapter:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler(需要程序员开发)(5)视图解析器ViewResolver(不需要程序员开发)作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)(6)视图View(需要程序员开发jsp)View是一个接口,它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)什么是DispatcherServletSpring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
MVC是什么?MVC设计模式的好处有哪些mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。
模型(model)-视图(view)-控制器(controller),三层架构的设计模式。
用于实现前端页面的展现与后端业务数据处理的分离。
mvc设计模式的好处1.分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。
2.有利于系统的并行开发,提升开发效率。
常用注解注解原理是什么注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。
我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。
通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。
该方法会从memberValues这个Map中索引出对应的值。
而memberValues的来源是Java常量池。
springmvc的知识点总结
springmvc的知识点总结一、控制器1. 控制器是Spring MVC框架中的核心组件,它负责接收请求并处理用户的输入。
在Spring MVC中,控制器通常以注解@Controller标记,并通过@RequestMapping注解来指定处理请求的URL。
2. 一个简单的控制器可以像下面这样定义:```java@Controllerpublic class HomeController {@RequestMapping("/")public String home() {return "index";}}```在这个例子中,HomeController类使用@Controller标记为一个控制器,并使用@RequestMapping("/")注解来指定处理根路径("/")的请求。
该方法返回一个String类型的视图名称,Spring MVC将根据这个名称来查找对应的视图。
3. 控制器方法还可以接收请求参数以及路径变量。
例如:```java@RequestMapping("/user/{id}")public String getUser(@PathVariable("id") long userId, Model model) {User user = userService.getUserById(userId);model.addAttribute("user", user);return "user";}```在这个例子中,@PathVariable注解用于绑定路径变量到方法的参数中。
二、视图解析1. Spring MVC使用视图解析器来将控制器返回的视图名称解析成实际的视图。
在Spring MVC的配置文件中,可以配置多个视图解析器,并按顺序来尝试解析视图名称。
Spring MVC中的视图解析ViewResolver
Spring MVC中的视图解析ViewResolver在SpringMVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进行渲染。
那么在Spring MVC中是如何选择合适的View呢?View对象是是如何创建的呢?答案就在ViewResolver中,ViewResolver接口定义了resolverViewName方法,根据viewName创建合适类型的View实现。
那么,如何配置ViewResolver呢?在Spring中,ViewResolver作为Spring Bean存在,可以在Spring配置文件中进行配置,例如下面的代码,配置了jsp相关的viewResolver。
[xhtml] view plaincopy<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --> <beanclass="org.springframework.web.servlet.view.InternalReso urceViewResolver"> <propertyname="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean>在Spring MVC中,因为ViewResolver是使用bean 来配置的,所以扩展起来非常的容易,可以根据自己的需要定制ViewResolver,然后在配置文件中进行相关的配置即可。
SpringMVC框架详解
SpringMVC框架详解随着Web应用程序变得越来越复杂,使用适当的框架变得越来越重要。
SpringMVC是一个流行的Java Web框架,它提供了许多功能,使开发Web应用程序更容易和更快速。
本文将对SpringMVC框架进行详细介绍,包括其架构、工作流程、控制器、视图和模型等方面的内容。
1. SpringMVC架构SpringMVC框架基于Model-View-Controller(MVC)架构。
在这种架构中,应用程序被分为三个组件,分别是:1. Model:负责管理数据的处理和存储。
2. View:负责呈现数据给用户的界面。
3. Controller:负责接收用户的请求和处理数据,控制应用程序的行为。
SpringMVC通过DispatcherServlet实现了这种MVC架构。
DispatcherServlet是一个前端控制器(Front Controller),它接收所有的客户端请求并将其分配给相应的处理程序。
2. SpringMVC的工作流程SpringMVC框架具有以下的工作流程:1. 用户发送请求到DispatcherServlet。
2. DispatcherServlet收到请求后,根据配置文件中的URL映射找到相应的Controller。
3. Controller接收请求,并将数据传递给Service层。
4. Service层对数据进行处理,并将处理结果返回给Controller。
5. Controller根据视图解析器的配置选择相应的视图,将处理结果传递给视图并渲染。
6. 视图呈现处理结果,并将其返回给客户端。
3. SpringMVC的控制器控制器是SpringMVC架构中最重要的组件之一。
它负责接收客户端请求,并根据请求的类型执行相应的逻辑。
SpringMVC提供了以下几种类型的控制器:1. @Controller:该注解标注的类被SpringMVC视为控制器。
2. @RestController:可以理解为@Controller和@ResponseBody的组合注解。
model、view、viewmodel、controller的中文解释
model、view、viewmodel、controller的中文解释
MVC(Model-View-Controller)是一种用于构建Web应用程序的框架。
它将应用程序分解为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。
以下是这些术语的中文解释和拓展:
1. 模型(Model):模型表示应用程序中的数据和业务逻辑。
它是应用程序的核心部分,负责存储和处理数据,并实现与数据库或文件之间的接口。
模型通常包含业务规则、数据对象和业务逻辑,它是应用程序中最难处理的组件之一。
2. 视图(View):视图表示应用程序的用户界面。
它是应用程序中与用户交互的部分,负责呈现模型中的数据并为用户提供界面。
视图通常包含显示数据和与用户交互的代码,如文本、图像、按钮等。
3. 控制器(Controller):控制器是应用程序中的协调器,负责处理模型和视图之间的交互。
它接收来自模型的数据,并将其呈现给视图,同时还需要处理用户输入的请求并返回相应的响应。
控制器通常是应用程序中的中心部分,负责处理用户与应用程序之间的交互。
MVC框架通过将这三个部分分离来确保应用程序的可扩展性和可维护性。
模型负责存储和处理数据,视图负责呈现数据,控制器负责协调模型和视图之间的交互。
在开发过程中,开发人员可以将不同的功能模块组合在一起,构建出复杂的应用程序。
同时,MVC框架还提供了许多工具和库,帮助开发人员更轻松地构建和维护Web应用程序。
spring mvc面试知识点
Spring MVC面试知识点1. 什么是Spring MVCSpring MVC是一个基于Java的框架,用于构建Web应用程序。
它是Spring框架的一部分,提供了用于处理HTTP请求和响应的组件和功能。
Spring MVC的核心目标是实现MVC(Model-View-Controller)设计模式,以实现松耦合、可重用和可测试的Web应用程序。
2. MVC设计模式MVC设计模式是一种将应用程序分为三个主要组件的架构模式:模型(Model)、视图(View)和控制器(Controller)。
这个模式的目标是将应用程序的数据逻辑、业务逻辑和用户界面分离开来,以提高代码的可维护性和可测试性。
•模型(Model):模型代表应用程序的数据和业务逻辑。
它负责处理数据的读取、写入和验证,并包含与业务逻辑相关的方法和操作。
•视图(View):视图是应用程序的用户界面。
它负责以用户可以理解的方式呈现数据,并处理与用户交互的相关操作。
•控制器(Controller):控制器是模型和视图之间的协调者。
它负责接收用户的请求,处理请求,并相应地更新模型和视图。
3. Spring MVC的核心组件在Spring MVC中,有几个核心组件负责处理请求和响应。
•DispatcherServlet:DispatcherServlet是Spring MVC的前端控制器(Front Controller)。
它是整个请求处理流程的中央处理器,负责接收所有的HTTP请求,并将它们分发给相应的处理器。
•HandlerMapping:HandlerMapping负责将URL映射到具体的处理器(Controller)上。
它根据请求的URL确定要执行的处理器,并返回一个处理器对象。
•HandlerAdapter:HandlerAdapter负责根据请求的处理器的类型,调用相应的处理方法。
它根据处理器的类型和方法的参数,将请求的参数传递给处理器,并处理返回值。
springmvc高级知识课堂笔记温习资料
springmvc第二天高级知识温习:springmvc框架:DispatcherServlet前端操纵器:接收request,进行responseHandlerMapping处置器映射器:依照url查找Handler。
(能够通过xml配置方式,注解方式)HandlerAdapter处置器适配器:依照特定规那么去执行Handler,编写Handler时需要依照HandlerAdapter的要求去编写。
Handler处置器(后端操纵器):需要程序员去编写,经常使用注解开发方式。
Handler处置器执行后结果是ModelAndView,具体开发时Handler返回方式值类型包括:ModelAndView、String(逻辑视图名)、void(通过在Handler形参中添加request和response,类似原始servlet 开发方式,注意:能够通过指定response响应的结果类型实现json数据输出)View resolver视图解析器:依照逻辑视图名生成真正的视图(在springmvc中利用View对象表示)View视图:jsp页面,仅是数据展现,没有业务逻辑。
注解开发:利用注解方式的处置器映射器和适配器:<!--注解映射器--><bean class=""/><!--注解适配器--><bean class=""/>在实际开发,利用<mvc:annotation-driven>代替上边处置器映射器和适配器配置。
@controller注解必需要加,作用标识类是一个Handler处置器。
@requestMapping注解必需要加,作用:1、对url和Handler的方式进行映射。
2、能够窄化请求映射,设置Handler的根途径,url确实是根途径+子途径请求方式3、能够限制http请求的方式映射成功后,springmvc框架生成一个Handler对象,对象中只包括一个映射成功的method。
SpringMVC框架知识点详解
SpringMVC框架知识点详解官⽅的下载⽹址是:⼀、Spring MVC简介1.1Spring MVC⼯作流程映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑1.2Spring MVC VS Struts21)springmvc的⼊⼝是⼀个servlet,即前端控制器;struts2⼊⼝是⼀个filter过虑器,即前端过滤器,2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯;struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据4)springmvc开发运⾏速度快于struts2⼆、Spring MVC⼯程搭建(xml)2.1导⼊springioc,springweb , springmvc相关的jar包2.2在/WEB-INF/ web.xml⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控制器)<!-- 注册springmvc核⼼控制器 --><servlet><!-- servlet-name名字随便写 --><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通知DispatcherServlet去指定的⽬录下加载springmvc.xml配置⽂件classpath:是在⼯程的src路径下寻找如果不配置init-param的话,控制器会⾃动寻找/WEB-INF/<servlet-name>-servlet.xml⽂件--><init-param><!-- 值是固定的,相当于键值对 --><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>*.action</url-pattern>//拦截请求</servlet-mapping>注:在默认情况下:springmvc框架的配置⽂件必须叫<servlet-name>-servlet.xml且必须放在/WEB-INF/⽬录下,我们可以在web.xml⽂件中,为DispatcherServlet配置⼀个初始化参数,让它去我们指定的⽬录下加载springmvc.xml配置⽂件2.3配置springmvc.xml注:该配置⽂件的命名规则遵循web.xml⽂件中核⼼控制器配置。
spring mvc 面试知识点
Spring MVC 面试知识点Spring MVC 是一个轻量级的基于 Java 的Web开发框架,它是 Spring 框架的一部分。
在面试中,掌握 Spring MVC 的知识是非常重要的。
本文将介绍一些关于Spring MVC 的面试知识点,以帮助你更好地准备面试。
1. 什么是 Spring MVC?Spring MVC 是基于 Model-View-Controller(模型-视图-控制器)设计模式的Web框架。
它通过将应用程序分为模型、视图和控制器来实现应用程序的松耦合,使得开发人员能够更好地管理和组织代码。
Spring MVC 提供了一个强大的基于注解的方式来处理请求和响应。
2. Spring MVC 的核心组件是什么?Spring MVC 的核心组件包括以下几个:•DispatcherServlet:它是整个 Spring MVC 的前端控制器,负责将请求分发给不同的处理器进行处理。
•HandlerMapping:它负责将请求映射到对应的处理器。
•Controller:它是处理请求的组件,通常使用注解或实现特定接口来标识。
•ViewResolver:它负责解析视图的逻辑名称并返回具体的视图对象。
•View:它负责将模型数据渲染成具体的HTML、JSON 等形式的响应。
3. Spring MVC 的请求处理流程是怎样的?Spring MVC 的请求处理流程如下:1.客户端发送请求到服务器。
2.请求被 DispatcherServlet 拦截。
3.DispatcherServlet 根据请求的 URL 调用合适的 HandlerMapping 来确定请求的处理器。
4.处理器处理请求,并将处理结果存储在一个 ModelAndView 对象中。
5.DispatcherServlet 根据 HandlerMapping 返回的处理器和ModelAndView,选择一个合适的 ViewResolver 来解析视图逻辑名称。
springmvc常用知识点总结
springmvc常⽤知识点总结1.spring mvc是靠spring 启动的。
通过springjar包的org.springframework.web.servlet.DispatcherServlet这个servlet类具体启动的。
<servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>这个dispatcherservlet这个类,有个contextConfigLocation参数,指定springmvc的配置⽂件xml。
2.理清⼀下思路:每个tomcat下的程序war包都有⼀个web.xml。
web.xml可以启动servlet。
web.xml只能配置servlet相关信息,如servletmapping等等,不能配置bean的注⼊,扫描包路径,注解驱动等,这3.⼆、配置解析 1.Dispatcherservlet DispatcherServlet是前置控制器,配置在web.xml⽂件中的。
拦截匹配的请求,Servlet拦截匹配规则要⾃已定义,把拦截下来的请求,依据相应的规则分发到⽬标Controller来处理,是配置spring MVC的第⼀步。
4. <!-- scan the package and the sub package --><context:component-scan base-package="test.SpringMVC"/><!-- don't handle the static resource --><mvc:default-servlet-handler /><!-- if you use annotation you must configure following setting --><mvc:annotation-driven /><!-- configure the InternalResourceViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean></beans>5.spring mvc配置⽂件⾥的配置标签,必背:<context:component-scan base-package="test.SpringMVC"/><mvc:annotation-driven /><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"<!-- scan the package and the sub package --><context:component-scan base-package="test.SpringMVC"/><!-- don't handle the static resource --><mvc:default-servlet-handler /><!-- if you use annotation you must configure following setting --><mvc:annotation-driven /><!-- configure the InternalResourceViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean></beans>6.spring mvc的那些controller标签,是注⼊到spring的ioc容器中的。
springmvc学习笔记。
springmvc学习笔记1、springmvc都做了什么?1.1、Controller为中心完成对系统流程的控制管理;1.2、从请求中收集数据;1.3、对传入的参数进行验证;1.4、将结果返回给视图;1.5、针对不同的视图提供不同的解决方案;1.6、针对JSP视图技术提供标签库;1.7、拦截器;1.8、上传文件。
2、springmvc结构:2.1、Dispatcherservlet:中央控制器,把请求转发到具体的控制类;2.2、Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置);2.3、HandlerMapping:映射处理器,负责映射中央处理器转发给Controller时的映射策略;2.4、ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配置)2.5、ViewResolver & View:视图解析器,解析具体的视图。
2.6、Interceptors:拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解方式都需要先创建再配置)红色加粗的是需要自己创建,黑色的需要配置。
3、配置文件形式创建第一个springmvc的例子步骤:1、创建一个web工程;2、导包;3、在web.xml中配置springmvc的中央控制器DispatcherServlet;request.getScheme();//可以返回当前页面使用的协议,就是“http”request.getServerName();//可以返回当前页面所在的服务器的名字,其实就是一般的localhost,如果是真的部署在服务器上那就是服务器的地址request.getServerPort;//返回的是当前页面所在的服务器使用的端口,一般情况下是8080端口,(自己的机器测试的话就是8080)request.getContextPath;//返回当前页面所在的应用程序的路径,这四个拼装起来,就是当前应用的跟路径了http://localhost:80804、创建controller;需要写.java程序;4.1、写一个类继承AbstractController,自动重写里面方法(与servlet很像);4.2、在springmvc-servlet.xml中配置controller和视图解析器ViewResolver;4.3、Controller中的bean name="/hello.do",这个”/hello.do”将来要作为访问地址的http://localhost:8080/springmvc-1/hello.do5、制作jsp页面。
20150322springmvc课堂笔记(企业重点)
springmvc第二天注解开发高级知识1复习springmvc框架:用户请求url到DispatcherServlet前端控制器,相当于中央调度器,降低系统各组件之间耦合度DispatcherServlet前端控制器通过HandlerMapping根据url找到Handler。
DispatcherServlet前端控制器通过HandlerAdapter处理器适配器执行Handler。
DispatcherServlet前端控制器拿着Handler返回的ModelAndView通过视图解析器ViewResolver去进行视图解析。
视图解析:将程序中写的逻辑视图名,转成真正的视图(springmvc通过view表示各各不同类型的视图)。
DispatcherServlet前端控制器调用View的渲染方法进行视图渲染(将ModelAndView中的Model放到request域)。
要掌握springmvc的注解开发,企业中常用springmvc注解开发。
使用专门注解处理器映射器(RequestMappingHandlerMapping)和处理器适配器(RequestMappingHandlerAdapter)。
<mvc:annotation-driven/>可以代替上边的处理器映射器和适配器的配置。
在Handler(Controller)中定义很多的方法,一个方法通过RequestMapping和url进行映射。
方法返回值:ModelAndView、string(jsp的逻辑视图名)、void(通过response将数据输出成json)方法输入参数(形参):springmvc需要将请求的key/value(串,id=001&type=t002)、解析、绑定到Handler(Controller)中方法的形参上。
springmvc默认支持多类型的参数绑定。
默认支持哪些类型:HttpServletRequest、response、session、Model(用于将数据填充到request域)@requestParam注解:用于绑定单个请求参数,常用于简单类型参数(Integer、String 、Float。
SPRINGMVC第一天课堂笔记
springmvc 第一天 springmvc的基础知识
课程安排:
第一天:springmvc的基础知识
什么是springmvc?
springmvc框架原理(掌握)
前端控制器、处理器映射器、处理器适配器、视图解析器
springmvc入门程序
目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习非注解的处理器映射器、处理器适配器
注解的处理器映射器、处理器适配器(掌握)
springmvc和mybatis整合(掌握)
springmvc注解开发:(掌握)
常用的注解学习
参数绑定(简单类型、pojo、集合类型(明天讲))
自定义参数绑定(掌握)
springmvc和struts2区别
第二天:springmvc的高级应用
参数绑定(集合类型)
数据回显
上传图片
json数据交互
RESTful支持
拦截器
1 springmvc框架
1.1 什么是springmvc
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
springmvc是一个基于mvc的web框架。
Spring框架的MVC设计模式是什么
Spring框架的MVC(Model-View-Controller)设计模式是一种软件设计模式,用于将应用程序的业务逻辑、数据处理和用户界面分离,使得代码更加清晰、可维护和可扩展。
在Spring MVC中,应用程序被分为三个核心组件:Model(模型)、View(视图)和Controller(控制器)。
1.Model(模型):模型是应用程序的数据和业务逻辑的表示。
它负责处理数据的读取、存储和操作,以及业务规则的处理。
在Spring MVC中,模型通常是一个Java对象(JavaBean),它包含了应用程序的数据和业务逻辑。
模型对象可以被多个视图和控制器共享和重用。
2.View(视图):视图是用户界面的呈现部分,负责展示数据给用户,并接收用户的输入。
在Spring MVC中,视图通常是一个JSP(JavaServerPages)页面或Thymeleaf模板等,它根据模型的数据进行渲染和展示。
视图不直接处理业务逻辑或数据访问,而是依赖于模型和控制器来提供数据和交互逻辑。
3.Controller(控制器):控制器是模型和视图之间的协调者,负责接收用户的输入并根据输入调用相应的模型逻辑。
在Spring MVC中,控制器通常是一个Java类,它使用注解(如@Controller、@RequestMapping等)来映射URL请求到特定的处理方法。
控制器将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示。
Spring MVC的设计模式使得应用程序的组件之间解耦,每个组件只关注自己的职责,从而提高了代码的可读性、可维护性和可扩展性。
同时,Spring框架提供了丰富的支持,包括自动配置、依赖注入、异常处理等功能,使得开发者能够更快速地构建健壮的Web应用程序。
SpringMVC学习笔记
SpringMVC学习笔记作者:胡晟源。
QQ:1312837781配置spring提示:1 Spring Tool Suit (STS)2 Hibernate Tools对于JUNO版本的Eclipse 可以在help->Eclipse Marketplace 输入插件的名字在列表中选择插件安装就可以了。
SpringMvc原理图解:导入jar包一:springmvc工作流程。
①.servlet容器初始化一个request请求②.DispatcherServlet分发器负责发送请求到映射器.③.despatcherServlet把请求交给处理器映射Mapping,mapping来寻找需要执行的control④.处理器映射把请求分发给控制器Controler。
⑤.Controler执行完毕后返回ModelAndView(视图解析器)⑥.把ModelAndView返回给dispatcherServlet核心分发器⑦.由于DespatcherServlet不参与具体的处理,所以把modelAndView交给视图解析器。
⑧.视图解析器解析成一个真正的视图,再发给view然后response。
ParameterizableViewController(参数控制器)①.在springmvc-servlet.xml里面加上配置②.通过参数控制器访问页面流程解析:也可以直接在参数控制器里定义name属性,直接通过name属性地址来访问。
如下:但要注意的是:配置文件里必须有BeanNameUrlHandlerMapping情况下,默认映射将会被覆盖;以name属性;来访问将会失败。
命令控制器③.在springmvc里面有如下配置。
④.使用简单url进行访问,参数被封装进javabean。
http://localhost:8080/mysm/comm.do?id=1&userName=zhangsan&password=123&age=13 命令控制器①.首先:springMVC有三个映射器,如果不定义映射Mapping,那么就会使默认:●<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>也就是说:上面这个定义和不定义都是一样的。
SpringMVC视图解析与配置(六)
SpringMVC视图解析与配置(六)视图解析SpringMVC如何解析视图1. 不论控制器返回⼀个String, ModelAndView, View都会转换为 ModelAndView对象, 由视图解析器解析视图, 然后, 进⾏页⾯的跳转.视图和视图解析器1. 请求处理⽅法执⾏完成后, 最终返回⼀个ModelAndView对象. 对于那些返回String, View或Model/Map等类型的处理⽅法, SpringMVC也会在内部将它们装配成⼀个ModelAndView对象, 它包含了逻辑名和模型对象的视图.2. SpringMVC借助视图解析器(ViewResolver)得到最终的视图对象, 最终的视图可以是JSP, 也可能是Excel, JFreeChart等各种表现形式的视图.3. 对于最终究竟采取何种视图对象对模型数据进⾏渲染, 处理器并不关⼼, 处理器⼯作重点聚焦在⽣产模型数据的⼯作上, 从⽽实现MVC的充分解耦.视图1. 视图的作⽤是处理模型数据, 实现页⾯跳转(转发, 重定向)2. 为了实现视图模型和具体实现技术的解耦, Spring 在org.springframework.web.servlet包中定义了⼀个⾼度抽象的View接⼝3. 视图对象由视图解析器负责实例化. 由于视图是⽆状态的, 所以他们不会有线程安全的问题.4. 常⽤的视图实现类视图解析器1. SpringMVC为逻辑视图名的解析提供了不同的策略, 可以在SpringMVC上下⽂中配置⼀种或多种解析策略, 并指定他们之间的先后顺序.每⼀种映射策略对应⼀个具体的视图解析器实现类.2. 视图解析器的作⽤⽐较单⼀: 将逻辑视图解析为⼀个具体的视图对象.3. 所有的视图解析器都必须实现ViewResolver接⼝4. 常见的视图解析器实现类可以选择⼀种视图解析器或混⽤多种视图解析器.每个视图解析器都实现了Ordered接⼝并开放出⼀个order属性, 可以通过order属性指定解析器的优先顺序, order越⼩优先级越⾼.SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进⾏解析, 直到解析成功并返回视图对象, 否则抛出ServletException异常.转发与重定向1. ⼀般情况下, 控制器⽅法返回字符串类型的值会被当成逻辑视图名处理.2. 若返回的字符串中带有forward:或redirect:前缀时, Spring会进⾏特殊处理.将forward:和redirect:当成指⽰符, 其后的字符串作为URL来处理.例如redirect:success.jsp 会完成⼀个到success.jsp的重定向操作.forward:success.jsp 会完成⼀个到success.jsp的转发操作.配置问题SpringMVC指定配置1. 指定配置⽂件位置和名称在web.xml中的<init-param>标签配置.contextConfigLocation是上下⽂配置路径, ⽤来设置SpringMVC配置⽂件的位置及名称.classpath: 前缀后写的是类路径<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC.xml</param-value></init-param>2. 设置servlet的加载时间默认是在第⼀次访问时加载.在<servlet>中使⽤<load-on-startup>标签, 会将servlet的加载时间提前到项⽬启动时.该标签中可以写整数, 但写负整数和0没效果.值越⼩, 优先级越⾼.<load-on-startup>1</load-on-startup>编码过滤器1. 在前端页⾯写⼊中⽂, 传到后端后可能出现乱码问题, 所以需要使⽤编码过滤器来解决2. 编码过滤器必须在web.xml中第⼀个配置.核⼼类是CharacterEncodingFilter要在<filter>的<init-param>中配置encoding属性<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>综合配置web.xml必须先配置编码过滤器<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>配置HiddenHttpMethodFilter过滤器<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>配置前端控制器, 并指定配置⽂件路径conf/springMVC.xml<servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!-- 这个springMVC.xml应该创建在resources⽬录下 --><param-value>classpath:springMVC.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>SpringMVC配置⽂件中整合thymeleaf模板引擎1. 除了要导⼊Spring, SpringMVC必须的依赖, 还需导⼊<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.9.RELEASE</version></dependency>2. 在springMVC.xml中加⼊如下配置<!-- templateResolver的characterEncoding和viewResolver的都要设置成UTF-8中⽂才不会乱码 --><bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="/templates/"></property><property name="suffix" value=".html"></property><property name="characterEncoding" value="UTF-8"></property><property name="order" value="1"></property><property name="templateMode" value="HTML5"></property><!-- 这⾥要设置成false, 否则看不到实时的页⾯数据 --><property name="cacheable" value="false"></property></bean><bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver" ref="templateResolver"></property></bean><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine"></property><property name="characterEncoding" value="UTF-8"></property></bean>3. 这样就能使⽤thymeleaf了.。
springmvc知识点整理
springmvc知识点整理1.Springmvc架构2.Springmvc组件三⼤组件:处理器映射器,处理器适配器,视图解析器处理器映射器:注解式处理器映射器,对类中标记了@ResquestMapping的⽅法进⾏映射,根据@ResquestMapping定义的url匹配@ResquestMapping标记的⽅法,匹配成功返回HandlerMethod对象给前端控制器。
<!-- 配置处理器映射器 --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />处理器适配器:对标记@ResquestMapping的⽅法进⾏适配<!-- 配置处理器适配器 --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />解决办法:SpringMVC使⽤<mvc:annotation-driven>⾃动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter可以在springmvc.xml配置⽂件中使⽤<mvc:annotation-driven>替代注解处理器和适配器的配置。
<!-- 注解驱动 --><mvc:annotation-driven />视图解析器:视图解析器使⽤SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器⽀持JSP视图解析。
<!-- 配置视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 配置逻辑视图的前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 配置逻辑视图的后缀 --><property name="suffix" value=".jsp" /></bean>最终jsp物理地址:前缀+逻辑视图名+后缀3.1简单参数的绑定(@RequestParam)当请求的参数名称和处理器形参名称⼀致时会将请求参数与形参进⾏绑定,若不⼀致,就需要@RequestParamvalue:参数名字,即⼊参的请求参数名字,如value=“itemId”表⽰请求的参数区中的名字为itemId的参数的值将传⼊required:是否必须,默认是true,表⽰请求中⼀定要有相应的参数,否则将报错TTP Status 400 - Required Integer parameter 'XXXX' is not presentdefaultValue:默认值,表⽰如果请求中没有同名参数时的默认值public String queryItemById(@RequestParam(value = "itemId", required = true, defaultValue = "1") Integer id,ModelMap modelMap) {}这⾥需要传⼊的是id,实际传⼊的是itemId,需要⽤@RequestParam转换⼀下3.2pojo参数绑定如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使⽤简单类型接受数据,也可以使⽤pojo接收数据,但是pojo对象中的属性名和表单中input的name属性⼀致。
[Java]SpringMVC工作原理之三:ViewResolver
[Java]SpringMVC⼯作原理之三:ViewResolver⼀、ViewResolver根据视图的名称将其解析为 View 类型的视图,如通过 ModelAndView 中的视图名称将其解析成 View,View 是⽤来渲染页⾯的,也就是将Model 填⼊模板中,⽣成 html 或其他格式的⽂件。
可以设置多个解析策略,如可以根据 JSP 来解析,或者按照 Velocity 模版解析,如果设置了多个解析策略则可以通过 order 属性来设定其优先级,数值越⼩优先级越⾼,前⾯的视图解析器解析后就不会让后⾯的继续解析。
默认的解析策略是 InternalResourceViewResolver,按照JSP 页⾯来解析。
ViewResolver 接⼝中的⽅法如下:View resolveViewName(String viewName, Locale locale);1 带有缓存的 ViewResolverAbstractCachingViewResolver 是带有缓存的 ViewResolver,它每次解析时先从缓存⾥查找,如果找到视图就返回,没有就创建新的视图,且创建新视图的⽅法由其⼦类实现,具体代码如下所⽰:@Overridepublic View resolveViewName(String viewName, Locale locale) throws Exception {// 是否启⽤缓存,可通过setCache()⽅法或setCacheLimit()⽅法开启缓存,是⼀个ConcurrentHashMap,默认缓存⼤⼩1024if (!isCache()) {return createView(viewName, locale);} else {// 得到 view 在缓存中的 key 值Object cacheKey = getCacheKey(viewName, locale);View view = this.viewAccessCache.get(cacheKey);// 如果没有找到 view 则创建,采⽤双重校验的⽅式进⾏安全创建if (view == null) {synchronized (this.viewCreationCache) {view = this.viewCreationCache.get(cacheKey);if (view == null) {// 具体的创建⽅式由⼦类实现view = createView(viewName, locale);if (view == null && this.cacheUnresolved) {view = UNRESOLVED_VIEW;}if (view != null) {this.viewAccessCache.put(cacheKey, view);this.viewCreationCache.put(cacheKey, view);}}}}return (view != UNRESOLVED_VIEW ? view : null);}}1.1 ResourceBundleViewResolverResourceBundleViewResolver 根据 views.properties ⽂件来解析视图,这个⽂件位于 classpath 路径下,使⽤⽅式如下:<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"><!-- 设定属性⽂件名为views --><property name="basename" value="views"></property></bean>1.2 XmlViewResolverXmlViewResolver 根据 xml ⽂件来解析视图,使⽤⽅式如下:<bean class="org.springframework.web.servlet.view.XmlViewResolver"><property name="location"><value>/WEB-INF/spring-views.xml</value></property></bean>1.3 UrlBasedViewResolverUrlBasedViewResolver 提供了拼接 URL 的⽅式来解析视图,通过 prefix 属性拼接⼀个前缀,通过 suffix 属性拼接⼀个后缀,就得到了视图的 URL。
Spring MVC学习指南
Spring MVC学习指南以下这个学习案例是我最近学习Spring MVC时跟从一本书上的示例,原文中的示例代码有一些小错误,不过我在调试的过程中已经给予了修正,如还有其它错误,还请各位批评指正。
对于现有较成熟的Model-View-Control(MVC)框架而言,其解决的主要问题无外乎下面几部分:1.将Web页面中的输入元素封装为一个(请求)数据对象。
2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3.逻辑处理单元完成运算后,返回一个结果数据对象。
4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
各个MVC 实现固然存在差异,但其中的关键流程大致如上。
结合一个实例,我们来看看这几个关键流程在Spring MVC框架中的处理手法。
下面的实例,实现了一个常见的用户登录逻辑,即用户通过用户名和密码登录,系统对用户名和密码进行检测,如果正确,则在页面上显示几条通知信息。
如果登录失败,则返回失败界面。
(示例中,表示层以JSP2.0实现。
)出于简洁考虑,这里的“用户名/密码”检测以及通知信息的生成均在代码中以硬编码实现。
首先来看登录界面:对应的index.html:<html><body><form method="POST" action="login.do"><p align="center">登录</p><br>用户名:<input type="text" name="username" ><br>密码:<input type="password" name="password" ><br><p><input type="submit" value="提交" name="B1"> <input type="reset" value="重置" name="B2"> </p></form></body></html>很简单的一个登录界面,其中包含了一个用以输入用户名密码的form,针对此form的提交将被发送到"login.do"MVC 关键流程的第一步,即收集页面输入参数,并转换为请求数据对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring MVC 学习笔记Viewresol和View
Spring MVC使用ViewResolver来根据controller中返回的view名关联到具体的View对象。
使用View对象来渲染返回值以生成最终的视图,如html,json或pdf等。
Spring MVC中,通过在servlet context配置文件中配置的ViewResolver Bean对象来注册ViewResolver对象,其在spring mvc的dispatcherServlet中的使用过程其实和之前提到的HandlerMapping和HanderAdapter 类似。
DispatcherServlet初始化时,首先根据当前context中注册的Beans中实现了ViewResolver接口的Bean列表来生成ViewResolver对象列表,并根据这些ViewResolver中的order属性进行排序,如果没配置order属性则此ViewResolver的优先级最低。
当HandlerAdapter调用完毕handler method返回view对象时,dispatcherServlet将根据当前已经注册了的ViewResolver列表的顺序去调用其中的resolveViewName方法,以根据viewName找到实际对应的View对象,并根据第一个返回的View对象中的render方法来生成最终的用户视图。
与HandlerMapping和HanderAdapter类似,DispatcherServlet也提供了参数来允许用户指定是否只加载自己的ViewResolver,当属性detectAllViewResolvers设置为false时,则spring mvc将查找名为viewResolver 的bean 来作为当前唯一的ViewResolver。
<init-param>
<param-name>detectAllViewResolvers</param-name>
<param-value>false</param-value>
</init-param>
UrlBasedViewResolver与InternalResourceViewResolver
之前的例子中,为将返回的viewname映射到对应的jsp上,在servlet context 配置文件中是这么定义的
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
这个定义的含义是指UrlBasedViewResolver将使用JstlView对象来渲染结果,并将handler method返回的modelAndView基础上,加上目录前缀/WEB-INF/jsp/和文件名称后缀.jsp。
例如结果返回的viewName为helloworld,则对应的实际jsp为/WEB-INF/jsp/helloworld.jsp
当返回的viewName的前缀为forward:时,spring mvc将结果通过forward的方式转到对应的视图,例如forward:helloworld。
这也是spring mvc缺省的使用模式。
当返回的viewName的前缀为redirect:时,spring mvc将结果通过redirect的方式转到对应的视图。
例如redirect:helloworld
InternalResourceViewResolver为UrlBasedViewResolver的子类,它将InternalResourceView作为缺省的View类,如果当前classpath中有jstl的jar包时则使用JstlView作为缺省的view来渲染结果。
因此以下使用InternalResourceViewResolver的定义应该和之前使用UrlBasedViewResolver定义的viewresolver的作用相同。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
除此之外,InternalResourceViewResolver还提供了
alwaysInclude属性来要求返回的结果使用include方式而不是forward方式exposeContextBeansAsAttributes属性以将当前spring 环境中的beans作为request attritbutes来暴露到页面上。
exposedContextBeanNames属性来限制能够暴露到页面上的spring bean的名称列表。