1. 程式人生 > >手把手教會你如何玩轉SpringMVC

手把手教會你如何玩轉SpringMVC

一:SpringMVC處理流程



二:SpringMVC開發步驟

當然,首先都要記得導包哦!!!!!!!!

(1)SpringMVC中得前端配置器的配置

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID"version="2.5">
  3.   <display-name>SpringMvc</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>index.html</welcome-file>
  6.     <welcome-file>index.htm</welcome-file>
  7.     <welcome-file>index.jsp</welcome-file>
  8.     <welcome-file>default.html
    </welcome-file>
  9.     <welcome-file>default.htm</welcome-file>
  10.     <welcome-file>default.jsp</welcome-file>
  11.   </welcome-file-list>
  12.   <!-- 前端配置器 -->
  13.   <servlet>
  14.         <servlet-name>springmvc</servlet-name>
  15.         <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
  16.         <!-- 預設找 /WEB-INF/[servlet的名稱]-servlet.xml -->
  17.         <init-param>
  18.             <param-name>contextConfigLocation</param-name>
  19.             <param-value>classpath:springmvc.xml</param-value>
  20.         </init-param>
  21.   </servlet>
  22.   <servlet-mapping>
  23.   <servlet-name>springmvc</servlet-name>
  24.     <!--   
  25.         1. /*  攔截所有   jsp  js png .css  真的全攔截   建議不使用  
  26.         2. *.action *.do 攔截以do action 結尾的請求     肯定能使用   ERP    
  27.         3. /  攔截所有 (不包括jsp) (包含.js .png.css)  強烈建議使用     前臺 面向消費者  www.jd.com/search   /對靜態資源放行  
  28.      -->
  29.     <url-pattern>*.action</url-pattern>
  30.   </servlet-mapping>
  31. </web-app>

(2)配置springmvc.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
  4.     xmlns:context="http://www.springframework.org/schema/context"
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  7.         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
  8.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  9.  <!-- 掃描@Controler  @Service-->
  10.  <context:component-scanbase-package="hnu.scw"></context:component-scan>
  11.  </beans>

(3)編寫Controler類,進行頁面控制

  1. package hnu.scw.controler;  
  2. import org.springframework.stereotype.Controller;  
  3. import org.springframework.web.bind.annotation.RequestMapping;  
  4. import org.springframework.web.servlet.ModelAndView;  
  5. @Controller  
  6. public class SpringMvcControler {  
  7.     @RequestMapping(value="/test/study1.action")  
  8.     public ModelAndView testControler1(){  
  9.         ModelAndView modelAndView = new ModelAndView();  
  10.         modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");  
  11.         return modelAndView;  
  12.     }  
  13. }  

這上面的步驟就是一個基本的springmvc開發模式了。

三:SpringMVC架構分析圖



四:SpringMVC配置三大元件

  1. <!-- 處理器對映器 ,其實有三種這裡寫了一種,其實後面都被註解被替換,所以瞭解就好了,知道就行-->
  2. lt;!--         <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
  3.        <!-- 處理器介面卡 -->
  4. lt;!--         <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
  5.        <!-- 註解驅動 -->
  6.        <mvc:annotation-driven/>
  7.        <!-- 檢視直譯器 -->
  8.        <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
  9.         <propertyname="prefix"value="/WEB-INF/jsp/"/>
  10.         <propertyname="suffix"value=".jsp"/>
  11.        </bean>

PS:(1)如果不進行配置也可以,也可以,因為SpringMVC架構有預設配置,但是隻從3.1版之後,預設的就廢棄了,所以配置一下最好。

(2)如果配置了註解驅動,那麼處理器對映器和處理器介面卡就可以不用配置

(3)檢視直譯器主要是為了節省在Controler的頁面跳轉,將相同的程式碼進行省略。比如有很多個都是要跳轉到/WEB-INF/jsp/下面,那麼就可以將這個部分提取出來。

五:SpringMVC整合Mybatis

其實這個很簡單,如果看了我之前關於Mybatis文章的話,那麼就很明白了。

這裡所以我就不多說了,大體講解一下步驟。

(1)將spring與Mybatis整合-----------在我的Mybatis的乾貨知識文章有已經講解非常非常清楚了

(2)將SpringMVC整合到(1)中的框架中。--------------這個內容就是上面講解的整合方式了。

六:Controler層引數繫結

(1)原始引數繫結

  1. //去修改頁面 入參 id  
  2.     @RequestMapping(value = "/itemEdit.action")  
  3. //  public ModelAndView toEdit(@RequestParam(value = "id",required = false,defaultValue = "1") Integer idaaq,  
  4.     public ModelAndView toEdit(HttpServletRequest request,HttpServletResponse response  
  5.             ,HttpSession session,Model model){  
  6.         //Servlet時代開發  
  7.         String id = request.getParameter("id");       
  8.         //查詢一個商品  
  9.         Items items = itemService.selectItemsById(Integer.parseInt(id));  
  10.         ModelAndView mav = new ModelAndView();  
  11.         //資料  
  12.         mav.addObject("item", items);  
  13.         mav.setViewName("editItem");  
  14.         return mav;  
  15. }  

(2)繫結之簡單型別

  1. //去修改頁面 入參 id  
  2.     @RequestMapping(value = "/itemEdit.action")  
  3. //  public ModelAndView toEdit(@RequestParam(value = "id",required = false,defaultValue = "1") Integer idaaq,  
  4.     public ModelAndView toEdit(Integer id ){  
  5.         //查詢一個商品  
  6.         Items items = itemService.selectItemsById(id);  
  7.         ModelAndView mav = new ModelAndView();  
  8.         //資料  
  9.         mav.addObject("item", items);  
  10.         mav.setViewName("editItem");  
  11.         return mav;  
  12.     }  
PS:1)這個等價於上面最原始的方法繫結,但是這個就有一個要求,就是在形參中的名字必須和要接受的引數名字一樣,這樣才能夠繫結成功。

    2)存在開發人員中,因為形參的名字和要接受的引數名字不一樣,比如傳過來的名字是id,但是形參又是設定為了idaao,所以這樣的情況又怎麼處理呢?其實也有處理的辦法,就是使用@RequestParm來進行處理。這個情況在上面這個例子也已經進行說明了,其中還有required這個屬性的意思就是,這個是否必須有。defaultValue屬性的含義就是設定一個預設值。

注:這個實際都不是這樣用,因為麻煩,花那麼大的功夫就是為了接受引數,而還不如直接將形參的名字改成和傳送的引數一樣,這不是多麼簡單的處理方式嘛。所以這種不建議使用哦。。。

(3)繫結之實體類物件JavaBean

  1. //提交修改頁面 入參  為 Items物件    
  2.     @RequestMapping(value = "/updateitem.action")  
  3.     public ModelAndView updateitem(Items items){  
  4.         //修改  
  5.         itemService.updateItemsById(vo.getItems());  
  6.         ModelAndView mav = new ModelAndView();  
  7.         mav.setViewName("success");  
  8.         return mav;  
  9.     }  

PS:必須保證實體類物件中的屬性和傳送過來要接受的引數名一樣。。。。切記切記!!!!!!!!!!!!!!!

(4)繫結之包裝JavaBean類物件

  1. //提交修改頁面 入參  為 Items物件    
  2.     @RequestMapping(value = "/updateitem.action")  
  3.     public ModelAndView updateitem(QueryVo vo){  
  4.         //修改  
  5.         itemService.updateItemsById(vo.getItems());  
  6.         ModelAndView mav = new ModelAndView();  
  7.         mav.setViewName("success");  
  8.         return mav;  
  9.     }  
其中的QueryVo物件程式碼如下所示:
  1. package com.itheima.springmvc.pojo;  
  2. public class QueryVo {  
  3.     //商品  
  4.     private Items items;  
  5.     public Items getItems() {  
  6.         return items;  
  7.     }  
  8.     public void setItems(Items items) {  
  9.         this.items = items;  
  10.     }  
  11. }  

(5)繫結引數之陣列------適用於比如在頁面中的checkbox元件中

  1. //刪除多個  
  2.     @RequestMapping(value = "/deletes.action")  
  3.     public ModelAndView deletes(Integer[] ids){  
  4.         ModelAndView mav = new ModelAndView();  
  5.         mav.setViewName("success");  
  6.         return mav;  
  7.     }  

(6)繫結引數之List集合-----------適用於一次性修改多個相同型別格式的資料,比如更新多個片段

包裝類程式碼:

  1. package com.itheima.springmvc.pojo;  
  2. import java.util.List;  
  3. public class QueryVo {  
  4.     private List<Items> itemsList;  
  5.     public List<Items> getItemsList() {  
  6.         return itemsList;  
  7.     }  
  8.     public void setItemsList(List<Items> itemsList) {  
  9.         this.itemsList = itemsList;  
  10.     }     
  11. }  

controller層程式碼:

  1. //修改  
  2.     @RequestMapping(value = "/updates.action",method = {RequestMethod.POST,RequestMethod.GET})  
  3.     public ModelAndView updates(QueryVo vo){  
  4.         ModelAndView mav = new ModelAndView();  
  5.         mav.setViewName("success");  
  6.         return mav;  
  7.     }  
PS:(1)對於List引數只能用包裝類去接受,而不能想當然的在形參中用List<Items> itemlist,這樣取接受,這個SpringMVC是不認識的。

(2)只是注意一點,在用的時候,就需要設定itemlist的下標,即itemlist[0]........,如下所示

  1. <c:forEachitems="${itemList }"var="item"varStatus="s">
  2. <tr>
  3.     <td><inputtype="checkbox"name="ids"value="${item.id }"></td>
  4.     <td><inputtype="text"name="itemsList[${s.index}].name"value="${item.name }"></td>
  5.     <td><inputtype="text"name="itemsList[${s.index }].price"value="${item.price }"></td>
  6.     <td><fmt:formatDatevalue="${item.createtime}"pattern="yyyy-MM-dd HH:mm:ss"/></td>
  7.     <td>${item.detail }</td>
  8.     <td><ahref="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
  9. </tr>
  10. </c:forEach>

(7)自定義引數轉換

例子:1)在開發過程中,比如填寫時間的格式的時候,本來是2017-09-11,然而填寫成了2017:09:11,這樣的話,在本身為Date型別的話,這樣就會報錯,所以為了處理這樣的需求,就可以採取引數轉換處理方法。

2)或者碰到某些固定的元件只能產生某種格式,但是這種格式又無法滿足需求,這時候就可以通過引數轉換方法將需要改變的格式進行修改,達到符合需求的作用。

步驟:(1)編寫轉換方法----也就是想進行引數轉換的方式,即由什麼格式轉為什麼格式的方法,

下面就以由yyyy:MM-dd HH_mm-ss的格式轉為正常的Date的格式的方法

  1. package com.itheima.springmvc.conversion;  
  2. import java.text.DateFormat;  
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5. import org.springframework.core.convert.converter.Converter;  
  6. /**  
  7.  * 轉換日期型別的資料  
  8.  * S : 頁面傳遞過來的型別  
  9.  * T : 轉換後的型別  
  10.  * @author lx  
  11.  *  
  12.  */  
  13. public class DateConveter implements Converter<String, Date>{  
  14.     public Date convert(String source) {  
  15.         // TODO Auto-generated method stub  
  16.         try {  
  17.             if(null != source){//2016:11-05 11_43-50  
  18.                 DateFormat df = new SimpleDateFormat("yyyy:MM-dd HH_mm-ss");  
  19.                 return df.parse(source);  
  20.             }  
  21.         } catch (Exception e) {  
  22.             // TODO: handle exception  
  23.         }  
  24.         return null;  
  25.     }  
  26. }  

