1. 程式人生 > >spring web mvc第一天

spring web mvc第一天

第一個 solver 運行 tco 調用 角色 servlet ret ack

    
  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第一天