视图、转发与重定向、静态资源处理

目录

视图

默认视图

视图机制原理

自定义视图

请求转发与重定向

静态资源处理


视图

每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性

可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高

默认是最低优先级,Integer.MAX_VALUE

Controller -> 视图解析器(mvc提供) -> 视图 -> 结果页面

默认视图

默认视图交给InternalResourceViewResolver视图解析器来处理

默认视图解析器一旦执行,就不会执行自定义视图解析器

需要手动配置一下

最后返回的路径直接拼接:"prefix"+name+"suffix"

视图机制原理

设我们SpringMVC中使用了JSP作为视图。

第一步:浏览器发送请求给web服务器

第二步:Spring MVC中的DispatcherServlet接收到请求

第三步:DispatcherServlet根据请求路径分发到对应的Controller 第四步:DispatcherServlet调用Controller的方法

第五步:Controller的方法处理业务并返回一个逻辑视图名给DispatcherServlet

第六步:DispatcherServlet调用InternalResourceViewResolverresolveViewName方法,将逻辑视图名转换为物理视图名,并创建InternalResourceView对象返回给DispatcherServlet

第七步:DispatcherServlet再调用InternalResourceViewrender方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终的渲染。

自定义视图

1、BeanNameViewResolver可以去解析自定义的视图

配置优先级,比默认解析器优先级高

XML 复制代码
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"></bean>

2、继承

MyView继承了AbstractView, 就可以作为一个视图使用

@Component(value = "myView"),该视图会注入到容器中, 名字是myView

return "myView"的底层实现:

1、在容器找id=myView

2、是否是View.class类型

3、return getBean("id",View.class),以接口形式返回

4、视图渲染,执行自定义视图的方法,跳转到结果页面

请求转发与重定向

请求转发forward,重定向redirect

如果都不写,默认请求转发, 默认或自定义视图****来处理

访问WEB-INF下面的资源必须请求转发(内部跳转到WEB-INF)

**forward或redirect:/路径,**会在服务器解析,自动拼接上工程路径(比如/mvc)

比如:工程路径:/mvc

return "forward:/WEB-INF/pages/login_ok.jsp"

服务器 解析成 /mvc/login_ok.jsp 给浏览器

第一个 / 又会在浏览器 解析成 http://localhost:8080

变成http://localhost:8080/mvc/login_ok.jsp

forward底层会创建 InternalResourceView视图对象
redirect底层会创建 RedirectView视图对象

静态资源处理

未在web.xml中配置映射,如果在springmvc配置文件中设置<url-pattern>/</url-pattern>,会替代tomcat中的default导致所有的静态资源都给中央控制器来处理,而不是tomcat,前端控制器没有访问静态资源的能力,所以所有静态资源都是404

方法一

在springmvc配置文件加入

mvc:resources和@RequestMapping有一定的冲突

XML 复制代码
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

开启默认Servlet处理之后,mvc会在容器创建DefaultServletHttpRequestHandler处理器对象,对进入DispatcherServlet的URL进行筛查,如果是静态资源的请求,交给Tomcat的default来处理

方法二

将images、html、js文件夹放入webapp/static目录下

XML 复制代码
<mvc:annotation-driven/>
<mvc:resources mapping="/static/**" location="/static/" />
相关推荐
逸狼2 小时前
【JavaEE进阶】Spring MVC(4)-图书管理系统案例
spring·java-ee·mvc
小马爱打代码19 小时前
Spring MVC 的核心以及执行流程
java·spring·mvc
seabirdssss21 小时前
重构测试项目为spring+springMVC+Mybatis框架
java·spring·重构·mvc·mybatis
神仙别闹1 天前
基于Java(JSP)+MySQL设计与实现的 MVC 鲜花订购系统
java·mysql·mvc
逸狼2 天前
【JavaEE进阶】Spring MVC(2)
spring·java-ee·mvc
憶巷3 天前
深入剖析Spring MVC
java·spring·mvc
gywl5 天前
Spring Web MVC入门
spring·json·mvc·注解·cookie·session
zhyhgx5 天前
应用分层、三层架构和MVC架构
架构·mvc
天马37986 天前
Asp.Net Core MVC 中级开发教程
后端·asp.net·mvc·开发教程
zfj3216 天前
Spring MVC Streaming and SSE Request Processing& SSE可以实现chatgpt一次请求分批次响应的效果
java·spring·mvc