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。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章