Spring配置多个视图解析器

在开发过程中,我们再做页面处理时,有时候可能需要两种或者两种以上的视图解析方式,比如 jsp、html、jstl等等,SpringMVC默认只配置一种视图解析方式,但是却提供了配置多视图解析的方式。

13566833-0321fc064ae18088.png

结构.png

网上提供的很多办法,都是说修改order 来设置解析器的优先级,但是经尝试,发现此办法行不通,html和jsp配置同样的优先级,jsp视图解析器还是无法解析jsp,而且网上的很多配置文件写法大有问题,所以先贴下配置部分:

    <!-- 配置Html试图解析器 -->
    <bean id="htmlViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="0" />
        <property name="viewClass"
            value="com.ccb.ipsp.controller.todo.HtmlResourceView" />
        <property name="prefix" value="/public/bstapp/" />
        <property name="suffix" value=".html"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean> 
    
    <!-- Jsp视图解析器 -->
    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="1" />
        <!-- 如果配置的有html视图解析器,不能用jstl的那个 -->
<!--    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> -->
        <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp"></property>
    </bean>

我们细看,可以发现htmlViewResolver视图解析器的viewClass值有些奇怪,这是因为我们需要新建一个html的解析器,该解析器要继承 InternalResourceView 并且重写 checkResource方法,代码:

package com.ccb.ipsp.controller.todo;

import java.io.File;
import java.util.Locale;

import org.springframework.web.servlet.view.InternalResourceView;

public class HtmlResourceView extends InternalResourceView{
    @Override
    public boolean checkResource(Locale locale){
        File file = new File(this.getServletContext().getRealPath("/")+getUrl());
        return file.exists();
    }
}

经此配置,就可检验是否两种视图解析器都配置成功啦,TestView代码:

package com.ccb.ipsp.controller.todo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.ccb.ipsp.model.todo.Url;

/**
 * 界面测试请求Test
 * @author guxf
 *
 */

@Controller
@RequestMapping("/tooo")
public class ToDoView {
    
    @ResponseBody
    @RequestMapping(value = "/regi") // 办事通用户查询接口
    public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        ModelAndView mv = null;
        try {
            System.err.println("888888");
            mv = new ModelAndView();
            Url url = new Url();
            url.setUrl("www.baidu.com");
            mv.addObject("url", url);
            System.err.println("跳转regist————");
            mv.setViewName("regist");   // 出现异常则跳转错误页面
        } catch (Exception e) {
            mv = new ModelAndView();
            System.err.println("跳转errorpage————");
            mv.setViewName("errorpage");    // 出现异常则跳转错误页面
        }
        return mv;
    }
    
    @ResponseBody
    @RequestMapping(value = "/page") // 办事通用户查询接口
    public ModelAndView pageView(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        ModelAndView mv = null;
        try {
            System.err.println("999999");
            mv = new ModelAndView();
            System.err.println("跳转page————");
            mv.setViewName("page1");    // 出现异常则跳转错误页面
        } catch (Exception e) {
            mv = new ModelAndView();
            System.err.println("跳转errorpage————");
            mv.setViewName("errorpage");    // 出现异常则跳转错误页面
        }
        
        return mv;
    }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值