以下是关于“详解SpringMVC中的四种跳转方式、视图解析器问题”的完整攻略,其中包含两个示例。
SpringMVC中的四种跳转方式
SpringMVC中有四种跳转方式,分别是:
- forward
- redirect
- internalRedirect
- sendRedirect
1. forward
forward是一种服务器内部跳转方式,它将请求转发给另一个控制器或JSP页面进行处理。forward跳转不会改变浏览器的地址栏,因此用户无法看到跳转的过程。
以下是一个forward跳转的示例:
@RequestMapping("/forward")
public String forward() {
return "forward:/hello";
}
在本示例中,我们使用forward跳转到名为"hello"的视图。
2. redirect
redirect是一种客户端重定向方式,它将请求重定向到另一个URL。redirect跳转会改变浏览器的地址栏,因此用户可以看到跳转的过程。
以下是一个redirect跳转的示例:
@RequestMapping("/redirect")
public String redirect() {
return "redirect:/hello";
}
在本示例中,我们使用redirect跳转到名为"hello"的视图。
3. internalRedirect
internalRedirect是一种服务器内部跳转方式,它将请求转发给另一个控制器或JSP页面进行处理。internalRedirect跳转不会改变浏览器的地址栏,因此用户无法看到跳转的过程。
以下是一个internalRedirect跳转的示例:
@RequestMapping("/internalRedirect")
public String internalRedirect() {
return "internalRedirect:/hello";
}
在本示例中,我们使用internalRedirect跳转到名为"hello"的视图。
4. sendRedirect
sendRedirect是一种客户端重定向方式,它将请求重定向到另一个URL。sendRedirect跳转会改变浏览器的地址栏,因此用户可以看到跳转的过程。
以下是一个sendRedirect跳转的示例:
@RequestMapping("/sendRedirect")
public String sendRedirect() {
return "sendRedirect:/hello";
}
在本示例中,我们使用sendRedirect跳转到名为"hello"的视图。
视图解析器问题
视图解析器是SpringMVC中的一个重要组件,它用于将视图名称解析为对应的View对象。在SpringMVC中,有多种视图解析器可供选择,如InternalResourceViewResolver、FreeMarkerViewResolver、VelocityViewResolver等。
InternalResourceViewResolver
InternalResourceViewResolver是SpringMVC中最常用的视图解析器之一,它用于解析JSP视图。InternalResourceViewResolver会将视图名称解析为JSP文件路径,并返回对应的View对象。
以下是一个InternalResourceViewResolver的示例配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
在本示例中,我们使用InternalResourceViewResolver视图解析器,用于解析JSP视图。我们将前缀设置为"/WEB-INF/views/",后缀设置为".jsp"。
FreeMarkerViewResolver
FreeMarkerViewResolver是SpringMVC中的另一个视图解析器,它用于解析FreeMarker视图。FreeMarkerViewResolver会将视图名称解析为FreeMarker模板文件路径,并返回对应的View对象。
以下是一个FreeMarkerViewResolver的示例配置:
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".ftl"/>
</bean>
在本示例中,我们使用FreeMarkerViewResolver视图解析器,用于解析FreeMarker视图。我们将前缀设置为"/WEB-INF/views/",后缀设置为".ftl"。
示例1
以下是一个基于SpringMVC的示例:
- 客户端发送请求到DispatcherServlet,请求路径为"/hello"。
- DispatcherServlet将请求交给HelloController进行处理。
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
在本示例中,我们定义了一个HelloController控制器,并使用@RequestMapping注解指定了请求路径。在hello()方法中,我们返回了一个名为"hello"的视图名称。
3. DispatcherServlet将视图名称"hello"交给InternalResourceViewResolver进行解析。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
在本示例中,我们使用InternalResourceViewResolver视图解析器,用于解析JSP视图。
4. InternalResourceViewResolver将视图名称"hello"解析为JSP文件路径"/WEB-INF/views/hello.jsp"。
5. View渲染ModelAndView并返回响应结果。
<!DOCTYPE html>
<html>
<head>
<title>Hello, SpringMVC!</title>
</head>
<body>
<h1>Hello, SpringMVC!</h1>
</body>
</html>
在本示例中,我们使用JSP视图来渲染响应结果。
示例2
以下是另一个基于SpringMVC的示例:
- 客户端发送请求到DispatcherServlet,请求路径为"/user/list"。
- DispatcherServlet将请求交给UserController进行处理。
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/list")
public String list(Model model) {
List<User> userList = userService.getUserList();
model.addAttribute("userList", userList);
return "userList";
}
}
在本示例中,我们定义了一个UserController控制器,并使用@RequestMapping注解指定了请求路径。在list()方法中,我们调用服务获取用户列表,并将其添加到Model中。我们还返回了一个名为"userList"的视图名称。
3. DispatcherServlet将视图名称"userList"交给InternalResourceViewResolver进行解析。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
在本示例中,我们使用InternalResourceViewResolver视图解析器,用于解析JSP视图。
4. InternalResourceViewResolver将视图名称"userList"解析为JSP文件路径"/WEB-INF/views/userList.jsp"。
5. View渲染ModelAndView并返回响应结果。
<!DOCTYPE html>
<html>
<head>
title>User List</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
在本示例中,我们使用JSP视图和
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringMVC中的四种跳转方式、视图解析器问题 - Python技术站