總結了一些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" 對應實體
- 一.基本型別,包裝型別的繫結
- A.基本資料型別 (Int)不可以為null
- 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";
}