资源解析器(springmvc.xml)
<!--内部资源视图解析器-->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/"/>
<property name="suffix" value=".jsp"/>
</bean>
资源:
1.返回String
@RequestMapping("index1")
public String index1(){
return "index";
}
2、forward跟redirect
forward:请求转发
@RequestMapping("/forward")
public String forward(){
return "forward:/WEB-INF/page/index2.jsp";
}
redirect:请求重定向
@RequestMapping("/redirect")
public String redirect(){
return "redirect:/index1";
}
重定向到index1
forward跟redirect区别:
最明显的区别是,url是否发生变化,forward请求转发不会发生变化,redirect请求从定向会发生变化。
forward
是服务器内部的行为,客户端不知道请求已经被转发;redirect
是客户端的行为,涉及两个独立的请求。forward
可以共享请求和响应对象的数据;redirect
不能直接共享数据,但可以通过URL参数或会话传递数据。forward
不会在浏览器历史记录中留下新的条目;redirect
会。forward
通常不会触发浏览器缓存机制;redirect
可能会。- 在某些情况下,
redirect
可能比forward
更安全。
3、返回void
@RequestMapping("/writer")
public void writer(HttpServletResponse response) throws IOException {
/*解决响应数据中文乱码问题*/
response.setContentType("text/html;charset=utf8");
PrintWriter writer = response.getWriter();
writer.write("中文 response.getWriter()返回");
writer.close();
}
4、ModelAndView和model
ModelAndView
@RequestMapping("/modelAndView")
public ModelAndView modelAndView(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","王珅艺");
modelAndView.setViewName("/mav");
return modelAndView;
}
model
@RequestMapping("/model")
public String model(Model model){
model.addAttribute("msg","你好");
return "mav";
}
ModelAndView和model区别:
ModelAndView
ModelAndView
是一个对象,它同时包含了模型和视图的信息。当你想要直接指定返回的视图名称,并且向该视图传递数据时,你会使用 ModelAndView
。
- 包含信息:
- 视图名称:通过
setViewName()
方法设置。 - 模型数据:可以通过
addObject()
方法向模型中添加数据。
- 视图名称:通过
- 使用场景:
- 当你需要明确地指定返回的视图名称时。
- 当你想要在一个方法中处理多个逻辑,并基于这些逻辑返回不同的视图时。
Model
在Spring MVC中,Model
通常是一个 Map<String, Object>
的实现,用于存储将要传递给视图的数据。它并不直接包含视图的信息,而是由控制器方法来决定哪个视图应该被渲染。
- 包含信息:
- 模型数据:可以通过
addAttribute()
或put()
方法向模型中添加数据。
- 模型数据:可以通过
- 使用场景:
- 当你使用
@RequestMapping
注解并希望返回默认视图(例如,基于请求URL的视图解析)时。 - 当你只需要向视图传递数据,而不需要明确指定视图名称时。
- 当你使用
总结
ModelAndView
允许你同时指定视图名称和模型数据。Model
仅用于存储模型数据,并允许视图解析器基于其他因素(如请求URL)来决定要渲染的视图。
在大多数情况下,使用 Model
就足够了,因为它更加简洁且符合Spring MVC的约定。但在某些特殊情况下,例如当你需要基于不同的逻辑条件返回不同的视图时,ModelAndView
可能会更有用。
5、返回json
- 控制器的方法也可以返回 Object 对象,但返回的对象不是作为视图出现的,而是作为页面上显示的数据。
返回对象,需要使用 @ResponseBody 注解将对象转换为 json 格式的数据响应给浏览器。
@RequestMapping("/json")
@ResponseBody
public Object json(){
User wsy = new User("wsy", 20);
Gson gson = new Gson();
String s = gson.toJson(wsy);
return s;
}
标签:redirect,RequestMapping,springmvc,spring,视图,响应,forward,ModelAndView,public
From: https://blog.csdn.net/weixin_64520804/article/details/139359164