接上一篇博客
1、HandlerMapping
HandlerMapping:从spring容器中,找到可以处理请求的Controller(此处没有考虑拦截器)
@Component
public class MyHandlerMapping implements HandlerMapping{
@Override
public HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
// 定义可以处理请求的Controller
Object obj = null;
// 获取请求路径
String path = request.getRequestURI();
// 根据请求路径 找到可以处理请求的Controller
if(path.equals("/myAdd")){
obj = new UserController();
}
// 判断有没有找到处理请求的Controller
if(obj == null){
return null;
}else{ // 找到了可以处理请求的Controller
System.out.println("=== MyHandlerMapping .....");
return new HandlerExecutionChain(obj);
}
}
}
2、HandlerAdapter
HandlerAdapter的作用:调用控制器类中对应的方法处理请求。
@Component
public class MyHandlerAdapter implements HandlerAdapter{
/**
*
* @param handler HandlerExecutionChain 返回的可以处理请求的UserController
* @return UserController是否可以处理请求
*/
@Override
public boolean supports(Object handler) {
if(handler instanceof UserController){
System.out.println("=== MyHandlerAdapter supports... HandlerExecutionChain返回的Controller可以处理请求 ");
return true;
}
return false;
}
/**
* 核心处理请求的方法
* @param request
* @param response
* @param handler 可以处理请求的Controller
* @return
* @throws Exception
*/
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("=== MyHandlerAdapter handle... 开始处理请求。。。 ");
// 找到可以处理请求的方法
Method add = UserController.class.getMethod("add", HttpServletRequest.class, HttpServletResponse.class);
// 反射调用方法
add.invoke(handler, request, response);
return new ModelAndView(new MyJspView());
// 此处用到的是下面的View接口的实现类
}
@Override // 获取响应内容最新修改的时间
public long getLastModified(HttpServletRequest request, Object handler) {
return 0;
}
}
3、视图渲染 ModelAndView
3-1 在springmvc中,视图的核心接口是View, 我们需要为视图接口提供实现类。
public class MyJspView implements View {
@Override
public String getContentType() {
return "text/html;charset=utf-8";
}
@Override // 渲染视图的方法
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
request.getRequestDispatcher("/myview.jsp").forward(request,response);
}
}
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。