---
# System prepended metadata

title: SpringMVC Debug
tags: [spring-mvc]

---

# SpringMVC Debug

> ## HTTP Status 404

* 可能的問題:
    1. web.xml路徑沒指到servlet.xml
    2. servlet.xml中的bean設置問題
    3. Controller中的RequestMapping
    4. ContextLoader Listener的錯誤可能是導入多餘或相衝突的jar包
    5. Spring Form會自動配符合path的name，不用重新給name
    6. Spring button 會自動submit form!
    
* 參考: 
    * https://blog.csdn.net/frankenjoy123/article/details/78008656
    * https://blog.csdn.net/qq_36769100/article/details/71746449

> ## HTTP Status 400

* 可能的問題:
    1. 參數型態前後端不相符
    2. 參數多傳遞
    3. RequestBody

* 參考: 
    * https://blog.csdn.net/tengdazhang770960436/article/details/54694285
    * https://www.cnblogs.com/woshimrf/p/spring-web-400.html

> ## 端口被占用

* 用 ``` netstat -aon|findstr "8080"```
* 找出占用的程序後用 ``` taskkill /f /PID pid```

> ## 一直吃不到靜態資源

* 第一種方法一直失敗: 採第二種是因為再dispatcher servlet攔截前先處理靜態資源!
* https://www.itread01.com/p/631842.html

> ## 配置正確，但404
* 往deploy path下的work/tmp看是否有殘存檔案互相衝突

> ## 沒有Error Exception的錯誤
* 查看build中的class是否正確(舊的沒清乾淨)
* 記得寫try catch
* 記得寫log

> ## 用ajax傳送json，後臺無法用request.getParameter取值
* 原因: http中帶的預設content-type與ajax POST不同，導致java後臺無法讀懂
* 解法:
    1. 改掉前台的content type:"application/x-www-form-urlencoded" 
    p.s.不須使用JSON.stringfy(data)
    2. 在後台使用requestBody接值
    注意: 在SpringMVC環境中,@RequestBody接收的是一个Json对象的字符串，而不是一个Json對象。
        所以
        第一：@RequestBody需要接的參数是一个String化的json，前台js可以直接使用JSON.stringify(json)这个方法来轉化；

        第二：从@RequestBody名稱上来看，也就是说要讀取的數據在body裡，所以要發post请求；
        第三：@RequestBody接收的是一个String的Json，那么要設置请求contentType，contentType:"application/json，明確的告诉Server發送的内容是json。
* 參考:https://blog.csdn.net/u010648555/article/details/79084466

###### tags: `spring-mvc`
