SpringMVC框架 (7) —— 响应传值方式

响应传值方式

返回void类型和共享数据 : 需要共享数据,页面跳转

//返回void类型和共享数据 : 需要共享数据,页面跳转
	//必须注入请求响应对象(共享数据,页面跳转)
	@RequestMapping("/method1")
	public void method1(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
		//共享数据
		req.setAttribute("username", "小龙女");
		//跳转到jsp页面要显示数据,就必须使用请求转发
		req.getRequestDispatcher("/WEB-INF/response/response.jsp").forward(req, resp);
	}

访问地址: http://localhost:8080/springmvc/response/method1.do

返回ModelAndView类型和共享数据

/*
 * 	返回ModelAndView类型和共享数据
 *  ModelAndView 模型和视图
 *  Spring提供此对象可以集中管理共享数据操作和设置跳转视图操作
 *  ModelAndView 只能使用请求转发
 */
@RequestMapping("/method2")
public ModelAndView method2() {
	ModelAndView mv = new ModelAndView();
	//共享数据,等价于 request对象共享数据的级别
	//mv.addObject(attributeName, attributeValue)
	mv.addObject("username", "杨过");
	//页面跳转,等价于request对象的请求转发
	//mv.setViewName(viewName);
	mv.setViewName("/WEB-INF/response/response.jsp");
	return mv;
}

访问地址: http://localhost:8080/springmvc/response/method2.do

配置视图解析器

代码分析图

在这里插入图片描述

视图解析器的配置

<!-- 配置SpringMVC的视图解析器: 配置前缀和后缀 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 配置视图跳转的前缀 -->
		<property name="prefix" value="/WEB-INF/response/"/>
		<!-- 配置视图跳转的后缀 -->
		<property name="suffix" value=".jsp"/>
	</bean>

配置视图解析器后的代码

Controller方法返回字符串表示逻辑视图名,通过视图解析器解析为物理视图地址。
此时默认的物理视图地址为:视图前缀+返回值+视图后缀

	@RequestMapping("/method2")
	public ModelAndView method2() {
		ModelAndView mv = new ModelAndView();
		//共享数据,等价于 request对象共享数据的级别
		//mv.addObject(attributeName, attributeValue)
		mv.addObject("username", "杨过");
		//页面跳转,等价于request对象的请求转发
		//mv.setViewName(viewName);
		//没有配置视图解析器之前的写法
		//mv.setViewName("/WEB-INF/response/response.jsp");
		//配置视图解析器之后的写法
		mv.setViewName("response");
		return mv;
	}

注意: 配置完视图解析器以后,必须保证,前缀目录下面必须有对应逻辑视图名称所在的 页面 ,否则可能会报404错误

通过Model方式-设置共享数据

/*
 * Model方式 :  直接将需要共享的数据封装到Model对象中即可
 * 	方法返回String字符传直接,返回需要跳转的地址即可
 * 	 默认使用请求转发
 */
@RequestMapping("/method3")
public String method3(Model m) {
	//m.addAttribute(attributeName, attributeValue)
	m.addAttribute("username", "小敬哥123");
	//没有配置视图解析器之前的写法
	//return "/WEB-INF/response/response.jsp";
	//配置视图解析器之后的写法
	return "model"; //返回逻辑视图名称
}

自定义请求转发和重定向跳转的页面

  • 如果直接使用视图解析器的配置开发,那么必须保证视图解析器前缀目录下面有对应的页面文件才能跳转,否则报错
  • 默认页面跳转也只能使用请求转发跳转,不能使用重定向 需要解决问题: 除了使用视图解析器对应规则的开发,用户还得自定义跳转方式,和自定义跳转页面 方案:
  • 使用视图解析器的 请求转发和重定向配置,可以打破默认的规则
  • public static final String REDIRECT_URL_PREFIX = “redirect:”;
  • public static final String FORWARD_URL_PREFIX = “forward:”;

案例代码


// 自定义请求转发页面跳转的地址 : forward: 跳转的地址
@RequestMapping("/method4")
public String method4(Model m) {
	// m.addAttribute(attributeName, attributeValue)
	m.addAttribute("username", "东方姑娘");
	return "forward:/WEB-INF/views/index.jsp";
}
// 自定义重定向页面跳转的地址 redirect: 跳转的地址
@RequestMapping("/method5")
public String method5() {
	return "redirect:http://www.jd.com";
}

返回对象类型和共享数据

