文章目录
7 结果跳转
7.1 转发
Spring MVC视图处理器默认是转发
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
7.2 重定向
重定向只需要添加redirect
@Controller
@RequestMapping("/TTForwardController")
public class TTForwardController {
@RequestMapping("/t1")
public String test(Model model){
return "redirect:/TTForwardController/red";
}
@RequestMapping("/red")
public String test1(Model model){
model.addAttribute("msg","hello");
return "hello";
}
}
在视图名称中添加前缀redirect
可以执行重定向。UrlBasedViewResolver
(和他的子类)会将它视为一个需要去重定向的指令,去掉redirect
后剩余的视图名称就是一个重定向的URL。
控制器会按照视图名称的逻辑去处理,一个视图名称(例如redirect:/myapp/some/resource
)会相对于当前Servlet上下文去重定向,与此同时,一个像redirect:https://myhost.com/some/arbitrary/path
会被当成一个绝对URL去重定向。
8 从前端获取参数
8.1 参数名一致
前端传入的参数名和方法参数名一样时,可以直接通过方法参数名获取
@Controller
@RequestMapping("/gpc")
public class GetParameterControllerTester {
@GetMapping("/c1")
public String getParameterTester1(String name, Model model){
model.addAttribute("msg","Hello, "+name);
return "gpc";
}
}
gpc.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>${msg}</h1>
</body>
</html>
8.2 参数名不一致
参数名不一致的情况下,需要使用@RequestParam
注解
@Controller
@RequestMapping("/gpc")
public class GetParameterControllerTester {
@GetMapping("/c1")
public String getParameterTester1(@RequestParam("username") String name, Model model){
model.addAttribute("msg","Hello, "+name);
return "gpc";
}
}
8.3 接受一个对象
创建一个实体类User
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
编写控制器GetParameterControllerTester
@Controller
@RequestMapping("/gpc")
public class GetParameterControllerTester {
@GetMapping("/c2")
public String getParameterTester2(User user,Model model){
model.addAttribute("user",user);
return "gpc2";
}
}
编写视图gpc2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${user.id}
${user.name}
${user.age}
</body>
</html>
运行结果可得:
SpringMVC会帮我们自动去匹配对象中的字段名和前端传入的参数名是否一样,一样的我们就匹配到该对象中去,没有的话就不匹配。
例如,我们传入URL为http://localhost:8080/gpc/c2?iid=1&nname=cap&aage=18&name=cap&age=20
9 传递参数到前端
9.1 使用Model
前面一直在使用,这里不再赘述
@GetMapping("/c2")
public String getParameterTester2(User user,Model model){
model.addAttribute("user",user);
return "gpc2";
}
9.2 使用ModelMap
ModelMap和Model差不多
@GetMapping("/c3")
public String getParameterTester2(ModelMap modelMap){
modelMap.addAttribute("msg", "Hello ModelMap");
return "gpc3";
}
9.3 使用ModelAndView
ModelAndView是用在继承Controller上的,由于我们常用注解开发,这里我们不展开讲解