2. spring mvc 请求:
@RequestMapping: 请求路径映射,可以在类上也可以在方法上面, produces 指定返回格式 ,
可以指定method 请求方式get还是post
@RequestParam: 请求参数映射,required 可以指定需不需要必须传,可以设置defaultValue默认值
@PathVariable : 带占位符的URL,从占位符中取出值
@RequestBody: 注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容
转换为 json、xml等格式的数据并绑定到controller方法的参数上。
3 spring mvc 返回值
1. 返回ModelAndView:
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
2 .返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
3. @ResponseBody作用:
该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,
通过 Response响应给客户端
4. SpringMvc中的转发和重定向
1. 转发和重定向的区别:
① 转发: 浏览器的url地址不变,重定向: 浏览器的URL地址改变
② 转发: 服务器行为, 重定向: 客户端行为
③ 转发: 浏览器只做了一次请求 重定向: 浏览器做了多次请求
④ 转发: 传输的信息不回丢失 重定向: 传输的信息会丢失(request范围)
2. 使用request转向页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
return"forward:editItem.action";
3. 也可以通过response页面重定向:
response.sendRedirect("url")
return"redirect:queryItem.action";
4. 也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");
5. 返回逻辑视图名
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp
return"item/editItem";
5 .自定义异常处理器
1. springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,
自定义异常处理器可以实现一个系统的异常处理逻辑。
2. 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,
后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的dao、service、controller出现都
通过throwsException向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理
public class CustomExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndViewresolveException(HttpServletRequest request,
HttpServletResponseresponse, Object handler, Exception ex) {
ex.printStackTrace();
CustomExceptioncustomException = null;
//如果抛出的是系统自定义异常则直接转换
if(ex instanceof CustomException){
customException =(CustomException)ex;
}else{
//如果抛出的不是系统自定义异常则重新构造一个系统错误异常。
customException = new CustomException("系统错误,请与系统管理员联系!");
}
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message",customException.getMessage());
modelAndView.setViewName("error");
return modelAndView;
}
}