InternalResourceViewResolver和ResourceBundleViewResolver的区别

首先二者都是视图解析器:

下面先谈谈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文件的配置举例:



  1.   a. class=org.springframework.web.servlet.view.JstlView
  2.   a.url=/WEB-INF/jsp/a.jsp
  3.   b. class=org.springframework.web.servlet.view.JstlView
  4.   b.url=/WEB-INF/jsp/b.jsp







  1. a. class=org.springframework.web.servlet.view.JstlView
  2. a.url=/WEB-INF/jsp/a.jsp
  3. b. class=org.springframework.web.servlet.view.JstlView
  4. b.url=/WEB-INF/jsp/b.jsp

猜你喜欢

转载自blog.csdn.net/jin2111843364/article/details/81064878