当前位置: 首页 > news >正文

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

目录

视图

默认视图

视图机制原理 

自定义视图

请求转发与重定向

静态资源处理


视图

每个视图解析器都实现了 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可以去解析自定义的视图

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

<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有一定的冲突

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

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

方法二 

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

<mvc:annotation-driven/>
<mvc:resources mapping="/static/**" location="/static/" />

http://www.lryc.cn/news/502554.html

相关文章:

  • 优选算法——分治(快排)
  • 【Linux系统】文件系统
  • javaweb的基础
  • 家里养几条金鱼比较好?
  • 写作词汇积累:差池、一体两面、切实可行极简理解
  • 移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX
  • LEED绿色建筑认证最新消息
  • SpringBoot中集成常见邮箱中容易出现的问题
  • webstorm开发uniapp(从安装到项目运行)
  • C# 探险之旅:第七节 - 条件判断(三元判断符):? : 的奇妙冒险
  • FlinkCDC实战:将 MySQL 数据同步至 ES
  • debug小记
  • Qt C++ 显示多级结构体,包括结构体名、变量名和值
  • 【JAVA】旅游行业中大数据的使用
  • 【AI+网络/仿真数据集】1分钟搭建云原生端到端5G网络
  • 微服务-01【续】
  • 测试工程师八股文01|Linux系统操作
  • 【Qt】qt基础
  • UniScene:Video、LiDAR 和Occupancy全面SOTA
  • TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
  • 03篇--二值化与自适应二值化
  • 基于python的一个简单的压力测试(DDoS)脚本
  • 基于 Spring Boot 实现图片的服务器本地存储及前端回显
  • 深入 TCP VJ-Style
  • go高性能单机缓存项目
  • 数据结构绪论
  • 前端开发常用四大框架学习难度咋样?
  • OWASP 十大安全漏洞的原理
  • 论文 | ChunkRAG: Novel LLM-Chunk Filtering Method for RAG Systems
  • ORACLE SQL思路: 多行数据有相同字段就合并成一条数据 分页展示