1.1springmvc的映射器
根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来
1.2springmvc的适配器
对映射器查找到的controller中的方法进行调用。
第一步:客户端通过url发送请求
第二步:核心控制器DispatcherServlet接收到请求
第三步:通过系统的映射器找到对应的handler(处理器),并返回给核心控制器,
这步是在spring的xml配置文件(举例)中查找存在与url中的地址对应的Bean与否,不存在就报错,存在就返回一个handler给DispatcherServlet,并调用适配器。
第四步:适配器接收映射器的请求(DispatcherServlet代替的发的),寻找正确匹配handler的Controller。
第五步:调用找到的Controller中的对应方法完成请求的业务逻辑。
1.2springmvc的视图解析器
1.2.1 对于通过设置ServletApi来实现请求转发
这种方法不需要视图解析器 ,不经过视图解析器。直接使用之前最原始的servlet的方法,即利用
@RequestMapping("/t1")
public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
rsp.getWriter().println("Hello,Spring BY servlet API");
}
@RequestMapping("/t2")
public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
rsp.sendRedirect("/04/index.jsp"); //需要加上项目名
}
@RequestMapping("/t3")
public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception { //转发
req.setAttribute("msg","/t3");
req.getRequestDispatcher("/WEB-INF/jsp/test1.jsp").forward(req,rsp);
}
1.2.2 对于利用SpringMvc,而不用视图解析器实现请求转发
// String类型的函数返回的结果回合视图解析器的前缀和后缀拼接
@RequestMapping("/rsm/t1")
public String test11(){ //转发
return "/index.jsp"; //有试图解析器会报错, /04/WEB-INF/jsp//index.jsp.jsp
}
@RequestMapping("/rsm/t2")
public String test21(){
//转发二
return "forward:/index.jsp";//请求转发,不管有没有视图解析器
//可以使用这种方式实现对特殊页面的(不能使用视图解析器的页面,如index.jsp)转发
}
@RequestMapping("/rsm/t3")
public String test31(){
//重定向
return "redirect:/index.jsp"; //可以不要04这个项目名,不管有没有视图解析器
}
对于后两者加上关键词的,不管有没有视图解析器,都不会对其进行拼接在访问相关页面。
1.2.3 对于利用SpringMvc,用视图解析器实现请求转发
@RequestMapping("/rsm2/t1")
public String test12(){ //转发
return "test";
}
@RequestMapping("/rsm2/t2")
public String test22(){ //重定向
return "redirect:/index.jsp";
//return "redirect:hello.do";
//hello.do为另一个请求/
}
总结:一般而言都会加上视图解析器,对于一些特殊请求可以加上关键词来实现对象需求,而请求重定向一定要加上关键词