<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    開始Spring MVC

    建立一個(gè)web project,并導(dǎo)入spring 3.x的jar包配置web.xml根據(jù)上面的spring mvc流程圖,我們知道DispatcherServlet是spring mvc 的一個(gè)前端控制器,所以我們當(dāng)然要去配置它,以便于將請(qǐng)求轉(zhuǎn)給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在初始化的過程中需要一個(gè)配置文件來生產(chǎn)文件中的各種bean,并生成WebApplicationContext對(duì)象,保存到ServletContext中(如果DispatcherServlet有多個(gè),那么每一個(gè)DispatcherServlet都對(duì)應(yīng)一個(gè)WebApplicationContext),我們可以在Servlet的init-param中配置配置文件的路徑,當(dāng)然如果我們沒有配置Init-Param,它會(huì)默認(rèn)到WEB-INF的文件夾中找[servletname]-servlet.xml文件,例如上面如果我們沒有配置,則會(huì)去尋找dispatcher-servlet.xml這個(gè)配置文件。(在init-param中我們可以指定多個(gè)配置文件,用逗號(hào)分隔也可以使用通配符*)
    配置上文中我們指定的所需的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,所以這里指定了需要被掃描的包路徑,如果有多個(gè)可以使用逗號(hào)分隔
    <mvc:annotation-driven />

    上面的spring mvc流程圖中我們知道DispatcherServlet接管請(qǐng)求后,會(huì)由HandlerMapping來執(zhí)行映射,所以我們需要注冊(cè)HanlderMapping,比如上面的標(biāo)簽會(huì)自動(dòng)注冊(cè)比如DefaultAnnotationHandlerMapping(執(zhí)行請(qǐng)求到Controller的映射)和AnnotationMethodHandlerAdapter(調(diào)用controller中的方法)這樣的bean,當(dāng)然這個(gè)標(biāo)簽還提供了其他的一些支持(更多介紹請(qǐng)參照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處理完畢后會(huì)交給一個(gè)ViewResolver進(jìn)行處理,大體上是解析視圖邏輯名并經(jīng)過一定的處理獲取一個(gè)視圖,這里的意思是設(shè)置視圖用jsp來處理(比如我們?cè)O(shè)置viewClass為JstlView)來進(jìn)行處理,就是以forward的形式轉(zhuǎn)發(fā)給jsp,這個(gè)地址是:/WEB-INF/views/[controller返回值].jsp ,當(dāng)然視圖解析器可以定義多個(gè),(視圖解析器不會(huì)處理ModelAndView中已經(jīng)設(shè)置了View的請(qǐng)求,因?yàn)橐呀?jīng)有View來處理了,那當(dāng)然就不需要它來解析到真正的視圖View啦)
    編寫Controller控制器這里我們使用例子的形式來說明

    實(shí)現(xiàn)一個(gè)控制器類@Controller
    @Controller
    @RequestMapping(
    "/user")
    public class UserControl {

    }

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


    定義一個(gè)接管請(qǐng)求的方法方法名:無任何要求
    --------------------------------------------------------------
    參數(shù):(順序以及個(gè)數(shù)無任何要求)
    HttpServletRequest
    HttpServletResponse
    PrintWriter 相當(dāng)于HttpResponse.getWriter()獲得的對(duì)象
    Map 其實(shí)是獲得了ModelAndView中的Model
    BindingResult 綁定數(shù)據(jù)的處理結(jié)果
    HttpSession 如果使用此參數(shù),需要注意如果是第一次訪問還沒有session的話會(huì)報(bào)錯(cuò)
    @PathVariable 用于接收路徑變量
    @RequestParam 相當(dāng)于調(diào)用request.getParameter(“name”)方法
    @CookieValue 獲取cookie的值
    @RequestHeader 獲取header中的值
    實(shí)體對(duì)象 會(huì)根據(jù)請(qǐng)求的參數(shù)名,注入到這個(gè)對(duì)象對(duì)于得屬性中,必須提供set方法
    等等等等等
    --------------------------------------------------------------
    返回值:
    void
    返回值是void,如果接收了PrintWriter 或者 HttpServletResponse 參數(shù),那么返回的ModelAndView就是null,也就是直接將輸出流輸出到客戶端,如果方法沒有接收輸出參數(shù),后面會(huì)默認(rèn)生成一個(gè)視圖名

    String 視圖邏輯名

    ModelAndView 是一個(gè)視圖邏輯名+Map的封裝類
    其他任意類型 存入ModelAndView中的Model
    --------------------------------------------------------------

    不管我們的返回類型是什么,返回值會(huì)通過處理,最終返回一個(gè)ModelAndView或者null
    例1:給方法定義一個(gè)請(qǐng)求映射并使用路徑變量 @RequestMapping("/id/{userid}/name/{username}")

    @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 就能進(jìn)入上面的方法
    RequestMapping還可以使用通配符,如: /test/*/name/{name}

    例2:接受請(qǐng)求參數(shù)@RequestMapping("/save")
    @RequestMapping("/save")
    public String save(@RequestParam("userName") String userName,@RequestParam("Age"int age) {
           System.out.println(userName);
           System.out.println(age);
           
    return "Home";
    }


    例3:請(qǐng)求參數(shù)直接注入到Model@RequestMapping("/save")
    @RequestMapping("/save")
    public String save(User user) {
           System.out.println(user.getUserID());
           System.out.println(user.getUserName());
           
    return "Home";
    }

    例4:轉(zhuǎn)發(fā)與重定向轉(zhuǎn)發(fā): (相當(dāng)于 request.getRequestDispatcher(“”).forward(request, response))
    return “forward:/user/test”;

    重定向: (相當(dāng)于response.redirect(“”))
    return “redirect:/user/test”
    return “redirect:http://www.google.com.hk”;

    例5:根據(jù)HttpMethod來過濾請(qǐng)求
    @RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.POST}
    public String helloworld() {
    }
     


    例6:根據(jù)參數(shù)來進(jìn)行過濾
    @RequestMapping(params="hello=world", method={RequestMethod.GET, RequestMethod.POST})  
    public String helloworld() {
    }
      

    必須有個(gè)hello的參數(shù)并且名稱為world,而且只能是get或post請(qǐng)求才會(huì)進(jìn)入此方法

    http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315425.html

    posted on 2012-03-29 19:06 paulwong 閱讀(1159) 評(píng)論(0)  編輯  收藏 所屬分類: SPRING MVC

    主站蜘蛛池模板: 99精品免费视频| 国产国产人免费视频成69堂| 2015日韩永久免费视频播放 | 亚洲欧洲视频在线观看| 亚洲AV香蕉一区区二区三区| 国产免费无码AV片在线观看不卡| 一二三四免费观看在线电影| 区久久AAA片69亚洲| 国产色在线|亚洲| gogo免费在线观看| 人禽杂交18禁网站免费| 亚洲情综合五月天| 亚洲乱码av中文一区二区| 国偷自产一区二区免费视频| 国产精品免费一级在线观看| 亚洲国产成人私人影院| 香蕉97碰碰视频免费| 国产91免费视频| 亚洲人成人无码网www电影首页| 亚洲色偷偷色噜噜狠狠99| 久久青草免费91线频观看不卡| 国产精品四虎在线观看免费| 亚洲精彩视频在线观看| 精品人妻系列无码人妻免费视频| 久久不见久久见免费影院 | 久久狠狠高潮亚洲精品| 一道本不卡免费视频| 久久精品免费一区二区喷潮| 久久精品国产亚洲AV麻豆~| 水蜜桃视频在线观看免费| 国产一卡2卡3卡4卡2021免费观看| 亚洲色大成网站WWW久久九九| 男男gay做爽爽的视频免费| 麻豆一区二区免费播放网站| 久久精品亚洲中文字幕无码网站| 黄色一级视频免费| 精品国产免费观看| 亚洲国产精品综合福利专区| 欧洲人成在线免费| 亚洲中文字幕第一页在线| 水蜜桃视频在线观看免费|