1. 程式人生 > >總結了一些springmvc的一些重點知識,簡單易懂01

總結了一些springmvc的一些重點知識,簡單易懂01

  • 檢查不細心錯誤:

1.database.properties          檢視資料庫名稱是否對應
2.applicationContext.xml      檢視mapper.xml對映檔案
3.PersonMapper.xml            檢視對映namespace="cn.bdqn.dxp.mapper.PersonMapper" 對應mapper層
4.sellect                                檢視resultType="cn.bdqn.dxp.entity.Person"       對應實體
5.insert delete update           檢視parameterType="cn.bdqn.dxp.entity.Person"      對應實體

 

  • 一.基本型別,包裝型別的繫結
  1. A.基本資料型別           (Int)不可以為null
  2. B.包裝型別                  (Integer)可以為空
  • 二.絕對路徑

${pageContext.request.contextPath}用於解決使用相對路徑時出現的問題,它的作用是取出所部署專案的名字。
絕對路徑:<img src="/專案名稱/images/front/xnw3.jpg"/>
相對路徑:<img src="images/front/xnw3.jpg"/>

  • 三.mvc配置對映路徑問題

指定springmvc配置檔案的路徑,如果要省略,必須放到 預設路徑:
/WEB_INF/springDispatcherServlet-servlet.xml
/WEB_INF/servletname的值-servlet.xml

對映是 去匹配@RequestMapping註解,可以和方法名,類名不一致
通過method指定  請求方式(get post delete put)查 增 刪 改
@RequestMapping(value = "/welcome",method = RequestMethod.POST)//對映,預設請求是get

  • 四.引數使用

params = {"name2=zs","age!=23","!=height"}
name2:必須有name="name2"引數

age!=23:

     a.如果有age則age的值不能是23,
     b.!=23不傳引數age可以直接跳轉

height:     不能有height否則報錯

  • ant風格

          <!--ant風格 ,*  代表任意目錄-->
          <!--ant風格, ?代表單個字元-->

<a href="/welcome3/asdasasdasd/test">springmvc  /welcome3/**/test</a>
<a href="/welcome4/a1c/test">springmvc  /welcome4/a?c/test</a>

 

  • REST風格:軟體程式設計風格

Springmvc: GET POST DELETE PUT 
                      查      增       刪        改
普通瀏覽器 只支援get post方式;其他請求方式 如delete put請求是通過(過濾器)加入的

  • HiddenHttpMenthodFilter

    請求方式之前是post,get不用管

    過濾的條件:

    1.type="hidden"隱藏域
    2. name="_method"
    滿足這2個條件,進行攔截
    3. 如果value="delete或put"

     請求變成delete或put

    <input type="hidden" name="_menthod" value="delete或put"/>

  • 1.springmvc實現過濾器的支援

    <!--過濾器:給普通瀏覽器增加put|delete請求方式-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <!--mvc為/,過濾器為/*-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  • 2.表單

    <!--過濾器,刪,必須加隱藏域-->
<form action="/testRest/1234" method="post">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="刪">
</form>
    a.必須是post方式
    b.通過隱藏域   的value值 設定實際的請求方式 DELETE或PUT
    c.控制器

  • 通過@PathVariable獲取動態引數

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.POST)
    public String testPost(@PathVariable("id") Integer id) {
        System.out.println("post:增" + id);
        //Service層實現  真正的增
        return "/view/success";//預設使用的是轉發,不帶資料,速度比較快
    }

  • 3.通過      RequestMethod.DELETE   匹配具體請求方式

當對映名相同時@RequestMapping(value = "/testRest"),可以通過method指定不同的請求。

過濾器中 處理put或delete請求的部分原始碼:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        HttpServletRequest requestToUse = request;
        if ("POST".equals(request.getMethod()) && request.getAttribute("javax.servlet.error.exception") == null) {
            String paramValue = request.getParameter(this.methodParam);
            if (StringUtils.hasLength(paramValue)) {
                requestToUse = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, paramValue);
            }
        }

        filterChain.doFilter((ServletRequest)requestToUse, response);
    }
原始請求:request,改請求預設只支援get  post  header
如果是“POST” 並且有隱藏域  <input type="hidden" name="_method" value="DELETE">
過濾器  將原始的請求 request加入新的方式,並將原始請求  轉為requestToUse請求
最會將requestToUse  放入   請求鏈中,  後續再使用request時   實際就使用改造後的requestToUse

 

  • @RequestParam傳引數

(@RequestParam("uname") String name,@RequestParam(value = "uage", required = false, defaultValue = "20") Integer age)

@RequestParam("uname"):接收前臺傳遞的值,等價於request.getParmeter(""uname)

required=false:該屬性  不是必須的。
defultValue=“23”:默 認值是23,這裡注意值必須加“”(雙引號)

  • 獲取請求頭資訊     @RequestHeader

     * 拿到請求頭資訊,通過@RequestHeader("Accept-Language") String al  
         * Accept-Encoding  請求頭
          * 拿到 zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2


 

  • @CookieValue

 (前置知識:伺服器在接收服務端第一次請求時,會給客戶端分配一個session(該session包含一個sesessionId)),並且服務端會在第一次響應客戶端時,將該sessionId賦值給    JSESSIONID 並傳遞給客戶端的cookie中)
1.session(sessionId)→Cookie(JSESSIONID)
2.最後Cookie(JSESSIONID)放在客戶端,

 

  • 總結:

springMVC處理各種引數的流程/邏輯:
請求:前端傳送請求a->@RequestMapping("a")
處理請求中的引數xyz:
    @RequestMapping(“a”)
    public string aa(@Xxx註解(“args”)args)
    {

    }
         

使用(實體類Student)物件接收請求引數

SpringMVC中使用原生態Servlet API :HttpServletRequest:直接將  servlet-api 中的類、介面等寫在SrpingMVC的介面中即可。
@RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request) {
        request.getParameter("uname");
        System.out.println(request);
        return "/view/success";
    }