SpringMVC视图解析器ViewResovlet问题

SpringMVC的视图解析器有大概以下几类,以下表示了继承关系

AbstractCachingViewResolver

|----------UrlBasedViewResolver

                  |----------InternalResourceViewResolver

|----------XmlViewResolver

|---------ResourceBundleViewResolver

 

在使用过程中遇到一个问题就是打算将jsp分成两类一类是mange管理类的,还有一个就是普通的,所以打算将之分别放在

/WEB-INF/manage下和/WEB-INF/view下

于是自然就要配置两个解析器,如下

<bean id="jspViewResolver1" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="1"></property>
        <property name="prefix" value="/WEB-INF/manage/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

<bean id="jspViewResolver2" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="2"></property>
        <property name="prefix" value="/WEB-INF/view/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

就是这样,order也设置好了(较小的具有较高的优先级),讲道理应该是按照链式查找调用的,但是在访问的时候,/mange下的都能访问到,但是/view下的jsp文件都是404错误

查询了大量的资料,发现问题出现在UrlBasedViewResolver类身上,查阅源码后发现问题在下面:

protected AbstractUrlBasedView buildView(String viewName) throws Exception { 

AbstractUrlBasedView view = (AbstractUrlBasedView) BeanUtils.instantiateClass(getViewClass()); 

view.setUrl(getPrefix() + viewName + getSuffix()); 

  String contentType = getContentType(); 

if (contentType != null) { 

        view.setContentType(contentType); 

    } 

    view.setRequestContextAttribute(getRequestContextAttribute()); 

    view.setAttributesMap(getAttributesMap()); 

return view; 

并没有看到有试图去找(getPrefix() + viewName + getSuffix())对应的文件,所以并不会返回null,所以并不会跳过次ViewResovler查找下一个,所以

在定义多一个  ViewResovler的时候,一定把UrlBasedViewResolver及其子类对应的ViewResovler放在最后(优先级靠后)。

(本打算自己定义一个Resovler继承上面的UrlBasedViewResolver,然后重写上面的方法,但担心自己水平不够会出现什么猫腻)最终项目采用的解决方案是

只选用一个解析器,并把prefix的value设置成value="/WEB-INF/”

在controller中返回的时候带上文件名return “manage/index”.

参考:

http://www.iteye.com/problems/76107

http://haohaoxuexi.iteye.com/blog/1770554

spring源码地址

https://github.com/spring-projects/spring-framework

转载于:https://my.oschina.net/eqshen/blog/683748

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值