# mvc案例操作回顧複習 ###### tags: `Java Web-mvc` review: (pro13) 1.最初的做法是:一個請求對應一個Servlet,這樣存在的問題是servlet太多了 2.把一系列的請求都對應一個Servlet,IndexServlet/AddServlet/EditServlet/UpdateServlet -> 合併成FruitServlet 通過operate的值來決定調用FruitServlet中的哪一個方法 使用的switch-case的語法 (pro14) 3.在上一個版本中,Servlet充斥著大量的switch-case,隨著項目的業務規模擴大,會有很多的Servlet,意味著有很多switch-case,是一種代碼冗餘 因此我們在Servlet中,使用反射技術,我們規定operate的值和方法名一致,那麼接收到的operate的值是什麼,我們需要調用對應的方法進行響應,如果找不到對應的方法,則拋異常 (pro15) 4.在上一個版本中,我們使用了反射技術,但是其實還是存在一定的問題:每一個servlet中都有類似的反射技術代碼。 因此繼續抽取,設計了中央控制器:DispatcherServlet DispatcherServlet這個類的工作分為兩大部分: 1.根據url定位到能夠處理這個請求的controller組件: 1)從url提取ServletPath:/fruit.do ->fruit 2)根據fruit找到對應的組件:FruitController,這個對應的依據,我們存儲在application.xml中 <bean id="fruit" class="com.atguigu.fruit.controllers.FruitController"/> 通過DOM技術,我們去解析xml文件,在中央控制器形成一個beanMap容器,用來存放所有的Controller組件 3)根據獲取到的operate的值,定位到我們FruitController中需要調用的方法 2.調用Controller組件中的方法: 1)獲取參數 獲取即將要調用的方法的參數簽名信息:Parameter[] parameters = method.getParameter(); 通過parameter.getName()獲取參數名稱 準備了Object[] parameterValues這個數組來存放對應參數的參數值 另外,我們需要考慮參數的類型問題,需要做類型轉化的工作,通過parameter.getType()獲取參數類型 2)執行方法 Object returnObj = method.invoke(controllerBean,parameterValues); 3)視圖處理 String returnStr = (String)returnObj; if(returnStr.startWith("redirect:")){ ... }else if{ ... }
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up