springmvc常用注解&重定向和转发&静态资源放行&ajax传值

springmvc当中常见的注解

重要的事情写在前面:
下面代码中的 return seccess 之类的。由modeandview对象返回的话 是有视图解析器管理的, 可以省略前后缀。但是要配置!!!

2.1 @RequestParam() 注解的使用

@RequestMapping("/findUser")
作用: 当前端请求的key 和参数绑定的key不一致的时候呀, 可以使用该注解。

public ModelAndView findUser(@RequestParam(value="name",required=true) String username) {
	
	ModelAndView mav = new ModelAndView(); 
	mav.setViewName("success");
	System.out.println("username:"+username);
	return mav;
}

2.2 @RequestBody

/*
	 *  测试@requestBody注解
	 *  作用: 能够获得前端的请求体: 
	 *  请求体: get: 没有请求体, 抛出一个异常:400
	 *        post: username=lisi&password=123
	 */
	@RequestMapping("/getBody")
	public ModelAndView getBody(@RequestBody String body) {
		
		ModelAndView mav = new ModelAndView(); 
		mav.setViewName("success");
		System.out.println("username:"+body);
		return mav;
	}

2.3 resultful风格介绍
restFul风格, 只是开发的风格, 不是规范, 也不是规定。
同样的 url 用不同的方法去发送,
在这里插入图片描述

2.4 @PathVariable(" ")

/*
	 * @RequestMapping("/findUser2/{id}") {id}占位符: 
	 * 请求地址; user/findUser2/num
	 * 
	 * @PathVariable("sid") 获得URL当中的请求的num: 
	 */
	@RequestMapping("/findUser2/{sid}")
	public ModelAndView findUser2(@PathVariable("sid") String id) {
		
		ModelAndView mav = new ModelAndView(); 
		mav.setViewName("success");
		System.out.println(id);
		return mav;
	}

2.5 @RequestHeader(“headerName”)
获得指定的头的名称对应的值:

@RequestMapping("/getHeader")
	public ModelAndView getHeader(@RequestHeader("accept") String header) {
		
		ModelAndView mav = new ModelAndView(); 
		mav.setViewName("success");
		System.out.println(header);
		return mav;
	}

2.6 @CookieValue()

/**
	 * @CookieValue("JSESSIONID") 指定一个cookie的名称, 能够获得cookie名称对应的值: 
	 * @param cookieValue
	 * @return
	 */
	@RequestMapping("/getCookie")
	public ModelAndView getCookie(@CookieValue("JSESSIONID") String cookieValue) {
		
		ModelAndView mav = new ModelAndView(); 
		mav.setViewName("success");
		System.out.println(cookieValue);
		return mav;
	}
2.7 @ModelAttribute 注解

2.7.1使用方式一:  具有返回值的方法;
@RequestMapping("/updateUser")
	public ModelAndView updateUser(User user ) {//直接进行参数绑定,就可以获得值
		
		ModelAndView mav = new ModelAndView(); 
		mav.setViewName("success");
		System.out.println("controller执行了:");
		System.out.println(user);
		return mav;
	}
	
	@ModelAttribute
	public User test(String id) {
		//模拟查询数据: 
		User user = new User(); 
		user.setUsername("xxx");
		user.setPassword("123");
		
		System.out.println("modelAttribute 方法在controller之前执行: ");
		return user;
	}

2.7.2使用方式二: 不具有返回值的方法;

@RequestMapping("/updateUser")
public ModelAndView updateUser(@ModelAttribute("aaa")User user ) {
	
	ModelAndView mav = new ModelAndView(); 
	mav.setViewName("success");
	System.out.println("controller执行了:");
	System.out.println(user);
	return mav;
}

@ModelAttribute
public void test(Map<String,User>map, String id) {
	//模拟查询数据: 
	User user = new User(); 
	user.setUsername("xxx");
	user.setPassword("123");
	map.put("aaa", user);
	System.out.println("modelAttribute 方法在controller之前执行: ");
	
}

3 方法的返回值以及响应数据

3.1 返回值ModelAndView

@RequestMapping("/findPro")
	public ModelAndView findPro(String id) {
		System.out.println(id);
		
		User user = new User(); 
		user.setUsername("lisi");
		user.setPassword("1234");
		
		
		//返回值的类型ModelAndView: 
		/*
		 * ModelAndView:  既能够封装数据, 又能够跳的页面: 
		 */
		ModelAndView mav = new ModelAndView();
		mav.addObject("user",user); //request.setAttribute("attName","attValue");
		
		//视图的跳转: 
		mav.setViewName("success");
		return mav;
		
	}
