1. 程式人生 > >dotNet程序員的Java爬坑之旅(三)之spring MVC篇一

dotNet程序員的Java爬坑之旅(三)之spring MVC篇一

www. let ref ide filter ESS pro enc require

使用maven構建springMVC項目,開發工具為IDEA

一、構建Maven項目,模板為WebApp

二、在pom文件中配置SpringMvc配置(springMvc需要以來servlet ,如本地沒有servlet的包,需要引入)如下:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>

<!-- https://
mvnrepository.com/artifact/javax.servlet/servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>

三、在web.xml中配置核心servlet(contextConfigLocation 表示spring的配置文件所在的位置,有三種設置方式,我們這裏只說其中一種我個人比較喜歡的方式

<servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

四、在resources目錄下配置xml文件(spring.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    ">

    <!--配置包掃描-->
    <context:component-scan base-package="com.web"/>

    <!--配置路徑解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

五、創建對於的controller類,設置註解,如下:

@Controller/*表示此類為控制器類*/
@RequestMapping("/hell")/*表示此控制器的路徑*/
public class HellorWordController {

    @RequestMapping("/world")/*表示此方法的訪問路徑*/
    @ResponseBody/*表示將返回指展示在web頁面*/
    public String hell(){
        return "Hello World";/*一般表示view的路徑名稱,和配置中的前後綴拼接成view頁面的完整路徑*/
    }
}

六、設置tomcat,啓動。目前爲止一個基礎的springMVC項目,直接啓動訪問對應的路徑即可

七、@RequestMapping註解詳解:

  @RequestMapping("/path"):映射請求,映射請求參數&請求頭,處理模型數據,視圖和視圖解析器。除了修飾方法,也可以修飾類。

  根據value屬性設置訪問路徑
  根據method屬性設置訪問方式(例子:@RequestMapping(value = "/world",method = RequestMethod.GET))
  根據規則設置參數,例:@RequestMapping(value = "/world",method = RequestMethod.GET,params = {"username","age!=10"})具體如下:

技術分享圖片

  url路徑映射可使用通配符方式

技術分享圖片

  解析佔位符:

技術分享圖片

  REST Full 方式的請求
    首先在web.xml中配置filter
    該filter 會監控全部請求,如果請求中包含_method 參數
    _method 可以設置為 delete or put
    過濾器會根據參數轉換成對應類型的請求。
    註:只能轉換post請求

<!--配置rest 轉換配置,轉換post請求為delete 或 put-->
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  獲取請求參數

/*映射請求參數
 * @RequestParam(value="請求參數名稱")
 * required = true 表示是否必須
 * defaultValue = "設置默認值"
* */
@RequestMapping("/requestParam")
public String requestParam(@RequestParam(value = "name",required = true,defaultValue = "小王")String name,
                           @RequestParam("age") int age){

    return "page";
}

  獲取請求頭信息

技術分享圖片

  根據cookie名稱獲取cookie數據

/*
根據cookie名稱獲取cookie信息
 */
@RequestMapping("/cookie")
public String cookieValue(@CookieValue("cookie名稱")String cookie){
    return "page";
}

八、使用POJO對象綁定請求參數值

SPring Mvc 會按請求參數名和POJO屬性名進行自動匹配,自動為該對象填充屬性值。支持級連屬性。如:dept.depId、dept.address.tel等,具體實現如下:

  控制器層:

  技術分享圖片

  page層:表單內輸入框的name屬性名稱應當於實躰類內部定義的屬性的名稱一致,如果使用的是restfull風格,則需要定義name屬性為_method名稱的隱藏控件,控件的value值為需要轉換的請求方式。

九、使用servlet原聲的api作爲參數

技術分享圖片技術分享圖片

十、處理模型數據(1)

  技術分享圖片技術分享圖片

十一、處理模型數據(2)map

  技術分享圖片

十二、@SessionAttributes

若希望在多個請求之間公用某個模型屬性數據,則可以在控制器上標註一個@SessionAttribute,springMVC將在模型中對應的屬性暫時存放在HttpSession中。
@SessionAttribute 除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的對象類型,指定那些模型屬性需要放到會話中。

  技術分享圖片

十三、@ModelAttributes

  技術分享圖片

dotNet程序員的Java爬坑之旅(三)之spring MVC篇一