Spring配置多个视图解析器
2019-04-03 本文已影响0人
莫问以
在开发过程中,我们再做页面处理时,有时候可能需要两种或者两种以上的视图解析方式,比如 jsp、html、jstl等等,SpringMVC默认只配置一种视图解析方式,但是却提供了配置多视图解析的方式。
![](https://img.haomeiwen.com/i13566833/0321fc064ae18088.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;
}
}