(2)配置spring.xml

  1. <!-- 註解驅動 -->
  2.         <mvc:annotation-drivenconversion-service="conversionServiceFactoryBean"/>
  3.         <!-- 配置Conveter轉換器  轉換工廠 (日期、去掉前後空格)。。 -->
  4.         <beanid="conversionServiceFactoryBean"class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  5.             <!-- 配置 多個轉換器-->
  6.             <propertyname="converters">
  7.                 <list>
  8.                     <beanclass="com.itheima.springmvc.conversion.DateConveter"/>
  9.                 </list>
  10.             </property>
  11.         </bean>

七:SpringMVC與Struts2的區別

1、 springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過濾器。

2、 springmvc是基於方法開發(一個url對應一個方法),請求引數傳遞到方法的形參,可以設計為單例或多例(建議單例)struts2是基於類開發,傳遞引數是通過類的屬性,只能設計為多例。

3、 Struts採用值棧儲存請求和響應的資料,通過OGNL存取資料,springmvc通過引數解析器是將request請求內容解析,並給方法形參賦值,將資料和檢視封裝成ModelAndView物件,最後又將ModelAndView中的模型資料通過request域傳輸到頁面。Jsp檢視解析器預設使用jstl

八:配置web.xml設定post提交的亂碼處理

  1. <!-- 處理POST提交亂碼問題 -->
  2.   <filter>
  3.     <filter-name>encoding</filter-name>
  4.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  5.     <init-param>
  6.         <param-name>encoding</param-name>
  7.         <param-value>UTF-8</param-value>
  8.     </init-param>
  9.   </filter>
  10.   <filter-mapping>
  11.     <filter-name>encoding</filter-name>
  12.     <url-pattern>*.action</url-pattern>
  13.   </filter-mapping>

