1. 程式人生 > 其它 >SpringMVC入門系列(2)-SpringMVC處理請求流程

SpringMVC入門系列(2)-SpringMVC處理請求流程

SpringMVC處理請求流程

SpringMVC處理請求的流程

  • 發起some.do請求
  • tomcat (web.xml--url-pattern知道。*.do的請求給DispatcherServlet)
  • DispatcherServlet. (根據springmvc.xml配置知道some.do---doSone() )
  • DispatcherServlet把some.do轉發給MyController中的doSome()方法
  • 框架執行dosome()把得到ModelAndView進行處理,轉發到show.jsp

SpringMVC執行過程

  1. tomcat啟動,建立容器的過程通過load-on-start標籤指定的1,建立Disaptcherservlet物件,DisaptcherServlet它的父類是繼承HttpServlet的,它是一個serlvet,在被建立時,會執行init ()方法在init ()方法中
//建立容器,讀取配置檔案
WebApplicationContext ctx=new ClassPathxmlApplicationContext (" springmvc.xml");
//把容器物件放入到ServletContext中
getServletContext().setAttribute (key, ctx) :

上面建立容器作用:建立@Controller 註解所在的類的物件,建立MyController物件,這個物件放入到springmvc的容 器中,容 器是hap,類似map.put ("myController ,MyController物件)

  1. 請求的處理過程
    1)執行servlet的service()
proteoted void service (HttpServletRequest request, HttpServletRe sponse response)
proteoted vold doservice (HttpservletRequst request, HttpservletResponse re sponse)
Dispatcherservlet. doDispatch(request,response) {
    呼叫MyController的.doSome()方法;
}

配置檢視解析器

  1. 當我們訪問http://localhost:8080/ch0_hello_springmvc_war/
    的時候,可以僅僅希望通過點選跳轉到some.do頁面
  1. show.jsp放在webapp下,該目錄下使用者都可以訪問該頁面
  1. 將show.jsp移動到WEB-INF\view下,因為在WEB-INF下的jsp頁面使用者都沒有許可權進行訪問
  1. 按照路徑訪問該地址http://localhost:8080/ch0_hello_springmvc_war/WEB-INF/view/show.jsp發現是404頁面
  1. MyController中修改檢視的位置
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(){
        //處理some.do請求了。相 當於service呼叫處理完成
        ModelAndView mv=new ModelAndView();
        //新增資料,框架在請求的最後把資料放入到request作用域。
        //request . setAttribute("msg" , "歡迎使用springmvc做web開發");
        mv.addObject("msg","歡迎使用springmvc做web開發!");
        mv.addObject("fun","指定的是doSome方法");
        //指定檢視,指定檢視的完整路徑
        //框架對檢視執行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
        mv.setViewName("WEB-INF/view/show.jsp");
        return mv;
    }
  1. 測試正常情況下可以訪問的到
  1. 我們發現檢視的路徑比較長,而且比較冗餘,我們可以在springmvc.xml配置相應的檢視解析器
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--字首:檢視檔案的路徑-->
            <property name="prefix" value="WEB-INF/view/"></property>
            <!--字尾:檢視檔案的副檔名-->
            <property name="suffix" value=".jsp"></property>
        </bean>
  1. 修改MyController中繫結的檢視
@RequestMapping(value = "/some.do")
    public ModelAndView doSome(){
        //處理some.do請求了。相 當於service呼叫處理完成
        ModelAndView mv=new ModelAndView();
        //新增資料,框架在請求的最後把資料放入到request作用域。
        //request . setAttribute("msg" , "歡迎使用springmvc做web開發");
        mv.addObject("msg","歡迎使用springmvc做web開發!");
        mv.addObject("fun","指定的是doSome方法");
        //指定檢視,指定檢視的完整路徑
        //框架對檢視執行的forward操作,request. getRequestDi spather("/show . jsp). forward(...)
        mv.setViewName("show");
        return mv;
    }
  1. 實際的效果
  1. 一個controller中可以有多個方法處理不同的請求,其中一個方法也可以處理多種請求