SpringMvc映射器,适配器和视图解析器

589 阅读2分钟

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为另一个请求/
}

总结:一般而言都会加上视图解析器,对于一些特殊请求可以加上关键词来实现对象需求,而请求重定向一定要加上关键词