九:@ResuletMapping的適用

(1) 限定GET方法

@RequestMapping(method = RequestMethod.GET)

如果通過POST訪問則報錯:

HTTP Status 405 - Request method 'POST' not supported

例如:

@RequestMapping(value ="itemList",method = RequestMethod.POST)

(2) 限定POST方法

@RequestMapping(method = RequestMethod.POST)

如果通過GET訪問則報錯:

HTTP Status 405 - Request method 'GET' not supported

(3) GETPOST都可以

@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

(4)限定Controller中的URL訪問方法必須以某字串開頭

class上新增@RequestMapping(url)指定通用請求字首, 限制此類下的所有方法請求url必須以請求字首開頭

(5)為方法配置多個訪問URL路徑

value的值是陣列,可以將多個url對映到同一個方法,比如:

  1. @RequestMapping(value = {"/item/scw.action","/item/haha.action"})  

十:Controller層的返回值

(1)ModelAndView-----controller方法中定義ModelAndView物件並返回,物件中可新增model資料、指定view。

(2)String

效果一:邏輯檢視名---------controller方法返回字串可以指定邏輯檢視名,通過檢視解析器解析為物理檢視地址。

  1. //指定邏輯檢視名,經過檢視解析器解析為jsp物理路徑:/WEB-INF/jsp/itemList.jsp  
  2. return "itemList";  

