标签:map too interface ali load 灵活 部分 初始 dispatch
DispatcherServlet有点类似HttpServlet接口中用于转发的接口RequestDispatcher
下面是API中对DispatcherServlet的解释
它的视图解析策略可以通过ViewResolver实现指定,将符号视图名称解析为视图对象。默认是InternalResourceViewResolver。可以将ViewResolver对象作为bean添加到应用程序上下文中,覆盖默认的ViewResolver。可以给ViewResolvers赋予任何bean名称
下面分别解释上面三个关键接口
handlerMapping的初始化完成的最重要的两个工作就是:
setUrlMap(Map<String,?> urlMap) Set a Map with URL paths as keys and handler beans (or handler bean names) as values. |
getHandler(HttpServletRequest request) Return a handler and any interceptors for this request. |
工作中常用RequestMappingHandlerMapping去查找Handler(通过Handler的适配器去查找)
HandlerAdapter初始化会将这个HandlerAdapter对象保存在Dispatcher的HandlerAdapters集合中。当SpringMVC将某个URL对应到某个Handler时,将对应的Handler返回,对应HandlerAdaptor接口的handle方法
SpringMVC HandlerAdapter机制可以让Handler的实现更加灵活
handle(HttpServletRequest request, HttpServletResponse response, Object handler) Use the given handler to handle this request. |
工作中常用的RequestMappingHandlerAdapter此适配器能执行实现Controller接口的handler
HandlerExceptionResolver 处理器异常解析
当后台捕捉到的业务异常时,可以自定义的异常,然后通过实现HandlerExceptionResolver来抛出自定义异常的信息
public class CustomException extends Exception{ public String msg; public CustomException(String msg) { super(msg); this.msg=msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
以JSON的格式抛出去
public class CustomExceptionResolver implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { //handler 就是处理器适配器执行的Handler对象 response.setContentType("application/json;charset=UTF-8"); try { PrintWriter writer = response.getWriter(); Map<String, Object> map = new HashMap<String, Object>(); map.put("success", false); // 为安全起见,只有业务异常我们对前端可见,否则统一归为系统异常 if (exception instanceof CustomException) { map.put("errorMsg", exception.getMessage()); } else { map.put("errorMsg", "系统异常!"); } writer.write(JSON.toJSONString(map)); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } return null; } }
在这里,我们不想让错误跳转到一个错误页面,所以 return null。(以JSON的数据格式 通过response write到前端)接到错误信息想怎么去做,前端自行处理。
应用程序中,我们的页面经常统一放在某个包下(/WEB-INF/page/),而且统一以某个名字结尾(.jsp或者.html),会统 实现类UrlBasedViewResolver:其中有两个方法
setSuffix 设置在构建URL时附加到视图名称的后缀。
setPreffix 在构建URL时,设置前缀以查看名称。
通过这两个方法,我们在return一个字符串时,可以把页面的前缀和后缀省略,简化了编码。
标签:map too interface ali load 灵活 部分 初始 dispatch
原文地址:https://www.cnblogs.com/ssskkk/p/9308040.html