首頁 >Java >java教程 >SpringMVC基礎配置的詳細介紹

SpringMVC基礎配置的詳細介紹

不言
不言轉載
2018-09-30 16:04:532214瀏覽

這篇文章帶給大家的內容是關於SpringMVC基礎配置的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

今天我們來說說SpringMVC的基礎配置。目前越來越多的主流框架都支援註解,同時我們無敵的Spring也支援基於註解的"零配置"。

註解相比XML的優點:它可以充分利用Java的反射機制來取得類別中的結構信息,這些資訊可以有效減少配置的工作,註解和Java程式碼位於一個檔案中,更有利於維護。

注意:必須在Spring2.5版本之後才可以使用註解方式。

註解方式將Bean的定義資訊和Bean的實作類別結合在一起,Spring提供的註解有。

@Component:宣告一個普通的Bean類別

@Repository:宣告一個持久層Dao類別

@Service:宣告一個業務層類別

@Controller:宣告一個控制器類別

這4個註解相信小夥伴們已經非常的熟悉了,廢話就少說了。我們使用註解千萬不要忘了在類別中掃描! ! !

@RequestMapping(非常核心的註解),這個註解是用來指定控制器的請求URL。

在控制器的類別定義:提供初步的映射訊息,為該類別下所有請求方法添加一個前綴。

在控制器類別中的方法定義:提供進一步的映射訊息,提供方法的請求路徑

DispacherServlet截獲請求後,就透過控制器上的@RequestMapping提供的映射資訊確認請求所對應的處理方法。

@Controller
@RequestMapping("user")
public class UserController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

這時候我們要求的路徑是http://localhost:8080/SpringMvcDemo2/user/hello

@RequestMapping除了映射請求URL請求,還可以使用請求方法,請求參數和請求頭的請求,註解中有幾個參數:

1)value:表示請求的URL

2)method:表示請求的方式(GET/POST)

3)params:表示請求的參數

4)heads:請求頭

他們之間的是與的關係,聯合使用多個請求可以讓請求更加的精確化。

@RequestMapping(value="hello2",method=RequestMethod.POST,params={"username","userpass"},headers="contentType=text/*") 
   public String hello2(){
           return "hello";
    }

這段程式碼表示,請求的位址是hello請求方式為Post必須帶username,userpass兩個參數,請求頭contentType必須是text/開頭。我們可以寫兩個URL一樣的方法,請求方式一個POST另一個GET當時會嚴格根據設定進行呼叫

#@RequestMapping同時也支援Ant風格的URL,在Ant中支援3種通配符。

? :表示配置一個字元。

*:符合任意字元

**:符合多層路徑

#在SpringMVC中對參數的處理:

@pathVariable:URL範本方式

  用來映射URL中的佔位符,映射的變數名稱必須和占位符中的名稱一致,像這種我們的請求位址就會時http://localhost:8080/SpringMvcDemo2/user/testPathVariable/Miya,這個miya就是我們傳過去的參數,在傳統的URL中testPathVariable? username=miya但是這種不利於百度的收錄。

@RequestMapping("/testPathVariable/{username}")
    public String hello3(@PathVariable("username")String username){
        System.out.println("username :  " + username);        
        return "hello";
    }

@RequestParam:取得請求參數,如果請求參數名字和類型的名字一致我們可以省略吊這個註解,一樣可以接受到值。

@RequestMapping("/textParam")
    public String hello4(@RequestParam("username")String username,@RequestParam("userpass")String userpass){
        System.out.println("userpass :  " + userpass);        
        return "hello";
    }

@RequestHeader:取得請求頭的參數

  在這裡有三個參數,value:指定參數的名稱,required:指定參數是否為必填,defualtValue:指定參數的預設值。

@RequestMapping("/testRequestHeader")
    public String hello5(@RequestHeader("Accept-Language") String language){
        System.out.println("language=" + language);       
        return "hello";
    }

@CookieValue:用來取得客戶端Cookie的資訊。

@RequestMapping("/testCookieValue")    
public String hello6(@CookieValue("JSESSIONID")String sessionid){
        System.out.println("sessionid=" + sessionid);        
        return "hello";
    }

SpringMVC可以使用ServletAPI作為請求方法的參數

@RequestMapping("/testServletAPI")    
public String hello7(HttpServletRequest request,HttpServletResponse response,HttpSession session){        
//我们可以在这里使用
        return "hello";
    }

SpringMVC提供了以下幾種處理模型資料的方式。

1)ModelAndView:將處理方法的傳回類型設定為ModelAndView方法體可透過此模型物件新增模型資料。既包含視圖,也包含模型資訊

@RequestMapping("/testModelAndView")
    public ModelAndView hello8(){
        ModelAndView modelAndView = new ModelAndView("hello");
        //添加单个值
        modelAndView.addObject("h","Hello Spring MVC");        
        return modelAndView;
    }

2)Map及形參:當形參為Map,Model,ModelMap時,處理方法返回時, Map中的資料會自動加入模型中。  

  Spring MVC在內部使用了一個Model介面儲存資料的數據,在呼叫方法前會建立一個隱含的模型物件作為資料模型的儲存容器。若傳入的參數為Map,Model,當ModelMap時,SpringMVC會自動儲存到容器中

@RequestMapping("/testMap")    
public String hello9(Map<String,Object> map){
        map.put("mapdata", "map data");       
        return "hello";
    }

3)@SessionAttributes:将这个模型中的某个属性存储到Session中,以便多个请求之间共享这个属性,只能用来修饰类。在里面的方法如果参数容器中如map里卖弄保存一个与定义的属性名字相同会保存到容器中共享

4)@ModelAttribute:方法形参标记该注解后,形参对象就会放到模型中。

  SpringMVC在调用方法之前会逐个调用方法上标注了这个注解的方法。将@ModelAttribute中的属性保存到map中,可在执行表单提交生成对象之前,替换执行方法名相同的参数。

@ModelAttribute
public User getUser(){
    User user = new User();
    System.out.println("调用 getUser 方法");
    //默认保存名字为类名首字母小写的user对象到Request中
    return user;
}
@ModelAttribute
public void getUserById(Integer id,Map<String,Object> map){
    User myuser = new User();
    map.put("myuser", myuser);
    //手动指定user对象的名称,到Request中
    System.out.println("调用 getUser 方法");
}

由@SessionAttributs会引发一个很容易轻视的错误当类使用@SessionAttributes修饰,而方法中使用了和SessionAttributes修饰同名的映射参数,确没有添加@ModelAttribute修饰时,则会报错。

以上是SpringMVC基礎配置的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除