效果二:Redirect重定向---Contrller方法返回字串可以重定向到一個url地址

如下商品修改提交後重定向到商品編輯頁面。

  1. /**  
  2.  * 更新商品  
  3.  *   
  4.  * @param item  
  5.  * @return  
  6.  */  
  7. @RequestMapping("updateItem")  
  8. public String updateItemById(Item item) {  
  9.     // 更新商品  
  10.     this.itemService.updateItemById(item);  
  11.     // 修改商品成功後,重定向到商品編輯頁面  
  12.     // 重定向後瀏覽器位址列變更為重定向的地址,  
  13.     // 重定向相當於執行了新的request和response,所以之前的請求引數都會丟失  
  14.     // 如果要指定請求引數,需要在重定向的url後面新增 ?itemId=1 這樣的請求引數  
  15.     return "redirect:/itemEdit.action?itemId=" + item.getId();  
  16. }  

效果三:forward轉發-------Controller方法執行後繼續執行另一個Controller方法

如下商品修改提交後轉向到商品修改頁面,修改商品的id引數可以帶到商品修改方法中。

  1. /**  
  2.  * 更新商品  
  3.  *   
  4.  * @param item  
  5.  * @return  
  6.  */  
  7. @RequestMapping("updateItem")  
  8. public String updateItemById(Item item) {  
  9.     // 更新商品  
  10.     this.itemService.updateItemById(item);  
  11.     // 修改商品成功後,重定向到商品編輯頁面  
  12.     // 重定向後瀏覽器位址列變更為重定向的地址,  
  13.     // 重定向相當於執行了新的request和response,所以之前的請求引數都會丟失  
  14.     // 如果要指定請求引數,需要在重定向的url後面新增 ?itemId=1 這樣的請求引數  
  15.     // return "redirect:/itemEdit.action?itemId=" + item.getId();  
  16.     // 修改商品成功後,繼續執行另一個方法  
  17.     // 使用轉發的方式實現。轉發後瀏覽器位址列還是原來的請求地址,  
  18.     // 轉發並沒有執行新的request和response,所以之前的請求引數都存在  
  19.     return "forward:/itemEdit.action";  
  20. }  
  21. //結果轉發到editItem.action,request可以帶過去  
  22. return "forward: /itemEdit.action";  

