spring web mvc第一天
spring web mvc 感覺就是高大上啊!啥都是配置文件就能夠了。所以第一步就是弄清楚配置文件使用和總體框架的流程!
Spring web mvc最重要的當然是Controller,也就是首先要明確的就是Dispatch,它將用戶的請求轉化成Controller處理的對象。在
在Spring的Web MVC中,擔任前段控制器角色的是org.springframework.web.servlet.DispatcherServlet.DispatcherServlet負責將客戶的請求分配給控制對象。所以使用Spring Web MVC的第一步就是在Web.xml中定義DispatcherServlet.
<span style="font-family:Courier New;font-size:14px;"><servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></span>
DispatcherServlet 實例是 dispatcherServlet。從url-pattern能夠知道它攔截.do的隨意請求。“contextConfigLocation”初始參數用來設定Bean定義文件的位置與名稱。假設不設置“contextConfigLocation”初始參數,則DispatcherServlet默認會使用Servlet的名稱為前置,讀取“Servlet名稱-servlet.xml”作為其Bean定義文件。在上面的設定中則會讀取mvc-config.xml當然你也能夠定義多個Bean定義文件的來源.
<span style="font-family:Courier New;"><servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-config.xml,/WEB-INF/other-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></span>
DispatcherServlet負責分配請求至控制對象(Controller),在Spring Web MVC中,控制對象要實現org.springframework.web.servlet.mvc.Controller接口,Controller接口有一個不許實現的handleRequest()
<span style="font-family:Courier New;font-size:14px;">public interface Controller { ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; }</span>
當Controller接收到DispatcherServlet分配的請求時,會運行handleRequest()方法來處理請求,處理完畢後回傳一個org.springframework.web.servlet.ModelAndView的實例.ModelAndView包含了要呈如今View層的Model數據,以及其它View層的相關信息。
<span style="font-family:Courier New;font-size:14px;">public class HellowController implements Controller { private String viewPage。 public void setViewPage(String viewPage) { this.viewPage = viewPage; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { String user = request.getparameter("user"); retrun new ModelAndView(viewPage, "user", user); } }</span>
在這個Controller中。取得來自使用者的user請求參數。並設定在ModelAndView的實例中,在這個樣例中,高見ModelAndView的第一個自變量為要呈現的目標網頁(或資源)路徑,第二個自變量是設定用來取得Model對象的鍵(key),而第三個自變量是個View層呈現數據的Model對象我們能夠在xml文件設定Controller請求處理完成之後,所要呈現數據的網頁路徑,來看一下Bean定義文件的內容,根據web.xml中對dispatcherServlet的初始參數設定為mvc-config.xml,假設沒有初始參數的話,默認會調用dispatcherServlet-servlet.xml文件
<span style="font-family:Microsoft YaHei;font-size:14px;"> </span><span style="font-family:Courier New;font-size:14px;"><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean name="/hello.do" class="包路徑.HellowController"> <property name="viewPage"> <value>hello</vlaue> </property> </bean></span>
實際上DispatcherServlet必須依據一個HandlerMapping對象,決定請求由哪一個Controller來處理,DispatcherServlet默認使用org.springframework.web.servlet.handler.BeanNameUrlHandlerMappin,也就是依據Bean在定義時的"name"屬性及使用者請求的URL,決定使用哪一個Controller實例,比如上面的樣例。請求/.../hello.do時,DispatcherServlet依據"hello.do",決定要使用"name"為"hello.do"的Bean實例。所以依據上面的設定。就會將請求交給HelloController的實例來處理。
在Controller返回ModelAndView後,DispatcherServlet會交由ViewResolver對象來作View層的相關解析。因而你須要設置一個ViewResolver實例,在這個樣例中將一jsp作為View層技術,所以使用org.springframework.web.servlet.view.InternalResourceViewResolve。 InternalResourceViewResolver須要設置"viewClass",默認是org.springframework.web.servlet.InternalResourceView,這個類支持Servlet技術的相關資源。InternalResourceViewResolver的"prefix"和"suffix"屬性會與ModelAndView返回的路徑信息借個。比如路徑信息返回為"hello"字符串,則與以上的樣例設定結合。實際路徑就是/WEB-INF/jsp/hello.jsp。
spring web mvc第一天