Spring MVC 之註解式開發

1.案例:使用@Controller和@RequestMapping()實現歡迎程序javascript

      @controller :用於標記在一個類上,使用它標記 的類就是一個Spring MVC Controller對象,分發處理器將會掃描使用了該註解的類的方法,並檢測該方法是否使用了@RequestMapping 註解。@Controller 只是定義了一個控制器類,而使用@RequestMapping 註解的方法纔是真正處理請求的處理器。html

      @RequesrMapping():用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。java

@Controller
public class FirstController {

    @RequestMapping("/first")   
    public String doFirst(){
      return "/second.jsp";
    }
<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       ">

<!--包掃描器-->
<context:component-scan base-package="cn.happy.day04"/>
</bean?
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Second</h1>
</body>
</html>

2.一個處理類中定義N個處理器方法jquery

@Controller
public class FirstController {

    @RequestMapping("/first")   
    public String doFirst(){
      return "/second.jsp";
    }

    @RequestMapping("/second")   
    public String doSecond(){
        return "/index.jsp";
    }

3.註解式開發-----命名空間:用來區分不一樣類中的同名方法web

@Controller
@RequestMapping("/user")
public class FirstController {

    @RequestMapping("/first")   
    public String doFirst(){
      return "/second.jsp";
    }

4.註解式開發-----請求方法中的通配符用法ajax

 @RequestMapping("/first*")   //表明0個或多個字符,以first開頭就行
    public String doFirst(){
      return "/second.jsp";
    }

    @RequestMapping("/**/second")   //0級或者無限極目錄
    public String doSecond(){
        return "/index.jsp";
    }

    @RequestMapping("/*/third")   //有且只能有一級目錄
    public String doThird(){
        return "/second.jsp";

5.註解開發-----請求中方式的定義spring

     對於@RequestMapping,有一個屬性method,用於對被註解方法所處理請求的提交方式進行限制,只有知足該method屬性制定的提交方式,纔會執行被註解方法。   json

     method屬性的取值爲RequestMethod,是一個枚舉常量。經常使用值爲 RequestMethod.GET 與 RequestMethod.POST.瀏覽器

    @RequestMapping(value = "/first",method = RequestMethod.GET)    
    public String doFirst(){
      return "/second.jsp";
    }

6.處理器方法的參數spring-mvc

請求中所攜帶的請求參數

01.零散參數

<body>
     <form action="/second" method="post">
         登陸名:<input name="uname"/>
         <input type="submit"/>
     </form>
</body>

 @RequestMapping("/second")
 public String doFirst(String  uname){
        System.out.println(info.getUname()+"========");
        return "/first.jsp";
    }

02.校訂請求參數名

   //校驗參數名稱

    @RequestMapping("/second")
    public String doSecond(@RequestParam(value = "uname") String info){
        //value的值和表單元素的name屬性保持一致,便可實現自動裝配
        System.out.println(info+"--------");
        return "/second.jsp";
    }

03.對象參數

<body>
     <form action="/second" method="post">
         登陸名:<input name="uname"/>
         <input type="submit"/>
     </form>
</body>


    @RequestMapping("/second")
    public String doFirst(UserInfo info){
        System.out.println(info.getUname()+"========");
        return "/first.jsp";
    }

04.域屬性對象自動裝配

<body>
     <form action="/second" method="post">
         登陸名:<input name="uname"/>
         汽車品牌1:<input name="car.brand"/>
         <input type="submit"/>
     </form>
</body>


    @RequestMapping("/second")
    public String doFirst(UserInfo info){
        System.out.println(info.getUname()+"========");
        System.out.println(info.getCar().getBrand()+"----------");
        return "/first.jsp";
    }

05.對象集合的自動綁定

<body>
     <form action="/second" method="post">
         登陸名:<input name="uname"/>
        汽車品牌1:<input name="userCars[0].brand"/>
         汽車品牌2:<input name ="userCars[1].brand"/>
         <input type="submit"/>
     </form>
</body>


    @RequestMapping("/second")
    public String doFirst(UserInfo info){
        System.out.println(info.getUname()+"========");
        System.out.println(info.getUserCars().get(0).getBrand());
        System.out.println(info.getUserCars().get(1).getBrand());
        return "/first.jsp";
    }

06.亂碼解決

<!--編碼過濾器-->
  <filter>
    <filter-name>CharEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  
  <filter-mapping>
    <filter-name>CharEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

07.路徑變量@PathVariable  

     對於處理器方法中所接收的請求參數,能夠來自於請求中所攜帶的參數,也能夠來自於請求的url中所攜帶的變量,即路徑變量。不過,此時須要藉助@PathVariable註解

    @PathVariable在不指定參數的狀況下,默認其參數名即路徑變量名與用於接受其信息的屬性名相同。若路徑變量與用於接受其信息的屬性名不一樣,則@PathVariable可經過參數指出路徑變量名稱。 

   //路徑變量
    @RequestMapping(value="/{rname}/{age}/second")
    public String doThid(@PathVariable("rname") String name,@PathVariable int age){
        System.out.println(name);
        System.out.println(age);
        return "/second.jsp";
    }

08.處理器方法的返回值

001. void ajax

1》引入jar包

    <!--alibaba的 fastjson-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.31</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.1</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
    </dependency>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="/js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function(){
            $.ajax({
                url:"/toJson",
                type:"post",
                data:"",
                success:function(data){
                    alert(data.toString())
                }
            })
        })
    </script>
</head>
<body>

</body>
</html>
    @RequestMapping("/toJson")
    public void doFirst(HttpServletRequest request ,HttpServletResponse response)  {
        List<User> list = new ArrayList<User>();
        User u1 = new User();
        u1.setAge(18);
        u1.setName("tom");

        User u2 = new User();
        u2.setName("lucy");
        u2.setAge(20);

        list.add(u1);
        list.add(u2);
        String result = JSON.toJSONString(list);
        try {
            response.getWriter().write(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

002.Object類型

    因爲返回Object數據,通常都是將數據轉化爲JSON對象後傳遞給瀏覽器頁面的。而這個由Object轉換爲Json,是有Json工具完成的。因此須要導入jar包(上述三個就是),將Object數據轉化爲json數據,須要Http消息轉換器HttpMessageConverter完成,而轉換的開啓,須要由<mvc:anntation-driven/>來完成,當spring容器進行初始化過程當中,在<mvc:anntation-driven/>處建立註解驅動是,默認建立了七個HttpMessageConverter對象。也就是說,咱們註冊<mvc:anntation-driven/>,就是爲了讓容器爲咱們建立HttpMessageConverter對象。  

<!--註解驅動-->
   <mvc:annotation-driven/>
@RequestMapping("/jsonObject")
    @ResponseBody
    public Object doSecond(){
        List<User> list = new ArrayList<User>();
        User u1 = new User();
        u1.setAge(18);
        u1.setName("tom");

        User u2 = new User();
        u2.setName("lucy");
        u2.setAge(20);

        list.add(u1);
        list.add(u2);

        return list;
    }
相關文章
相關標籤/搜索