springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描包-->
<context:component-scan base-package="com.testfan"></context:component-scan>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置视图名的默认前缀 -->
<property name="prefix" value="/WEB-INF/"></property>
<!-- 配置视图名的默认后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!--引入注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
Controller方法返回值分为3种:void类型、String类型、ModelAndView类型
一、返回值为void类型
a. 方法一:
@RequestMapping("/testVoid")
public void testVoid(){
System.out.println("测试没有返回值");
//因为没有指定返回值页面,会自动截取请求路径(/WEB-INF/user/testVoid.jsp),进入视图解析器,拼接完整的路径
//可以对应的路径下创建对应的jsp页面
}
b. 方法二:response重定向
@RequestMapping("/testVoid2")
public void testVoid2(HttpServletResponse response){
System.out.println("测试没有返回值");
try {
//重定向不能进入web-inf路径
//转发可以进入web-inf路径
response.sendRedirect("/index.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
c. 方法二:servlet转发
@RequestMapping("/testVoid3")
public void testVoid3(HttpServletResponse response, HttpServletRequest request){
System.out.println("测试没有返回值");
try {
request.getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
二、返回值为String类型
a. 默认的情况:转发请求,返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
/**
* 方法的返回值为String类型
* 返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
* @return
*/
@RequestMapping("/testReturnString")
public String testReturnString(){
return "show";
}
b. 请求重定向
/**
* 执行保存操作-- 重新查询 : save -- redirect:findAll
*
* 方法的返回值为String类型
* 返回值直接进入视图解析器,拼接前缀和后缀,完整的路径
* redirect:重定向, 不能进入web-inf
* redirect:添加了redirect后则不会进入视图解析器,需要配置完整的路径
* @return
*/
@RequestMapping("/testReturnString2")
public String testReturnString2(){
return "redirect:/index.jsp";
}
c. 请求转发
/**
* forward: 转发,不会进入视图解析器,需要配置完整的路径
* @return
*/
@RequestMapping("/testReturnString3")
public String testReturnString3(){
return "forward:/index.jsp";
}
三、返回值为ModelAndView类型
a. ModelAndView: Model 模型:封装数据 view 视图: 指定页面 ---> 模型和视图
b. /**
* 返回值类型为ModelAndView,包含数据和视图页面
* @return
*/
@RequestMapping("/testReturnModelAndView")
public ModelAndView testReturnModelAndView(){
//准备数据--数据库查询
List<User> userList = new ArrayList<>();
User user = new User();
user.setUsername("zhangsan");
user.setSex("男");
user.setId(2);
User user1 = new User();
user1.setUsername("zhangsan1");
user1.setSex("女");
user1.setId(1);
userList.add(user);
userList.add(user1);
ModelAndView modelAndView = new ModelAndView();
//添加数据
modelAndView.addObject("userList",userList);
//指定页面
modelAndView.setViewName("show");
return modelAndView;
}
show.jsp
<body>
可以直接使用userList内的值
${userList}
</body>
</html>
参考:https://blog.csdn.net/a909301740/article/details/80410660