日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring和SpringMVC总结篇

發布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring和SpringMVC总结篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:肥宅兜
鏈接:https://www.cnblogs.com/doudouxiaoye/p/5693399.html

1.為什么使用Spring ?

  • 方便解耦,簡化開發;
    通過Spring提供的IoC容器,可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。
  • AOP編程的支持;
    通過Spring提供的AOP功能,方便進行面向切面的編程,如性能監測、事務管理、日志記錄等。
  • 聲明式事務的支持;
  • 方便集成各種優秀框架;
  • 降低Java EE API的使用難度;
    如對JDBC,JavaMail,遠程調用等提供了簡便封裝
  • 2. 什么是IOC,為什使用IOC ?

    IOC全稱Iversion of Controller,控制反轉。

    這概念是說你不用創建對象,而只需要描述它如何被創建。你不在代碼里直接組裝你的組件和服務,但是要在配置文件里描述哪些組件需要哪些服務,之后一個容器(IOC容器)負責把他們組裝起來。

    它能指導我們如何設計出松耦合、更優良的程序。

    3. 什么是AOP,為什么使用AOP ?

    AOP全稱:Aspect-Oriented Programming,面向切面編程。

    AOP,面向切面編程,就是把可重用的功能提取出來,然后將這些通用功能在合適的時候織入到應用程序中,比如事務管理、權限控制、日志記錄、性能統計等。

    AOP并沒有幫助我們解決任何新的問題,它只是提供了一種更好的辦法,能夠用更少的工作量來解決現有的一些問題,使得系統更加健壯,可維護性更好。

    4. 什么是Spring的事務管理?

    事務就是對一系列的數據庫操作(比如插入多條數據)進行統一的提交或回滾操作,如果插入成功,那么一起成功,如果中間有一條出現異常,那么回滾之前的所有操作。這樣可以防止出現臟數據,防止數據庫數據出現問題。

    開發中為了避免這種情況一般都會進行事務管理。

    Spring的聲明式事務通常是指在配置文件中對事務進行配置聲明,其中包括了很多聲明屬性,它是通過Spring Proxy幫你做代理,自己不用額外的寫代碼,只要在Spring配置文件中聲明即可;通常用在數據庫的操作里面;

    編程式事務就是指通過硬編碼的方式做事務處理,這種處理方式需要寫代碼,事務中的邏輯可以自己定制;可以是數據庫的東東,也可以是其他的操作。

    Spring中也有自己的事務管理機制,一般是使用TransactionMananger進行管理,可以通過Spring的注入來完成此功能。

    5. Spring框架支持以下五種bean的作用域:

    • singleton : 默認值,bean在每個Spring ioc 容器中只有一個實例。
    • prototype:一個bean的定義可以有多個實例。
    • request:每次http請求都會創建一個bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
    • session:在一個HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
    • global-session:在一個全局的HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。

    6. 什么是Spring的MVC框架?

    Spring配備構建Web應用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也允許以聲明的方式把請求參數和業務對象綁定。

    Spring mvc是一個基于mvc的web框架。Spring mvc是Spring框架的一個模塊,Spring mvc和Spring無需通過中間整合層進行整合。

    7. 如何啟用注解:

    在spring的xml配置中添加<mvc:annotation-drivern>即可

    <?xml?version="1.0"?encoding="UTF-8"?>
    <beans?xmlns="http://www.springframework.org/schema/beans"??
    ?xmlns:context="http://www.springframework.org/schema/context"??
    ?xmlns:p="http://www.springframework.org/schema/p"??
    ?xmlns:mvc="http://www.springframework.org/schema/mvc"??
    ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
    ?xsi:schemaLocation="http://www.springframework.org/schema/beans??
    ??????http://www.springframework.org/schema/beans/spring-beans-3.0.xsd??
    ??????http://www.springframework.org/schema/context??
    ??????http://www.springframework.org/schema/context/spring-context.xsd??
    ??????http://www.springframework.org/schema/mvc??
    ??????http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    >

    ??????<!--?注解掃描?-->
    ??????<context:component-scan?base-package="club.sscai.annotation"/>
    ??????<!--使用mvc注解聲明??-->
    ??????<mvc:annotation-driven/>

    ??????<!--?不使用mvc注解聲明則要注入以下兩個bean
    ??????<bean?class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
    ??????<bean?class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    ???????-->

    ??????<bean?id="viewResolver"?class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    ????????<property?name="prefix"?value="/"></property>
    ????????<property?name="suffix"?value=".jsp"></property>
    ????</bean>
    </beans>

    8. Spring MVC的請求流程:

    • 第一步:發起請求到前端控制器(DispatcherServlet)
    • 第二步:前端控制器請求HandlerMapping查找Handler可以根據xml配置、注解進行查找
    • 第三步:處理器映射器HandlerMapping向前端控制器返回Handler
    • 第四步:前端控制器調用處理器適配器去執行Handler
    • 第五步:處理器適配器去執行Handler
    • 第六步:Handler執行完成給適配器返回ModelAndView
    • 第七步:處理器適配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一個底層對象,包括 Model和view
    • 第八步:前端控制器請求視圖解析器去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp)
    • 第九步:視圖解析器向前端控制器返回View
    • 第十步:前端控制器進行視圖渲染。視圖渲染將模型數據(在ModelAndView對象中)填充到request域
    • 第十一步:前端控制器向用戶響應結果

    9. web.xml的配置

    10. 注解的處理器映射器和適配器

  • 注解映射器
    spring3.1之前默認加載映射器是org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping,3.1之后要使用:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
    在springmvc.xml中配置RequestMappingHandlerMapping:
  • <!--?注解處理器映射器?-->
    <bean?class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
    使用RequestMappingHandlerMapping需要在Handler中使用@controller
    標識此類是一個控制器(Handler),使用@requestMapping指定Handler方法所對應的url。
  • 注解適配器
    spring3.1之前默認加載映射器是
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter,3.1之后要使用:
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
  • <!--?注解適配器?-->
    <bean?class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"?/>
    RequestMappingHandlerAdapter,不要求Handler實現任何接口,
    它需要和RequestMappingHandlerMapping注解映射器配對使用,主要解析Handler方法中的形參。

    11. spring 與 mybatis整合過程

    • 第一步:整合dao層
      mybatis和spring整合,通過spring管理mapper接口。
      使用mapper的掃描器自動掃描mapper接口在spring中進行注冊。
    • 第二步:整合service層
      通過spring管理 service接口。
      使用配置方式將service接口配置在spring配置文件中。
      實現事務控制。
    • 第三步:整合springmvc 由于springmvc是spring的模塊,不需要整合。 主要配置有:
    • mybatis配置文件sqlMapConfig.xml配置別名自動掃描(實體類)
    • mapper掃描器(接口,數據庫訪問接口)
    • 數據庫連接池配置
    • 聲明式事務配置
    • 啟用注解掃描:
    • 配置注解映射器和適配器:
    • 視圖解析器:
    • 配置控制類: DispatcherServlet前端控制器
    • 配置spring配置文件加載類:ClassLoadListener

    12. 前端控制器從上邊的文件中加載處理映射器、適配器、視圖解析器等組件,如果不在springmvc.xml中配置,使用默認加載的 DispatcherSerlvet.properties。

    13. 視圖解析器配置前綴和后綴:

    14. sqlMapConfig.xml,mybatis自己的配置文件。

    15. 配置數據源:

    16. 事務控制(applicationContext-transaction.xml),在applicationContext-transaction.xml中使用spring聲明式事務控制方法。

    17. 加載spring配置

    18. 靜態資源訪問不被攔截:

    <resources?mapping="/resources/**"?location="/resources/"?/>
    <resources?mapping="/images/**"?location="/images/"?/>
    <resources?mapping="/js/**"?location="/js/"?/>

    19. @RequestMapping的作用

  • url映射
  • 窄化請求映射
  • 限制http請求方法
  • 20. controller方法的返回值

  • 返回ModelAndView
    需要方法結束時,定義ModelAndView,將model和view分別進行設置。
  • 返回string
    如果controller方法返回string,
  • ???1).?表示返回邏輯視圖名。真正視圖(jsp路徑)=前綴+邏輯視圖名+后綴
    ???2).?redirect重定向:返回字符串格式為:"redirect:queryItem.action"
    ???3).?forward頁面轉發:返回字符串格式為:“forward:queryItem.action”
  • 返回void
    在controller方法形參上可以定義request和response,使用request或response指定響應結果:
  • ???1).?使用request轉向頁面,如下:request.getRequestDispatcher("頁面路徑").forward(request,?response);
    ???2).?也可以通過response頁面重定向:response.sendRedirect("url")
    ???3).?也可以通過response指定響應結果,例如響應json數據如下:
    ???????response.setCharacterEncoding("utf-8");
    ???????response.setContentType("application/json;charset=utf-8");
    ???????response.getWriter().write("json串");

    21. 參數綁定:

  • 默認支持的類型
    直接在controller方法形參上定義下邊類型的對象,就可以使用這些對象。在參數綁定過程中,如果遇到下邊類型直接進行綁定。
    1). HttpServletRequest:通過request對象獲取請求信息
    2). HttpServletResponse:通過response處理響應信息
    3). HttpSession:通過session對象得到session中存放的對象
    4). Model/ModelMap:model是一個接口,modelMap是一個接口實現 。作用:將model數據填充到request域。
  • 簡單類型
    通過@RequestParam對簡單類型的參數進行綁定。
    如果不使用@RequestParam,要求request傳入參數名稱和controller方法的形參名稱一致,方可綁定成功。
    如果使用@RequestParam,不用限制request傳入參數名稱和controller方法的形參名稱一致。
    通過required屬性指定參數是否必須要傳入,如果設置為true,沒有傳入參數,會報錯。
  • pojo綁定
    頁面中input的name和controller的pojo形參中的屬性名稱一致,將頁面中數據綁定到pojo。(usename,age;不需要user.username,user.age)
  • 自定義參數綁定實現日期類型綁定
    對于controller形參中pojo對象,如果屬性中有日期類型,需要自定義參數綁定。將請求日期數據串轉成 日期類型,要轉換的日期類型和pojo中日期屬性的類型保持一致。
  • 22. Spring MVC 和 Struts2 對比

  • Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC 就容易實現restful url
  • 由上邊原因,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變量,而Struts2搞的就比較亂,雖然方法
    之間也是獨立的,但其所有Action變量是共享的,這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩,每次來了請求就創建一個Action,一個Action對象對應一個request上下文。
  • 由于Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變量封裝成一個一個Map,供給每個Action使用,并保證線程安全,所以在原則上,是比較耗費內存的。
  • SpringMVC集成了Ajax,使用非常方便,只需一個注解@ResponseBody就可以實現,然后直接返回響應文本即可,而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,使用起來也相對不方便。
  • springmvc面向方法開發的(更接近service接口的開發方式),struts2面向類開發。
  • springmvc可以單例開發,struts2只能是多例開發。
  • 23. 亂碼處理

  • post亂碼
    在web.xml添加post亂碼filter:CharacterEncodingFilter
  • 對于get請求中文參數出現亂碼解決方法有兩個:
  • ???1).?修改tomcat配置文件添加編碼與工程編碼一致,如下:
    ???<Connector?URIEncoding="utf-8"?connectionTimeout="20000"?port="8080"?protocol="HTTP/1.1"?redirectPort="8443"/>

    ???2).?對參數進行重新編碼:
    ???String?userName?=?new?String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
    ???ISO8859-1是tomcat默認編碼,需要將tomcat編碼后的內容按utf-8編碼

    24. 集合類型綁定

  • 數組綁定:
    controller方法參數使用:(Integer[] itemId)
    頁面統一使用:itemId 作為name
  • list綁定:
    pojo屬性名為:itemsList
    頁面:itemsList[index].屬性名
  • map 綁定:
    pojo屬性名為:Map itemInfo = new HashMap();
    頁面:<input type="text" name="itemInfo['name']"/>
  • 25. spring 校驗

  • 項目中,通常使用較多是前端的校驗,比如頁面中js校驗。對于安全要求較高點建議在服務端進行校驗。
  • springmvc使用hibernate的校驗框架validation(和hibernate沒有任何關系)。
    校驗思路:頁面提交請求的參數,請求到controller方法中,使用validation進行校驗。如果校驗出錯,將錯誤信息展示到頁面。
  • 26. 數據回顯

  • @ModelAttribute還可以將方法的返回值傳到頁面:在方法上加注解@ModelAttribute
  • 使用最簡單方法使用model,可以不用@ModelAttribute:model.addAttribute("id", id);
  • springmvc默認對pojo數據進行回顯。pojo數據傳入controller方法后,springmvc自動將pojo數據放到request域,key等于pojo類型(首字母小寫)
  • public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接輸出
  • 27. 異常處理

    springmvc提供全局異常處理器(一個系統只有一個異常處理器)進行統一異常處理。

    系統遇到異常,在程序中手動拋出,dao拋給service、service給controller、controller拋給前端控制器,前端控制器調用全局異常處理器。

    28. 上傳圖片

  • 在頁面form中提交enctype="multipart/form-data"的數據時,需要springmvc對multipart類型的數據進行解析。
  • 在springmvc.xml中配置multipart類型解析器。
  • 方法中使用:MultipartFile attach (單個文件上傳) 或者 MultipartFile[] attachs (多個文件上傳)
  • 29. Json處理

  • 加載json轉換的jar包:springmvc中使用jackson的包進行json轉換(@requestBody和@responseBody使用下邊的包進行json轉)
  • 配置json轉換器。在注解適配器RequestMappingHandlerAdapter中加入messageConverters。如果使用 則會自動加入。
  • ajax
  • Controller (ResponseBody、RequestBody)
  • 注意ajax中contentType如果不設置為json類型,則傳的參數為key/value類型。上面設置后,傳的是json類型。
  • 詳見:http://www.cnblogs.com/Jtianlin/p/5224885.html

    30. 攔截器:

  • 定義攔截器,實現HandlerInterceptor接口。接口中提供三個方法。
    a. preHandle :進入 Handler方法之前執行,用于身份認證、身份授權,比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行
    b. postHandle:進入Handler方法之后,返回modelAndView之前執行,應用場景從modelAndView出發:將公用的模型數據(比如菜單導航)在這里傳到視圖,也可以在這里統一指定視圖
    c. afterCompletion:執行Handler完成執行此方法,應用場景:統一異常處理,統一日志處理
  • 攔截器配置:
    a. 針對HandlerMapping配置(不推薦):springmvc攔截器針對HandlerMapping進行攔截設置,如果在某個HandlerMapping中配置攔截,經過該 HandlerMapping映射成功的handler
    最終使用該 攔截器。 (一般不推薦使用)
    b. 類似全局的攔截器:springmvc配置類似全局的攔截器,springmvc框架將配置的類似全局的攔截器注入到每個HandlerMapping中

  • 我創建了一個用來記錄自己學習之路的公眾號,感興趣的小伙伴可以關注一下微信公眾號:niceyoo

    總結

    以上是生活随笔為你收集整理的Spring和SpringMVC总结篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。