歡迎光臨
每天分享高質量文章

Java Web技術經驗總結(八)

在閑暇時間開始閱讀Spring的官方檔案,感覺收穫很大,記錄了一點筆記。

1. Web服務啟用https之後面臨效能問題,如何解決?

參考QZone的解決方法:Qzone 高效能 HTTPS 實踐

2. Spring MVC的@RequestMapping註解中

可以使用consumes限制web服務接受處理的請求,只有發來的HTTP請求頭部的Content-Type與consumes相符合時才能可以處理;可以使用produces限定HTTP響應的多媒體型別,對應的欄位是Accept。consumes和produces兩個限定不同於其他屬性,應用在method上的條件會改寫應用在type上的條件,而其他屬性則會擴充套件。

  • spring mvc官方檔案

  • http教程

3. 在Java開發中,或者需要訪問別人暴露出的HTTP介面

Java提供的API是HttpUrlConnection,不出意外得難用;這種情況下,我原來經常使用Apache提供的httpclient,也還可以。今天遇到一個不錯的開源庫——http-request,可以拿來試試。

4. @RequestMapping註解,除了支援常用的GET、PUT、POST、DELETE,也支援不常見的類似HEAD、OPTIONS。

When no HTTP methods are explicitly declared the “Allow” essay-header is set to “GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS”. Ideally always declare the HTTP method(s) an @RequestMapping
 method is intended to handle.

5. @RequestMapping方法的簽名中

ErrorsBindingResult物件一定緊跟在待系結的模型物件後面(當有多個待系結物件時,Spring將為每個待系結物件建立一個BindingResult)。如下程式碼片段不能工作:

  1. @RequestMapping(method = RequestMethod.POST)

  2. public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { ... }

正確的程式碼片段是:

  1. @RequestMapping(method = RequestMethod.POST)

  2. public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result, Model model) { ... }

6. @RequestMapping修飾的方法,引數的型別可以有很多種

無法一一列出,參考官方檔案貼個圖:

7. @RequestMapping修飾的方法

支援很多傳回型別,列舉如下:

8. 使用@RequestParam將請求引數系結到控制器的方法引數上;

使用這個註解的HTTP引數預設是必填的,可以透過將@RequestParam的required屬性設定成false來設定成非必須的;如果方法引數型別不是String型別,則Spring會進行自動型別轉換;如果@RequestParam應用在Map或者MultiValueMap型別的引數上時,Spring會使用http請求引數依次填充map。

  1. @Controller

  2. @RequestMapping("/pets")

  3. @SessionAttributes("pet")

  4. public class EditPetForm {

  5.   // ...

  6.  @RequestMapping(method = RequestMethod.GET)

  7.   public String setupForm(@RequestParam("petId") int petId, ModelMap model) {

  8.     Pet pet = this.clinic.loadPet(petId);

  9.     model.addAttribute("pet", pet);

  10.     return "petForm";

  11.   }

  12.   // ...

  13. }

9. mvc:annotation-driven標簽

在Spring MVC專案中,可以透過Java Config或者XML檔案形式開啟MVC支援,使用Java Config的配置程式碼如下:

  1. @Configuration

  2. @EnableWebMvc

  3. public class WebConfig {  }

使用XML檔案中的mvc:annoation-driven元素也可以,具體程式碼如下:

  1. xml version="1.0" encoding="UTF-8"?>

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

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

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

  5. xsi:schemaLocation=" http://www.springframework.org/schema/beans

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

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

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

  9.      

所謂開啟MVC支援,實際上是註冊了RequestMappingHandlerMappingRequestMappingHandlerAdapter,以及ExceptionHandlerExceptionResolver這些bean,使得在控制器中可以使用@RequestMapping、@ExceptionHandler這些註解。開啟MVC支援,也提供瞭如下功能:

  • 除了使用JavaBeans的PropertyEditiors完成資料系結外,也可以透過ConversionService實體實現Spring 3樣式的型別轉換;

  • 支援透過ConversionService實體和@NumberFormat註解對Number型別的引數進行格式化;

  • 支援使用@DateTimeFormat註解對Date、Calendar、Long和Joda Time型別的引數進行格式化;

  • 如果classpath中存在JSR-303 Provider,則可以使用@Valid註解驗證控制器方法中的引數的合理性;

  • 對於@RequestMapping或者@ExceptionHandler修飾的方法,如果方法引數使用@RequestBody修飾,或者方法的傳回值用@ResponseBody修飾,則支援HttpMessageConverter進行HTTP請求、響應和Java物件的互相轉換。

10. mvc:resources標簽

這個標簽用於Spring MVC的Web應用處理靜態資源請求;該標簽實際的工作類是ResourceHttpRequestHandler,它包含有幾個Resource位置屬性,可以將處理靜態資源請求——包括web應用根目錄或者classpath路徑下的靜態資源。(1)mapping屬性指的是特定的URL樣式;(2)location屬性指的是靜態資源檔案的位置;(3)cache-period屬性用於設定快取時間(利用瀏覽器快取、減小伺服器壓力。
如果使用Java Config,則對應的配置程式碼如下:

  1. @Configuration

  2. @EnableWebMvc

  3. public class WebConfig extends WebMvcConfigurerAdapter {

  4.      @Override

  5.      public void addResourceHandlers(ResourceHandlerRegistry registry) {

  6.         registry.addResourceHandler("/resources/**").addResourceLocations("/public-resources/");

  7.     }

  8.  }

如果使用XML配置,則對應的配置程式碼如下:

  1. mapping="/resources/**" location="/public-resources/"/>

mapping屬性必須是Ant樣式,由SimpleUrlHandlerMapping解析url解析;location屬性必須指定一個或者多個有效的資源目錄位置,多個資源位置可以用逗號分割。對於每個服務端接受的請求,Spring會按照location屬性指定的順序進行匹配。例如,如果某個服務提供的資源既來自web應用根目錄,又來自classpath中的/META-INF/public-web-resources目錄,則對應的Java Config程式碼如下:

  1. @EnableWebMvc

  2. @Configuration

  3. public class WebConfig extends WebMvcConfigurerAdapter {

  4.      @Override

  5.     public void addResourceHandlers(ResourceHandlerRegistry registry) {

  6.         registry.addResourceHandler("/resources/**")

  7.                 .addResourceLocations("/", "classpath:/META-INF/public-web-resources/");

  8.     }

  9.  }

同樣的功能,XML配置程式碼如下:

  1. mapping="/resources/**" location="/, classpath:/META-INF/public-web-resources/"/>

贊(0)

分享創造快樂