(3)void

Controller方法形參上可以定義requestresponse,使用requestresponse指定響應結果:

1、使用request轉發頁面,如下:

request.getRequestDispatcher("頁面路徑").forward(request, response);

request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response);

2、可以通過response頁面重定向:

response.sendRedirect("url")

response.sendRedirect("/springmvc-web2/itemEdit.action");

3、可以通過response指定響應結果,例如響應json資料如下:

response.getWriter().print("{\"abc\":123}");

程式碼測試:
  1. /**  
  2.  * 返回void測試  
  3.  *   
  4.  * @param request  
  5.  * @param response  
  6.  * @throws Exception  
  7.  */  
  8. @RequestMapping("queryItem")  
  9. public void queryItem(HttpServletRequest request, HttpServletResponse response) throws Exception {  
  10.     // 1 使用request進行轉發  
  11.     // request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,  
  12.     // response);  
  13.     // 2 使用response進行重定向到編輯頁面  
  14.     // response.sendRedirect("/springmvc-web2/itemEdit.action");  
  15.     // 3 使用response直接顯示  
  16.     response.getWriter().print("{\"abc\":123}");  
  17. }  

總結:針對三種不同的返回值,適用在不同的情況中:

對於ModelAndeView型別,是最無敵的,因為可以很方便的即返回資料,又返回檢視。。

對於String型別,是企業和官方最推薦的,其主要是返回檢視,model帶資料,並且實現解耦形式。

對於void型別,其不返回檢視,那麼就很明顯的適用於Ajax進行請求,返回Jsao格式資料足夠達到了效果。

十一:異常處理器

處理流程:


編寫異常處理器類,即繼承HandlerExceptionResolver類。

  1. package com.itheima.springmvc.exception;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import javax.servlet.http.HttpServletResponse;  
  4. import org.springframework.web.servlet.HandlerExceptionResolver;  
  5. import org.springframework.web.servlet.ModelAndView;  
  6. /**  
  7.  * 異常處理器的自定義的實現類  
  8.  * @author lx  
  9.  *  
  10.  */  
  11. public class CustomExceptionResolver implements HandlerExceptionResolver{  
  12.     public ModelAndView resolveException(HttpServletRequest request,   
  13.             HttpServletResponse response, Object obj,  
  14.             Exception e) {  
  15.         // TODO Auto-generated method stub  發生異常的地方 Serivce層  方法  包名+類名+方法名(形參) 字串  
  16.         //日誌    1.釋出 tomcat war  Eclipse  2.釋出Tomcat  伺服器上  Linux  Log4j  
  17.         ModelAndView mav = new ModelAndView();        
  18.         mav.addObject("error", "未知異常");  
  19.         mav.setViewName("error");  
  20.         return mav;  
  21.     }  
  22. }  
將異常處理配置到springmvc.xml中
  1. <!-- Springmvc的異常處理器 -->
  2.          <beanclass="com.itheima.springmvc.exception.CustomExceptionResolver"/>
