首先二者都是视图解析器:
下面先谈谈InternalResourceViewResolver的简单用法.
在SpringMvc的核心配置文件中,会有这样一段配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
通过查看源代码发现:
InternalResourceViewResolver类继承UrlBasedViewResolver,而UrlBasedViewResolver类有方法
public void setPrefix(String prefix) {
this.prefix = (prefix != null ? prefix : "");
}
和
public void setSuffix(String suffix) {
this.suffix = (suffix != null ? suffix : "");
}
所以,当你在视图解析的时候:
比如说:下面一段代码.
@RequestMapping("/showAllBooks")
public String showAllBooks(Model model){
List<Book> books = bookService.showAllBooks();
//将数据放到Model对象中,Model对象的内部域封装采用的是request域
model.addAttribute("books", books);
return "showAllBooks"; //SpringMvc的特殊格式的写法,字符串表示要返回的页面的有效地址书写
}
上面的 return "showAllBooks"就表示页面要跳转到/jsp/showAllBooks.jsp页面.
另外一个类ResourceBundleViewResolver,它默认读取的是类路径下一个资源文件.该资源文件,有你来指定.该文件的后缀为
.properties
指定资源文件的原理:
ResourceBundleViewResolver类中有个方法:
public void setBasename(String basename) {
setBasenames(basename);
}
例如:
在SpringMvc的核心配置文件中这样配置.
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="viewBean"/>
<property name="order" value="1"/>
</bean>
为basename属性传递的值为viewBean,这个时候,当spring创建该类时,会在类路径下找一个叫viewBean.properties的文件.
而这个文件的文件名就是你刚才为basename传递的参数.
viewBean.properties文件的配置举例:
-
a. class=org.springframework.web.servlet.view.JstlView
-
a.url=/WEB-INF/jsp/a.jsp
-
b. class=org.springframework.web.servlet.view.JstlView
-
b.url=/WEB-INF/jsp/b.jsp
-
a. class=org.springframework.web.servlet.view.JstlView
-
a.url=/WEB-INF/jsp/a.jsp
-
b. class=org.springframework.web.servlet.view.JstlView
-
b.url=/WEB-INF/jsp/b.jsp