方法不返回ModelAndView也不返回String类型对应的逻辑视图名称直接返回一个Pojo对象
如果直接返回Pojo对象,项目又配置了视图解析器规则

如果方法中没有返回ModelAndView对象,此时SpringMVC不知道视图在哪里.
此时需要配置视图解析器org.springframework.web.servlet.view.InternalResourceViewResolver.
物理视图路径为:前缀+请求路径(上下文路径+资源名称)+后缀
必须保证视图解析器路径下面必须有 请求路径对应的页面

@ModelAttribute作用如下:
1、设置请求参数绑定到Model对象中并传到视图页面的key名.
2、将方法返回值或请求参数绑定到Model对象中并传到视图页面

在这里插入图片描述

@ModelAttribute("userKey")//跳转页面使用el表达式获取的对应的属性名称
	@RequestMapping("/method6")
	public User method6() {
		User user = new User();
		user.setUsername("东方姑娘");
		user.setPassword("dfgn");
		user.setEmail("dfgn@qq.com");
		user.setPhone("234234234324");
		return user;
	}

转换JSON数据

在web开发中,前台页面经常会发送ajax请求从后台请求数据,ajax请求给前台的数据一般都是json 数据。
SpringMVC支持自动将对象转换JSON格式的数据响应给客户端
SpringMVC默认使用的是 jackson 作为对象转json的工具

Fast-json Alibaba
Gson google
Json-lib Apache

步骤

导入jackson的jar包
在这里插入图片描述 [ 未找到 ]  [ Loading... ]
案例代码

@Controller
public class JsonController {
	@RequestMapping("/getUserJson")
	@ResponseBody //把响应的内容设为普通字符串
	public User getUserJson() {
		User user = new User();
		user.setUsername("东方姑娘");
		user.setPassword("dfgn");
		user.setEmail("dfgn@qq.com");
		user.setPhone("234234234324");
		return user;
	}
	
	@RequestMapping("/getUserJsonList")
	@ResponseBody
	public List<User> getUserJsonList() {
		User user = new User();
		user.setUsername("东方姑娘");
		user.setPassword("dfgn");
		user.setEmail("dfgn@qq.com");
		user.setPhone("234234234324");
		
		List<User> list = new ArrayList<>();
		list.add(user);
		list.add(user);
		list.add(user);
		list.add(user);
		return list;
	}
}

小结

1,SpringMVC介绍
(1) SpringMVC是一个Spring框架下面一个基于MVC模式的 表现层/Web 框架
(2) SpringMVC 底层就是Servlet,就是对Servlet的封装
(3) SpringMVC 接受参数灵活,页面跳转,共享数据方便
2,开发步骤
(1) 引入相关依赖jar包
(2) 在web.xml中配置SpringMVC的前端控制器
① DispatcherServlet
(3) 在springmvc.xml配置文件配置包扫描,开启Springmvc的注解驱动
① <context:component-sacn basePackage=’cn.xc.springmvc’>
② <mvc:annotation-driven>
(4) 新建一个普通类型
① 在类上面贴上 @Controller注解,就是SpringMVC的控制器了
(5) 在类中新建一个方法,并且在方法上面贴上一个注解
① @RequestMapping(“url地址访问路径”)
(6) 在浏览器输入地址即可访问
3,SpringMVC的请求
(1) 请求方法的限定 GET/POST
(2) 请求参数的限定 ,必须有什么参数,必须没有什么参数,参数值必须是什么,参数值必须不是什么
(3) 数据绑定(接受请求参数)
① 表单提交参数名和方法参数名相同 -最常见
② 表单提交参数名和方法参数名不相同

  1. 在方法参数前面写上@RequestParam(“和表单参数名相同”)
    ③ 数组类型(多值)
    ④ 接受多个参数封装成 pojo对象
  2. 必须保证表单参数名称和pojo对象属性名称相同
    ⑤ 将接受参数封装成map集合
    (4) 支持 RestFul风格
    ① @PathVariables()
    (5) SpringMVC中文参数乱码的问题
    ① Post方式 设置过滤器
    ② Get方式 修改tomcat 配置
    4,SpringMVC的相应
    (1) ModelAndView 共享模型数据并且设置视图地址
    (2) 方法直接返回 String 使用 Model 模型对象共享
    (3) 自定义页面跳转
    ① redirect: 重定向
    ② forward:请求转发
    (4) 配置视图解析器(配置视图的前缀和后缀)
    (5) 返回对象类型
    (6) 返回json数据
    ① Jackson+@ResponseBody
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值