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

目录

视图

默认视图

视图机制原理

自定义视图

请求转发与重定向

静态资源处理


视图

每个视图解析器都实现了 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/" />
相关推荐
Cloud-Future16 小时前
Spring MVC 处理请求的流程
java·spring·mvc
optimistic_chen2 天前
【Java EE进阶 --- SpringBoot】Spring IoC
spring boot·后端·spring·java-ee·mvc·loc
wuk9982 天前
在Spring MVC中使用查询字符串与参数
java·spring·mvc
原来是好奇心4 天前
深入剖析Spring Boot中Spring MVC的请求处理流程
spring boot·spring·mvc
xkroy4 天前
创建Spring MVC和注解
学习·spring·mvc
期待のcode4 天前
SpringMVC的请求接收与结果响应
java·后端·spring·mvc
Pure03194 天前
Spring MVC BOOT 中体现的设计模式
spring·设计模式·mvc
The Sheep 20234 天前
.NetCore MVC
mvc·.netcore
YDS8294 天前
SpringMVC —— Spring集成web环境和SpringMVC快速入门
java·spring·mvc·springmvc
xkroy5 天前
Sping Web MVC入门
mvc