Spring MVC 响应视图(六)
完整的项目案例: springmvc.zip
目录
实例
除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
项目结构:
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 请求总控器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置dispatcher-servlet.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="edu.nf.ch06.controller"/> <mvc:annotation-driven/> <mvc:default-servlet-handler/> <!-- springmvc提供了很多种视图解析器来完成不同的视图解析工作,
例如内部资源视图解析器、模板引擎的视图解析器、XML视图解析器等等
,而在配置文件中是可以同时配置多个视图解析器的,那么Springmvc
在做视图响应的时候,会根据配置文件中的配置的所有视图解析器按照顺序
进行匹配,直到找到一个合适的视图解析器来完成解析。当有多个视图解析器存在时,
可以通过order属性来指定解析器的优先级(<property name="order" value="0"/>)-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
请求控制器Controller
(RedirectAttributesController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes; /**
* @author wangl
* @date 2018/10/31
* 使用RedirectAttributes解决重定向传参的问题
* 这个对象是在Springmvc 3.1的版本加入的
*/
@Controller
public class RedirectAttributesController { /**
* 重定向一个JSP页面,使用addAttribute的方式
* 将参数绑定在重定向的url后面带回到页面
* @param user
* @param redirectAttributes
* @return
*/
@PostMapping("/redirect3")
public String redirectPage(Users user, RedirectAttributes redirectAttributes){
redirectAttributes.addAttribute("user", user.getUserName());
return "redirect:redirectattr.jsp";
} /**
* 重定向一个新的请求,使用FlushAttribute的方式,
* 将数据存入一个FlushMap中,它利用了Session的机制保存,
* 在重定向完成之后会自动清除这个对象
*
* @param user
* @param redirectAttributes
* @return
*/
@PostMapping("/redirect4")
public String redirectReq(@ModelAttribute("user") Users user, RedirectAttributes redirectAttributes){
redirectAttributes.addFlashAttribute("user", user);
return "redirect:redirectAction";
} /**
* 从redirect4的请求重定向到这个方法
* @param user
* @return
*/
@GetMapping("/redirectAction")
public String getRedirectAttr(@ModelAttribute("user") Users user){
System.out.println(user.getUserName());
return "index";
}
}
(ResponseBodyController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; /**
* @author wangl
* @date 2018/10/31
*/
//@Controller /**
* @RestController是在spring4.0后新加入的一个注解,
* 同样用于标注一个类为控制器组件,如果当前控制器中所有的
* 请求处理方法都需要以ResponseBody的方式响应,那么
* 就是用这个注解,而不需要再每一个方法上都标注@ResponseBody注解
*/
@RestController
public class ResponseBodyController { /**
* 使用@ResponseBody标注,
* 表示将方法的返回值以Response输出流写回客户端,
* 这时,springmvc就会将序列化的数据放入响应体中并写回
* @return
*/
@GetMapping("/getUser")
public Users getUser(){
Users user = new Users();
user.setUserName("user1");
user.setAge(21);
return user;
}
}
(RequestBodyController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; /**
* @author wangl
* @date 2018/10/31springmvc
*/
@RestController
public class RequestBodyController { /**
* 接收ajax提交的数据并做类型转换映射
* @param user
* @return
*/
@PostMapping("/addUser")
public String addUser(Users user){
System.out.println(user.getUserName());
System.out.println(user.getAge());
return "success";
} /**
* 是用@RequestBody标注参数,
* 表示将接收的json文本数据进行格式转换后映射到实体中
* @param user
* @return
*/
@PostMapping("/addUser2")
public String addUser2(@RequestBody Users user){
System.out.println(user.getUserName());
System.out.println(user.getAge());
return "success";
}
}
(UserController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView; import java.util.Map; /**
* @author wangl
* @date 2018/10/31
*/
@Controller
public class UserController { /**
* 转发视图
*/
@GetMapping("/forwrd1")
public ModelAndView forward1(){
//通过ModelAndView转发
return new ModelAndView("index");
} @GetMapping("/forwrd2")
public String forward2(){
//通过ModelAndView转发
return "index";
} /**
* 重定向视图
* @return
*/
@GetMapping("/redirect1")
public ModelAndView redirect1(){
//在ModelAndView的构造方法传入一个RedirectView的视图对象来完成重定向
//return new ModelAndView(new RedirectView("redirect.jsp"));
//简化
return new ModelAndView("redirect:redirect.jsp");
} @GetMapping("/redirect2")
public String redirect2(Users user){
return "redirect:redirect.jsp";
}
}
Spring MVC 响应视图(六)的更多相关文章
- 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- Spring MVC 的视图转发
Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作 1.使用RedirectView public ModelAndView login(){ RedirectView ...
- Spring MVC之视图解析器
Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...
- Spring MVC Xml视图解析器
XmlViewResolver用于在xml文件中定义的视图bean来解析视图名称.以下示例演示如何在Spring Web MVC框架使用XmlViewResolver. XmlViewResolver ...
- Spring MVC的视图解析器
一.视图解析器简介 在Spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进 ...
- Spring MVC之视图解析器和URL-Pattern的配置方案
上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...
- spring mvc 多视图配置
<!-- jsp视图解析器--> <bean id="viewResolver" class="org.springframework.web.serv ...
- Spring MVC 自定义视图
实现View import org.springframework.stereotype.Component; import org.springframework.web.servlet.View; ...
- Spring MVC 返回视图时添加的模型数据------POJO
POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和 EJB混淆起来, 而且简 ...
随机推荐
- [Swift]LeetCode942. 增减字符串匹配 | DI String Match
Given a string S that only contains "I" (increase) or "D" (decrease), let N = S. ...
- [Swift]LeetCode983. 最低票价 | Minimum Cost For Tickets
In a country popular for train travel, you have planned some train travelling one year in advance. ...
- Python内置函数(58)——slice
英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set ...
- lambda表达式中的排序问题
新月新气象,10月第一篇,这也是我工作的第一天,这一篇文章我们要讲到lambda的排序问题 我是这样排序的 var list = DB.company.OrderBy(x=>x.isfreeze ...
- Spring Cloud学习笔记-012
分布式服务跟踪:Spring Cloud Sleuth 随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂.通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务 ...
- 认识Js中的二进制数据
Blob 在项目中涉及到要对html原生的audio组件进行样式复写,因此需要重新实现audio的一些功能,比如下载.实现一个下载大致的思路是服务端返回一段音频的二进制数据,客户端将其存放在Blob中 ...
- Perl信号处理
本文关于Perl信号处理的内容主体来自于<Pro Perl>的第21章. 信号处理 操作系统可以通过信号(signal)处理机制来实现一些功能:程序注册好待监视的信号处理机制,在程序运行过 ...
- spring boot(四) 多数据源
前言 前一篇中我们使用spring boot+mybatis创建了单一数据源,其中单一数据源不需要我们自己手动创建,spring boot自动配置在程序启动时会替我们创建好数据源. 准备工作 appl ...
- Python并发编程之消息队列补充及如何创建线程池(六)
大家好,并发编程 进入第六篇. 在第四章,讲消息通信时,我们学到了Queue消息队列的一些基本使用.昨天我在准备如何创建线程池这一章节的时候,发现对Queue消息队列的讲解有一些遗漏的知识点,而这些知 ...
- Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定
一. html与Controller中的双向数据绑定 html-Controller的双向数据绑定,在开发中非常常见,也是Angularjs1.x的宣传点之一,使用中并没有太多问题. 1.1数据从ht ...