另外,當發生某種自己能夠預期的異常的話,那麼就需要更友好的提示了,所以還可以自定義異常。

自定義異常程式碼:(例子)

  1. package com.itheima.springmvc.exception;  
  2. public class MessageException extends Exception{      
  3.     private String msg;  
  4.     public MessageException(String msg) {  
  5.         super();  
  6.         this.msg = msg;  
  7.     }  
  8.     public String getMsg() {  
  9.         return msg;  
  10.     }  
  11.     public void setMsg(String msg) {  
  12.         this.msg = msg;  
  13.     }     
  14. }  
所以對上面的程式改進就是,可以變成如下的形式,即可以判斷是屬於預見異常還是執行時異常了,達到更好的一種異常處理。
  1. package com.itheima.springmvc.exception;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import javax.servlet.http.HttpServletResponse;  
  4. import org.springframework.web.servlet.HandlerExceptionResolver;  
  5. import org.springframework.web.servlet.ModelAndView;  
  6. /**  
  7.  * 異常處理器的自定義的實現類  
  8.  * @author lx  
  9.  *  
  10.  */  
  11. public class CustomExceptionResolver implements HandlerExceptionResolver{  
  12.     public ModelAndView resolveException(HttpServletRequest request,   
  13.             HttpServletResponse response, Object obj,  
  14.             Exception e) {  
  15.         // TODO Auto-generated method stub  發生異常的地方 Serivce層  方法  包名+類名+方法名(形參) 字串  
  16.         //日誌    1.釋出 tomcat war  Eclipse  2.釋出Tomcat  伺服器上  Linux  Log4j  
  17.         ModelAndView mav = new ModelAndView();  
  18.         //判斷異常為型別  
  19.         if(e instanceof MessageException){  
  20.             //預期異常  
  21.             MessageException me = (MessageException)e;  
  22.             mav.addObject("error", me.getMsg());  
  23.         }else{  
  24.             mav.addObject("error", "未知異常");  
  25.         }  
  26.         mav.setViewName("error");  
  27.         return mav;  
  28.     }  
  29. }  

十二:springmvc與json資料互動

這裡要提到的一個知識點就是,對json字串的接受與傳送。。我想這個是很常見的一個開發吧。比如在ajax中傳送一個json字串過來,那麼到Controller層就需要對json串進行自動解析並且封裝到實體類物件類。。既然用了springmvc當然是已經幫我們實現好了的。

首先,先講解一下什麼叫json字串,注意是字串。。

  1. {  
  2. "id": 1,  
  3. "name": "測試商品",  
  4. "price": 99.9,  
  5. "detail": "測試商品描述",  
  6. "pic": "123456.jpg"  
  7. }  
這個是json格式的資料,然而並不是json字串,請特別的注意。。。特別的注意。。。

而上面的json格式對應的json字串應該是這樣的,
var params = '{"id": 1,"name": "測試商品","price": 99.9,"detail": "測試商品描述","pic": "123456.jpg"}';

對了,他們之間的差別就是外層多了兩個單引號,所以這就是為什麼我說的是字串!!!!!!!!!!!!

進入正題:

首先要記住導包


比如有個ajax放鬆json字串給Controller層,

  1. $.ajax({  
  2.         url : "${pageContext.request.contextPath }/json.action",  
  3.         data : params,  
  4.         contentType : "application/json;charset=UTF-8",//傳送資料的格式  
  5.         type : "post",  
  6.         dataType : "json",//回撥  
  7.         success : function(data){  
  8.             alert(data.name);  
  9.         }  
  10.     });  

PS:如果ajax要傳送json字串,那麼就必須知名contentType屬性

Controller層程式碼:

  1. //json資料互動  
  2.     @RequestMapping(value = "/json.action")  
  3.         @ResponseBody  
  4.     public Items json(@RequestBody Items items){  
  5.         System.out.println(items);  
  6.         return items;  
  7.     }  
PS:(1)是的,就是這麼簡單,如果要接受json字串將其轉為實體類,那麼用@RequestBody放在形參前面就可以讓springmvc自動處理了哦!
(2)如果要傳送的也是json格式的字串,那麼就用@ResponseBody在方法前面進行註解就可以了。。。

