美文网首页Spring
Spring配置多个视图解析器

Spring配置多个视图解析器

作者: 莫问以 | 来源:发表于2019-04-03 19:01 被阅读0次

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

    结构.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;
        }
        
    }
    

    相关文章

      网友评论

        本文标题:Spring配置多个视图解析器

        本文链接:https://www.haomeiwen.com/subject/jnttiqtx.html