<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring 3.x MVC 入門2 -- 通過示例初步感受spring mvc

      開始Spring MVC

      建立一個web project,并導入spring 3.x的jar包

      配置web.xml

      根據上面的spring mvc流程圖,我們知道DispatcherServlet是spring mvc 的一個前端控制器,所以我們當然要去配置它,以便于將請求轉給DispatcherServlet處理

       

        <servlet>

          <servlet-name>dispatcher</servlet-name>

          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

          <init-param>

              <param-name>contextConfigLocation</param-name>

      <!-- 如果配置文件位于classpath下,可以這么寫: classpath:dispatcher.xml -->

              <param-value>/WEB-INF/dispatcher.xml</param-value>

          </init-param>

          <load-on-startup>1</load-on-startup>

        </servlet>

       

        <servlet-mapping>

          <servlet-name>dispatcher</servlet-name>

          <url-pattern>/</url-pattern>

        </servlet-mapping>

       

      注:由于DispatcherServlet在初始化的過程中需要一個配置文件來生產文件中的各種bean,并生成WebApplicationContext對象,保存到ServletContext中(如果DispatcherServlet有多個,那么每一個DispatcherServlet都對應一個WebApplicationContext),我們可以在Servlet的init-param中配置配置文件的路徑,當然如果我們沒有配置Init-Param,它會默認到WEB-INF的文件夾中找[servletname]-servlet.xml文件,例如上面如果我們沒有配置,則會去尋找dispatcher-servlet.xml這個配置文件。(在init-param中我們可以指定多個配置文件,用逗號分隔也可以使用通配符*)

      配置上文中我們指定的所需的dispatcher.xml文件

      <?xml version="1.0" encoding="UTF-8"?>

       

      <beans xmlns="http://www.springframework.org/schema/beans"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xmlns:p="http://www.springframework.org/schema/p"

          xmlns:context="http://www.springframework.org/schema/context"

          xmlns:mvc="http://www.springframework.org/schema/mvc"

          xsi:schemaLocation="

          http://www.springframework.org/schema/beans

          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

          http://www.springframework.org/schema/context

          http://www.springframework.org/schema/context/spring-context-3.0.xsd

          http://www.springframework.org/schema/mvc

          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

       

          <context:component-scan base-package="com.controls" />

         

          <mvc:annotation-driven />

         

          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

             <property name="prefix" value="/WEB-INF/views/"></property>

             <property name="suffix" value=".jsp"></property>

             <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>

          </bean>

         

      </beans>

       

      配置文件說明:

      <context:component-scan base-package="com.controls" />

      由于我們使用了基于注解的Controller,所以這里指定了需要被掃描的包路徑,如果有多個可以使用逗號分隔

       

      <mvc:annotation-driven />

      上面的spring mvc流程圖中我們知道DispatcherServlet接管請求后,會由HandlerMapping來執行映射,所以我們需要注冊HanlderMapping,比如上面的標簽會自動注冊比如DefaultAnnotationHandlerMapping(執行請求到Controller的映射)和AnnotationMethodHandlerAdapter(調用controller中的方法)這樣的bean,當然這個標簽還提供了其他的一些支持(更多介紹請參照spring官方文檔第455頁)。

       

      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

             <property name="prefix" value="/WEB-INF/views/"></property>

             <property name="suffix" value=".jsp"></property>

             <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>

      </bean>

      上面spring mvc流程圖的最后controller處理完畢后會交給一個ViewResolver進行處理,大體上是解析視圖邏輯名并經過一定的處理獲取一個視圖,這里的意思是設置視圖用jsp來處理(比如我們設置viewClass為JstlView)來進行處理,就是以forward的形式轉發給jsp,這個地址是:/WEB-INF/views/[controller返回值].jsp ,當然視圖解析器可以定義多個,(視圖解析器不會處理ModelAndView中已經設置了View的請求,因為已經有View來處理了,那當然就不需要它來解析到真正的視圖View啦)

      編寫Controller控制器

      這里我們使用例子的形式來說明

       

      實現一個控制器類

      @Controller

      @RequestMapping("/user")

      public class UserControl {

      }

      只要給類加上Controller的注解,并放在被掃描的包中,那么這個類就是一個控制器了,RequestMapping表明匹配的路徑,可以寫在類或者類的方法上,如果類上面有RequestMapping注解,那么其下面的方法就是相對于類上面注解地址的一個相對路徑

       

       

      定義一個接管請求的方法

      方法名:無任何要求

      --------------------------------------------------------------

      參數:(順序以及個數無任何要求)

      HttpServletRequest

      HttpServletResponse

      PrintWriter             相當于HttpResponse.getWriter()獲得的對象

      Map                       其實是獲得了ModelAndView中的Model

      BindingResult           綁定數據的處理結果

      HttpSession             如果使用此參數,需要注意如果是第一次訪問還沒有session的話會報錯

      @PathVariable           用于接收路徑變量

      @RequestParam         相當于調用request.getParameter(“name”)方法

      @CookieValue           獲取cookie的值

      @RequestHeader        獲取header中的值

      實體對象              會根據請求的參數名,注入到這個對象對于得屬性中,必須提供set方法

      等等等等等

      --------------------------------------------------------------

      返回值:

      void                 

      返回值是void,如果接收了PrintWriter 或者  HttpServletResponse 參數,那么返回的ModelAndView就是null,也就是直接將輸出流輸出到客戶端,如果方法沒有接收輸出參數,后面會默認生成一個視圖名

       

      String                視圖邏輯名

       

      ModelAndView        是一個視圖邏輯名+Map的封裝類

      其他任意類型         存入ModelAndView中的Model

      --------------------------------------------------------------

       

      不管我們的返回類型是什么,返回值會通過處理,最終返回一個ModelAndView或者null

      例1:給方法定義一個請求映射并使用路徑變量

          @RequestMapping("/id/{userid}/name/{username}")

          public String queryUser(@PathVariable("userid") long userID

                 , @PathVariable("username") String userName

                 , Map<String, User> model) {

            

             User user = new User();

             user.setUserID(userID);

             user.setUserName(userName);

            

             model.put("userInfo", user);

            

             return "Home";

          }

       

      @RequestMapping定義路由映射,其中{userid} {username} 是PathVariable(路徑變量)

      這樣我們只需訪問 http://localhost:8080/SpringMVC/user/id/10001/name/liudehua 就能進入上面的方法

      RequestMapping還可以使用通配符,如: /test/*/name/{name}

      例2:接受請求參數

      @RequestMapping("/save")

          public String save(@RequestParam("userName") String userName

                 ,@RequestParam("Age") int age) {

            

             System.out.println(userName);

             System.out.println(age);

            

             return "Home";

          }

       

       

      例3:請求參數直接注入到Model

      @RequestMapping("/save")

          public String save(User user) {

            

             System.out.println(user.getUserID());

             System.out.println(user.getUserName());

            

             return "Home";

          }

       

      例4:轉發與重定向

      轉發:   (相當于 request.getRequestDispatcher(“”).forward(request, response))

      return “forward:/user/test”;

       

      重定向: (相當于response.redirect(“”))

      return “redirect:/user/test”

      return “redirect:http://www.google.com.hk”;

       

      例5:根據HttpMethod來過濾請求

      @RequestMapping(value="", method=RequestMethod.POST)

          public String Test(//…) {

             //…

      }

       

       

      例6:根據參數來進行過濾

      @RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.POST})  

      public String helloworld() {

      }  

      必須有個hello的參數并且名稱為world,而且只能是get或post請求才會進入此方法

      posted on 2012-01-07 00:14  陽陽多  閱讀(10365)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 露脸国产精品自产拍在线观看| 四虎精品国产精品亚洲精| 无码人妻丝袜在线视频| 日韩不卡在线观看视频不卡| 日韩不卡在线观看视频不卡| 亚洲精品揄拍自拍首页一| 亚洲成在人线av无码| 最新亚洲春色av无码专区| 无码福利写真片视频在线播放| 不卡视频在线一区二区三区 | 亚洲成在人线AⅤ中文字幕| 国产中文字幕精品免费| 少妇被粗大的猛烈进出动视频 | 无码va在线观看| 97亚洲熟妇自偷自拍另类图片| 国产一区二区三区精品片| 在线亚洲妇色中文色综合| 庆安县| 在线播放国产精品三级网| 亚洲欧洲一区二区精品| 成人国产精品中文字幕| 中文字幕色av一区二区三区| 人妻日韩精品中文字幕| 亚洲 丝袜 另类 校园 欧美| 久久天堂无码av网站| 亚洲色最新高清AV网站| 欧美色欧美亚洲另类二区| 亚洲人黑人一区二区三区| 18禁精品一区二区三区| 狠狠色综合久久丁香婷婷| 五月综合网亚洲乱妇久久| 视频一区二区不中文字幕| 精品久久久久久无码国产| 国产在线一区二区不卡| 图片区 小说区 区 亚洲五月| 亚洲国产日韩伦中文字幕| 午夜成人无码免费看网站| 五月婷婷深开心五月天| 亚洲综合色在线视频WWW| 国产精品亚洲二区在线播放| 久久无码中文字幕免费影院蜜桃 |