InternalResourceViewResolver 书店jsp展示业务案例
InternalResourceViewResolver
用于解析内部资源(如 Servlet 容器中的 JSP 页面)的视图解析器。以下是使用 InternalResourceViewResolver
的一个真实案例,包括业务场景、核心代码讲解以及配置。
类结构设计
场景案例:
一个在线书店的 Web 应用程序,该应用程序需要展示书籍列表、书籍详情和购物车等功能。你决定使用 JSP 页面作为视图技术来呈现这些信息。
1. 定义 JSP 页面:
创建 JSP 页面来展示书籍列表和详情。
/WEB-INF/views/bookList.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Book List</title>
</head>
<body>
<h1>Books</h1>
<ul>
<c:forEach var="book" items="${books}">
<li>${book.title} by ${book.author}</li>
</c:forEach>
</ul>
</body>
</html>
/WEB-INF/views/bookDetails.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Book Details</title>
</head>
<body>
<h1>${book.title}</h1>
<p>Author: ${book.author}</p>
<p>Price: ${book.price}</p>
<!-- 其他书籍详情 -->
</body>
</html>
2. 配置 InternalResourceViewResolver
:
在 Spring 配置中设置 InternalResourceViewResolver
。
Java 配置:
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
XML 配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:view-resolvers>
<mvc:internal-resource-view-resolver prefix="/WEB-INF/views/" suffix=".jsp"/>
</mvc:view-resolvers>
<!-- 其他Spring MVC配置 -->
</beans>
3. 控制器:
创建控制器来处理书籍列表和详情的请求,并返回相应的视图名称。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.ui.Model;
import java.util.Arrays;
@Controller
public class BookController {
@GetMapping("/books")
public String listBooks(Model model) {
model.addAttribute("books", Arrays.asList(new Book("Java Basics", "Author A", 29.99),
new Book("Spring Framework", "Author B", 39.99)));
return "bookList";
}
@GetMapping("/books/{title}")
public String getBookDetails(@PathVariable String title, Model model) {
Book book = findBookByTitle(title); // 假设这个方法查找书籍
model.addAttribute("book", book);
return "bookDetails";
}
private Book findBookByTitle(String title) {
// 实现根据标题查找书籍的逻辑
return new Book(title, "Author", 12.99);
}
}
4. 模型对象(Book.java):
public class Book {
private String title;
private String author;
private double price;
public Book(String title, String author, double price) {
this.title = title;
this.author = author;
this.price = price;
}
// 标准的 getter 和 setter
}
总结:
InternalResourceViewResolver
允许开发者将控制器的返回值解析为内部资源,如 JSP 页面。- 它简化了视图解析过程,使得开发者可以轻松地使用 JSP 页面作为视图。
- 结合 JSP 页面和模型数据,可以生成动态的 HTML 内容。
转载自:https://juejin.cn/post/7385108486516408371