**3.2 返回值的类型: String类型**
/**
	 * 返回值是String类型: 
	 * 返回值:就是页面跳转的路径: 
	 * 
	 * 向页面传递的参数: 封装在Model接口当中: 
	 * @param id
	 * @return
	 */
	@RequestMapping("/findPro2")
	public String findPro2(String id,Model model) {
		System.out.println(id);
		User user= new User(); 
		user.setUsername("翠花");
		user.setPassword("383838");
		model.addAttribute("user", user);
		return "success";
		
	}
	
	
	@RequestMapping("/findPro3")
	public String findPro2(String id,ModelMap map) {
		System.out.println(id);
		User user= new User(); 
		user.setUsername("翠花2");
		user.setPassword("484884848");
		map.addAttribute("user", user);
		return "success";
		
	}

3.3 返回值void
没有设置返回值, controller方法执行完毕后,默认情况会跳转到一个请求的地址对应的.jsp页面。

/**
	 * 第一: 
	 * 使用传统的servlet的API,可以直接绑定在参数上。   
	 * 第二: 手动转发的时候, 转发的路径必须自己写全了。  手动转发,不走视图解析器: 
	 * 第三: 页面转发完成或者是重定向完成后, return 关键字结束。 
	 * 
	 * 进行异步请求,异步相应数据, 不需要进行页面跳转的时候, 返回值一般void: 
	 * 当需要进行同步跳转, 一般把返回值设置为String。 
	 * ModelAndView是一个底层对象, 一般情况不使用: 
	 * @throws IOException 
	 * @throws ServletException 
	 *
	 */
	@RequestMapping("deletePro")
	public void deletePro(String id,HttpServletRequest request,HttpServletResponse response) throws Exception {
		response.setContentType("text/html;charset=utf-8");
		System.out.println("delete方法执行了: ");
		User user = new User(); 
		user.setUsername("张无忌");
		user.setPassword("2323");
		
		request.setAttribute("user", user);
		//转发: 使用传统的servlet的技术, 实现转发: 
		//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
		
		// response.sendRedirect(request.getContextPath()+"/success.jsp");
		
		// 直接向客户端浏览器输出内容; 
		response.getWriter().println("客户端你好啊");
		
		return; 
		
	}

3.4 返回值为String进行手动转发和重定向
//返回值类型: 是String类型, 可以进行手动的转发: 或者是重定向: 视图解析器不参与:

@RequestMapping("/findPro4")
	public String findPro4(String id,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		 //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);// 内部:  
		//response.sendRedirect(request.getContextPath()+"/success.jsp");
		return "success";
		
	}

3.5 redirect & forward关键字实现重定向和转发

/*
	 * 返回值是String类型:  进行页面的转发或者是重定向: 
	 * 
	 *  return "forward:url";此时可以实现转发操作;     不走视图解析器: 路径必须写全:  
	 *  return "redirest:url";此时能够进行重定向操作:   重定向地址栏发生变化, 不能重定向到web-inf下: 
	 *  使用关键字进行重定向的时候,/ 相对于web应用:springmvc给做了相关的处理:  
	 */
	@RequestMapping("/findPro4")
	public String findPro4(String id,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		//return "forward:/WEB-INF/pages/success.jsp";
		return "redirect:/success.jsp";
		
	}

3.6 springmvc 静态资源放行

Img link script 标签, 在页面加载的时候,都会自动发出请求。 默认情况, 前端控制器对静态资源进行了拦截。 我们需要对这些静态的资源进行放行。

在springmvc.xml当中: 配置静态资源放行;

<!-- 对指定目录下的静态资源放行
	 location: 指定放行的位置: 
	 mapping:q请求的地址: /images/*  请求路径/images/xxx都会放行: 
	                     /images/** 请求路径: /images/xxx/xxx/yy 都会放行: 
 --> 
<mvc:resources location="/images/" mapping="/images/*"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>  

在这里插入图片描述

3.7 发送ajax请求,数据异步响应

3.7.1 前端发送ajax请求:

$(function(){
	        $("#btn").click(function(){
	        	 $.ajax({
	 	        	url: "productor/getJson",
	 	        	contentType:"application/json;charset=utf-8",
	 	        	data:'{"username":"lisi","password":"121212"}',
	 	        	type: "POST",
	 	        	dataType:"json",
	 	        	success:function(){
	 	        		alert("xx");
	 	        	}
	 	        });
	        });
 });

3.7.2 后端获得请求数据。异步响应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值