Spring MVC之视图

InternalResourceViewResolver

对于视图这一块相信大家每天都在用,而且也都觉得用的很方便,而且用的最多的视图解析器应该都是这家伙:
org.springframework.web.servlet.view.InternalResourceViewResolver, 这一点我跟大家都是一样的。以前也 从没想着说去了解下其原理是什么,今天没事就看了下源码,发现没什么好说的,还是随便总结下吧,看源码的过程就不贴了。

首先我们的方法无论返回的是String,ModelAndView还是View类型,在DispatcherServlet中都会给你转换为ModelAndView进行操作,这也是解析视图的第一步,统一操作。然后将页面带过来的参数放在一个叫做mv的ModelAndView对象中通过一步步的解析(这些步骤其实就是各种解析可看可不看 ),最后到InternalResourceViewResolver中通过转发到达目标页面。总结得不好,说不出来意思,唉语文太差

JstlView

当然除了这个解析器外还有一些别的比如JstlView,这个解析器只需要我们将jstl的包导入上面所说的mv就会自动变成JstlView,也没什么好说的。

自定义视图

有时候我们可能会用到自定义视图,此时我们就需要
org.springframework.web.servlet.view.BeanNameViewResolver这个视图解析器。通过源码我们可以看到这个解析器是直接从MVC容器中通过视图名来解析的,所以我们需要把自定义的视图放到容器中去。而方法方法返回的就是自定义视图在容器中的名字,得一一对应。在配置文件中BeanNameViewResolver配置如下

<!--自定义视图的视图解析器  -->
<!--order值越小视图解析器的优先级越高  -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="100"></property>
        </bean>

这里的order是用来决定视图解析器的优先级的因为通常我们都还配了InternalResourceViewResolver,而他的order是最大值所以只要配了这个属性就行。
接下来是自定义视图类我们需要实现VIew类

@Component
public class MyView implements View {

    @Override
    public String getContentType() {
        return "text/html";  //返回内容类型
    }

    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest arg1,
            HttpServletResponse arg2) throws Exception {
            arg2.getWriter().print("now time:"+new Date());

    }

}

这里在页面上打印了当前时间,这样自定义视图就ok了

mvc:view-controller

至于这个标签是让我们直接访问物理视图文件即jsp文件而不经过方法,用法很简单

<mvc:view-controller path="/success1" view-name="success"/>

这样就ok了,当你输入localhost:8080/SpringMvc/success1就会直接去访问success.jsp

使用这个标签时必须得加上

<mvc:annotation-driven></mvc:annotation-driven>

否则其他需要经过方法的访问会出错

以上有错误的欢迎指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhjwyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值