框架畢竟是框架,省去了很多事情,要不然還要自己進行拼接,麻煩很多。。。

十三:springmvc架構上傳圖片或者檔案(用案例來分析)

首先看看jsp的程式碼(非常簡單的就寫了點):

  1. <!-- 上傳圖片是需要指定屬性 enctype="multipart/form-data" -->
  2.     <!-- <form id="itemForm" action="" method="post" enctype="multipart/form-data"> -->
  3.     <formid="itemForm"action="${pageContext.request.contextPath }/updateitem.action"method="post"enctype="multipart/form-data">
  4.         <inputtype="hidden"name="items.id"value="${item.id }"

    相關推薦

    手把手 CSS3 3D 技術(轉載)

    是不是 col 默認 占滿 概念 ebe 說明 adb relative css3的3d起步 要玩轉css3的3d,就必須了解幾個詞匯,便是透視(perspective)、旋轉(rotate)和移動(translate)。透視即是以現實的視角來看屏幕上的2D事物,從而展現3

    手把手12306驗證碼的秘密!

    這樣的 隨機數 結構 實現 把手 session 劃分 技術交流 簡單的 12306相信對很多小夥伴都不陌生,假如問你對這個網站的印象的時候,你不是會立即想起那個坑爹的驗證碼,而正是這個驗證碼,也一時間成為小夥伴們討論的話題,今天思夢PHP就給大家帶來他的實現辦法,純屬技術

    手把手阿裏雲雙11拼團活動

    tar 數據庫 再次 發放 nbsp 新用戶 span mysql 圖片 各位新老用戶們,如果您已經開了團,但是還不知道怎麽玩?小編告訴來告訴你! 首先,進入活動主頁面,點擊【我要開團】,選擇您想要購買的雲產品進行開團!如果您只想開團不想購買,也可以~ 您開團後將

    手把手npm包

    【npm是什麼】 官網是這個:https://www.npmjs.com/, 官網介紹:npm is the package manager for javascript, npm是js的包管理器,更多的用於nodejs端。 基本上每種語言都有自己的包管理器,nodejs是

    手把手 Git

    目前國內開發人員普遍都開始使用 Git 進行專案的版本管理,如果說你還在使用 SVN 並且對 Git 一無所知的話,那我的這個 Chat 將會幫助到你。 我將手把手教你入門,並且巡迴漸進的帶入到工作的實際應用中。 在本場 Chat 中我將分享: Git 由來和 Git 的作用以及 Git

    手把手SOCKET模型之重疊I/O篇(上)

    手把手教你玩轉SOCKET模型之重疊I/O篇 “身為一個初學者,時常能體味到初學者入門的艱辛,所以總是想抽空作點什麼來盡我所能的幫助那些需要幫助的人。我也希望大家能把自己的所學和他人一起分享,不要去鄙視別人索取時的貪婪,因為最應該被鄙視的是不肯付出時的吝嗇。” -----

    Apache Beam實戰指南 | 手把手大數據存儲HdfsIO

    https 教你 存儲 http aec apache windows 手把手教你 數據存儲 https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247494843&idx=2&sn=0dd2

    手把手小程式websocket

    第一步:建立一個 WebSocket 連線 wx.connectSocket({ url: "wss://websocket.allhjs.com", }) 第二步:監聽WebSocket連線開啟 wx

    手把手Git

    文章已託管到GitHub,大家可以去GitHub檢視下載!並搜尋關注微信公眾號 碼出Offer 領取各種學習資料! 在這裡插入圖片描述 Git應用 一、初識Git 1.1 Git的簡史 同生活中的許多偉大事物一樣,Git 誕生於一個極富紛爭大舉創新的年代。 Linus在1991年建立了開源的L

    手把手 DialogFragment

    前言 本文已經收錄到我的 Github 個人部落格,歡迎大佬們光臨寒舍: 我的 GIthub 部落格 思維導圖 一、為什麼要學習 DialogFragment 你還在用 Dialog 嗎? 你還在經常煩惱於螢幕翻轉的時候,Dialog 的各種奇葩情況嗎? 你想降低耦合嗎? 如果你有其中的一個煩惱

    手把手教會如何SpringMVC

    一:SpringMVC處理流程二:SpringMVC開發步驟當然,首先都要記得導包哦!!!!!!!!(1)SpringMVC中得前端配置器的配置<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2

    劍英陪圖形學(一)打通任督二脈

    註定 輸出 加工 學生 odoo itblog 嘗試 固定 討論 1. 這是一個嘗試的系列,突發奇想覺得有聲音可能會更有趣,這個系列Blog都會出視頻有聲版。 這個系列主要是為了玩一玩代碼。 我覺得呢,寫程序是一件很有意思的事情,沒有必要搞得那麽苦大仇深。但是,卻總有那麽一

    1分鐘帶Kafka

    Kafka 分布式 消息服務 說起Kafka,許多使用者對它是又愛又恨。Kafka是一種分布式的、基於發布/訂閱的消息系統,其極致體驗讓人欲罷不能,但操心的運維、復雜的安全策略、可靠性易用性的缺失、算不上極致的性能發揮、並不豐富的消息服務功能,仍需要使用者付出諸多的背後工作。即使你是Kafka老手

    10個SecureCRT 小竅門 - 幾個?

    SecureCRT SFTP Putty 10個SecureCRT 小竅門 - 你玩轉幾個? SecureCRT,相信不用我過多介紹了吧,一款通過telnet,ssh登錄遠端設備的終端軟件。 無論是搞網絡的,做系統的甚至寫程序的,連接設備必用軟件,容易上手,穩定性高,功能強大。 但是,面對Sec

    資深程序員帶深度學習中的正則化技術(附Python代碼)!

    c51 進行 ros batch num 簡單的 oat 深度學習 repr 目錄 1. 什麽是正則化? 2. 正則化如何減少過擬合? 3. 深度學習中的各種正則化技術: L2和L1正則化 Dropout 數據增強(Data augmentation) 提前停止(Ear

    科普貼 | 以太坊代幣錢包MyEtherWallet使用教程,一步步教MEW

    按鈕 wid isp 查詢 到你 pan fail VC oam MyEtherWallet 是一個以太坊的網頁錢包,使用非常簡單,打開網頁就可以使用,源代碼開源,不會在服務器上存儲用戶的錢包信息如私鑰和密碼。支持 Ledger Wallet、TREZOR 等硬件錢包

    百曉生帶linux系統服務搭建系列----DNS服務的搭建一(正向解析)

    home 主配置文件 baidu 安裝環境 圖片 搭建 href ace eid DNS正向解析的搭建 實驗環境系統環境:centos6.5 安裝DNS環境軟件包rpm -ivh /mnt/Packages/bind-9.8.2-0.17.rc1.el6_4.6.x86_

    百曉生帶linux系統服務搭建系列----pxe遠程安裝服務器的搭建及無人值守安裝

    conf fig ces sys 鏡像文件 mount size set blog 實驗環境系統環境:centos6.5:程安裝服務器WIN7:客戶端一、pxe遠程安裝服務器的搭建 安裝並開啟需要的服務,tftp,ftp,dhcp。1) yum -y install t

    百曉生帶linux系統服務搭建系列----SSH遠程訪問及控制

    登入 conf rsa nag 系列 配置 上傳 我們 shel 實驗環境:linux centos 6.5*2實驗目的:用戶登錄控制及密鑰對驗證 sshd服務默認允許root用戶登錄,當在Internet中使用時這是非常不安全的。普遍的做法是先以普通用戶遠程登入,進入安全

    百曉生帶linux系統服務搭建系列----構建虛擬ApacheWeb主機

    ESS host mon conf 圖片 common roo echo 端口 虛擬Web主機指的是在同一臺服務器中運行多個Web站點,其中的每一個站點實際上並不獨自占用整個服務器,因此被稱為“虛擬”Web主機。通過Web主機服務可以充分利用服務器的硬件資源,從而大大降低網