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

目录

视图

默认视图

视图机制原理

自定义视图

请求转发与重定向

静态资源处理


视图

每个视图解析器都实现了 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/" />
相关推荐
我来整一篇19 小时前
[Razor] ASP.NET Core MVC 前端组件快速使用总结
前端·asp.net·mvc
lang201509281 天前
Spring MVC文件上传:commons-fileupload解析全流程
java·spring·mvc
岁岁种桃花儿1 天前
Spring Boot核心注解详解:@ResponseBody深度解析与实战
spring boot·spring·mvc
xiaolyuh1234 天前
Spring MVC Bean 参数校验 @Validated
java·spring·mvc
heartbeat..5 天前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
自在极意功。6 天前
简单介绍SpringMVC
java·mvc·springmvc·三层架构
威桑6 天前
深入理解 MVC 模式的优缺点
系统架构·mvc
alonewolf_996 天前
Spring MVC启动与请求处理全流程解析:从DispatcherServlet到HandlerAdapter
java·spring·mvc
廋到被风吹走6 天前
【Spring】Spring MVC核心原理与RESTful最佳实践详解
spring·mvc·restful
alonewolf_997 天前
Spring MVC重点功能底层源码深度解析
java·spring·mvc