2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Spring 3.x MVC 入門(mén)2 -- 通過(guò)示例初步感受spring mvc

 老鼠愛(ài)上美貓 2012-08-09

開(kāi)始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下,可以這么寫(xiě): 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在初始化的過(guò)程中需要一個(gè)配置文件來(lái)生產(chǎn)文件中的各種bean,并生成 WebApplicationContext對(duì)象,保存到ServletContext中(如果DispatcherServlet有多個(gè),那么每一個(gè) DispatcherServlet都對(duì)應(yīng)一個(gè)WebApplicationContext),我們可以在Servlet的init-param中配置配 置文件的路徑,當(dāng)然如果我們沒(méi)有配置Init-Param,它會(huì)默認(rèn)到WEB-INF的文件夾中找[servletname]-servlet.xml文 件,例如上面如果我們沒(méi)有配置,則會(huì)去尋找dispatcher-servlet.xml這個(gè)配置文件。(在init-param中我們可以指定多個(gè)配置 文件,用逗號(hào)分隔也可以使用通配符*)

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

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

 

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

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

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

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

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

    xsi:schemaLocation="

    http://www./schema/beans

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

    http://www./schema/context

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

    http://www./schema/mvc

    http://www./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>

 

配置文件說(shuō)明:

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

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

 

<mvc:annotation-driven />

上面的spring mvc流程圖中我們知道DispatcherServlet接管請(qǐng)求后,會(huì)由HandlerMapping來(lái)執(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頁(yè))。

 

<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)過(guò)一定的處理獲取一個(gè)視圖, 這里的意思是設(shè)置視圖用jsp來(lái)處理(比如我們?cè)O(shè)置viewClass為JstlView)來(lái)進(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來(lái)處理了,那當(dāng)然就不需要 它來(lái)解析到真正的視圖View啦)

編寫(xiě)Controller控制器

這里我們使用例子的形式來(lái)說(shuō)明

 

實(shí)現(xiàn)一個(gè)控制器類

@Controller

@RequestMapping("/user")

public class UserControl {

}

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

 

 

定義一個(gè)接管請(qǐng)求的方法

方法名:無(wú)任何要求

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

參數(shù):(順序以及個(gè)數(shù)無(wú)任何要求)

HttpServletRequest

HttpServletResponse

PrintWriter             相當(dāng)于HttpResponse.getWriter()獲得的對(duì)象

Map                       其實(shí)是獲得了ModelAndView中的Model

BindingResult           綁定數(shù)據(jù)的處理結(jié)果

HttpSession             如果使用此參數(shù),需要注意如果是第一次訪問(wèn)還沒(méi)有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,也就是直接將輸出流輸出到客戶端,如果方法沒(méi)有接收輸出參數(shù),后面會(huì)默認(rèn)生成一個(gè)視圖名

 

String                視圖邏輯名

 

ModelAndView        是一個(gè)視圖邏輯名+Map的封裝類

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

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

 

不管我們的返回類型是什么,返回值會(huì)通過(guò)處理,最終返回一個(gè)ModelAndView或者null

例1:給方法定義一個(gè)請(qǐng)求映射并使用路徑變量

    @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(路徑變量)

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

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

例2:接受請(qǐng)求參數(shù)

@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")

    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.”;

 

例5:根據(jù)HttpMethod來(lái)過(guò)濾請(qǐng)求

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

    public String Test(//…) {

       //…

}

 

 

例6:根據(jù)參數(shù)來(lái)進(jìn)行過(guò)濾

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

public String helloworld() {

}  

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多