SpringMVC中的视图
1、常见视图组件
- InternalResourceView:内部资源视图(Spring MVC框架内置的,专门为
JSP模板语法
准备的,也是为转发准备的) - RedirectView:重定向视图(Spring MVC框架内置的,用来完成重定向效果)
- ThymeleafView:Thymeleaf视图(第三方的,为
Thymeleaf模板语法
准备的) - FreeMarkerView:FreeMarker视图(第三方的,为
FreeMarker模板语法
准备的) - VelocityView:Velocity视图(第三方的,为
Velocity模板语法
准备的) - PDFView:PDF视图(第三方的,专门用来生成pdf文件视图)
- ExcelView:Excel视图(第三方的,专门用来生成excel文件视图)
2、SpringMVC视图支持配置的
<!--视图解析器-->
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
<!--作用于视图渲染的过程中,可以设置视图渲染后输出时采用的编码字符集-->
<property name="characterEncoding" value="UTF-8"/>
<!--如果配置多个视图解析器,它来决定优先使用哪个视图解析器,它的值越小优先级越高-->
<property name="order" value="1"/>
<!--当 ThymeleafViewResolver 渲染模板时,会使用该模板引擎来解析、编译和渲染模板-->
<property name="templateEngine">
<bean class="org.thymeleaf.spring6.SpringTemplateEngine">
<!--用于指定 Thymeleaf 模板引擎使用的模板解析器。模板解析器负责根据模板位置、模板资源名称、文件编码等信息,加载模板并对其进行解析-->
<property name="templateResolver">
<bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
<!--设置模板文件的位置(前缀)-->
<property name="prefix" value="/WEB-INF/templates/"/>
<!--设置模板文件后缀(后缀),Thymeleaf文件扩展名不一定是html,也可以是其他,例如txt,大部分都是html-->
<property name="suffix" value=".html"/>
<!--设置模板类型,例如:HTML,TEXT,JAVASCRIPT,CSS等-->
<property name="templateMode" value="HTML"/>
<!--用于模板文件在读取和解析过程中采用的编码字符集-->
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
</bean>
以上的配置表明当前SpringMVC框架使用的视图View是Thymeleaf的。
如果你需要换成其他的视图View,修改以上的配置即可。这样就可以非常轻松的完成视图View的扩展。
这种设计是完全符合OCP开闭原则的。视图View和框架是解耦合的,耦合度低扩展能力强。视图View可以通过配置文件进行灵活切换。
3、实现视图机制的核心类与接口
3.1 DispatcherServlet:前端控制器
该类负责接收前端请求,更具对应的路径找到对应的处理器方法,并且执行处理器方法,然后返回一个ModelAndView对象,随后进行视图处理。
3.2 ViewResolver接口:视图解析器接口
这个接口主要功能是将逻辑视图名称转换为物理视图名称,并且返回一个View对象,核型方法为View resolver接口
3.3 View接口:视图接口
将模板语法字符串转换为html代码,并且将代码响应给浏览器,核心方法为void render(@NUllable Map<String,?> model,HttpServlerRequest request,HttpServletResponse response) throw Exception
4、实现文字描述:
假设我们SpringMVC中使用了Thymeleaf作为视图。
第一步:浏览器发送请求给web服务器
第二步:Spring MVC中的DispatcherServlet接收到请求
第三步:DispatcherServlet根据请求路径分发到对应的Controller
第四步:DispatcherServlet调用Controller的方法
第五步:Controller的方法处理业务并返回一个逻辑视图名
给DispatcherServlet
第六步:DispatcherServlet调用ThymeleafViewResolver的resolveViewName方法,将逻辑视图名
转换为物理视图名
,并创建ThymeleafView对象返回给DispatcherServlet
第七步:DispatcherServlet再调用ThymeleafView的render方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终的渲染。
假设我们SpringMVC中使用了JSP作为视图。
第一步:浏览器发送请求给web服务器
第二步:Spring MVC中的DispatcherServlet接收到请求
第三步:DispatcherServlet根据请求路径分发到对应的Controller
第四步:DispatcherServlet调用Controller的方法
第五步:Controller的方法处理业务并返回一个逻辑视图名
给DispatcherServlet
第六步:DispatcherServlet调用InternalResourceViewResolver
的resolveViewName
方法,将逻辑视图名
转换为物理视图名
,并创建InternalResourceView
对象返回给DispatcherServlet
第七步:DispatcherServlet再调用InternalResourceView
的render
方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终的渲染。
5.mcv:view-controller&mvc:annotation-driven
<mvc:view-controller>
配置用于将某个请求映射到特定的视图上,即指定某一个 URL 请求到一个视图资源的映射,使得这个视图资源可以被访问。它相当于是一个独立的处理程序,不需要编写任何 Controller,只需要指定 URL 和对应的视图名称就可以了。
一般情况下,<mvc:view-controller>
配置可以替代一些没有业务逻辑的 Controller,例如首页、错误页面等。当用户访问配置的 URL 时,框架将直接匹配到对应的视图,而无需再经过其他控制器的处理。
<mvc:view-controller>
配置的格式如下:
<mvc:view-controller path="/如何访问该页面" view-name="对应的逻辑视图名称" />
其中:
path
:被映射的 URL 路径。view-name
:对应的逻辑视图名称。
例如,配置首页的映射:
<mvc:view-controller path="/" view-name="index" />
上述配置将会匹配上访问应用程序的根路径,如:http://localhost:8080/。当用户在浏览器中访问该根路径时,就会直接渲染名为 index
的视图。
在SpringMVC中,如果在springmvc.xml文件中配置了 <mvc:view-controller>
,就需要同时在springmvc.xml文件中添加如下配置:
<mvc:annotation-driven/>
该配置的作用是:启用Spring MVC的注解。
如果没有以上的配置,Controller就无法访问到。访问之前的Controller会发生 404 问题。
5、访问静态资源
一个项目可能会包含大量的静态资源,比如:css、js、images等。
由于我们DispatcherServlet的url-pattern配置的是“/”,之前我们说过,这个"/"代表的是除jsp请求之外的所有请求,也就是说访问应用中的静态资源,也会走DispatcherServlet,这会导致404错误,无法访问静态资源,如何解决,两种方案:
- 使用默认 Servlet 处理静态资源
- 使用
mvc:resources
标签配置静态资源处理
这两种方式都可以。自行选择。
5.1 使用默认Servlet处理静态资源
在tomcat中有一个DefaultServlet
可以帮助我们处理静态资源但是需要开启一下
需要在SpringMVC的配置文件中加一个配置开启。
<!-- 开启注解驱动 -->
<mvc:annotation-driven />
<!--开启默认Servlet处理-->
<mvc:default-servlet-handler>
开启之后,发送的静态请求会先走DispatcherServlet
,请求失败后会走DefaultServlet
,随后就可以访问静态资源了。
5.2 使用mvc:resource
标签处理静态资源
访问静态资源,也可以在springmvc.xml文件中添加如下的配置:
<!-- 开启注解驱动 -->
<mvc:annotation-driven />
<!-- 配置静态资源处理 -->
<mvc:resources mapping="/static/**" location="/static/" />
表示凡是请求路径是"/static/"开始的,都会去"/static/"目录下找该资源。
注意:要想使用 <mvc:resources>
配置,必须开启注解驱动 `<mvc:annotation-driven /
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术