亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
1. 前言

本節課程將在 SSM 的基礎上實現學生信息查詢模塊,要求不僅查詢出學生信息,還要求查詢出學生所在班級信息。本模塊功能在實現上除了整體遵循 MVC 以外,會引用業務層的概念。本節課的重點是學會靈活運用 SSM ,當然,在使用過程中,對于初學者來講,業務層的引用會增加代碼量,大家需要理解引用的目的。

4. 小結

本節課程和大家一起講解了 Spring MVC 中如何使用 Thymeleaf。使用 Thymeleaf 之前需要做些簡單的配置,一定要注意組件之間的依賴關系。本課程并沒有深入的講解 Thymeleaf 的模板語法,但其語法并不復雜 。如果你對 Thymeleaf 有興趣,可以進入官方網站了解更多。

3. 主流視圖技術

Spring MVC 可使用的視圖技術較多,本課程主要聊聊 3 大主流視圖技術。Jsp: 這個很老牌,相信大家一定知道。Jsp 模板是 J2EE 官方指定的,所以其模板引擎可由遵循 J2EE 規范的服務器實現,如 tomcat ;Freemarker: Freemarker 曾經因為 Struts MVC 風靡一時,當然,現在也很受歡迎。其模板需要自己提供的模板引擎解析;Thymeleaf: Thymeleaf 應該算是后起之秀,因為是后起之秀,會改善前輩的諸多不足,更適應現代化開發理念和習慣。Tips: 在 Servlet 的開發環境中,除了 JSP 外,其它的視圖技術都有自己的模板引擎,可以說它們都是輕量級的視圖解析器,可以在需要地方獨立運行。既然有 3 種主流視圖技術,繞不過去的當然要比較一下。首先要表態的是它們各有千秋,比較不是分輸贏,而是讓大家更好理解后在不同的場景下做出最合理的選擇。最好的比較方式就是用起來。WEB 應用程序中,動態頁面模板中的數據主要來自于不同的作用域,作用域中的數據如何來,就不需要動態模板操心。所以,對頁面模板的要求就是要簡潔、方便。Jsp 的模板很有天然優勢,但其頁面元素較多,且有些功能的實現需要借助于 JSTL (標準標簽庫)實現。且依賴于服務器容器,并不是很靈活。相信大家對 JSP 了解的也較多,這里就不再多說。Spring MVC 默認提供的 InternalResourceViewResolver 視圖解析器,就是針對 JSP 的。因為 JSP 的解析是由服務器完成的,在 Spring MVC 中配置時,只需要指定視圖位置即可。但是對于其它的視圖技術而言,除了要指定視圖的位置,還需要提供視圖解析引擎的實現。

2.2 注冊組件

MyBatis 依賴 2 個很重要的核心組件:SqlSessionFactory: 創建與數據庫的連接,用來創建管理 SqlSession 組件;SqlSession: 提供相關的數據庫操作方法。為 Spring MVC 項目添加的 mybatis-spring 依賴包中,提供了 2 個類似的組件。打開項目中的 RootConfig 類文件,在文件中添加如下的組件配置信息:@Beanpublic DataSource dataSource() { BasicDataSource basicDataSource = new BasicDataSource(); basicDataSource.setDriverClassName("com.mysql.jdbc.Driver"); basicDataSource.setUrl("jdbc:mysql://localhost:3306/mystus"); basicDataSource.setUsername("root"); basicDataSource.setPassword("abc123"); // 其它與數據庫連接池有關的配置 return basicDataSource;}@Bean(name="sqlSessionFactory")public SqlSessionFactoryBean SqlSessionFactory() { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); //注入數據源組件 sqlSessionFactoryBean.setDataSource(this.dataSource()); //指定 MyBatis 主配置文件的位置 Resource configResource=new ClassPathResource("com/hm/config/mybatis-config.xml"); sqlSessionFactoryBean.setConfigLocation(configResource); return sqlSessionFactoryBean;}@Beanpublic MapperScannerConfigurer scannerConfigurer() { //接口映射 MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer(); //依賴會話工廠 mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); //指定掃描的 DAO 接口位置 mapperScannerConfigurer.setBasePackage("com.hm.web.dao"); return mapperScannerConfigurer;}解釋一下上面的 3 個 Bean :BasicDataSource: DBCP 提供的數據源連接對象;SqlSessionFactoryBean: 用來替代 MyBatis 中的 SqlSessionFactory;MapperScannerConfigurer: 用來指定 MyBatis 映射器的位置。Tips: Spring MVC 中集成 MyBatis 時,可以讓 MyBatis 有自己獨立的配置文件,也可以沒有。但一般情況下,建議還是提供。如下面的代碼。Resource configResource=new ClassPathResource("com/hm/config/mybatis-config.xml"); sqlSessionFactoryBean.setConfigLocation(configResource);所以,需要創建一個 mybatis-config.xml 文件。

1. 前言

本節課講解 Spring MVC 提供的驗證框架,這個驗證框架屬于服務器端驗證模式。通過本章節內容的學習,你將理解 JSR 概念,并能學到驗證框架所提供的注解。本章節重點是掌握 JSR 驗證框架的使用;難點是理解其實現原理。

Django 視圖函數

Django 中的視圖是 MTV 架構模式中的 V 層,主要處理客戶端的請求并生成響應數據返回。它其實類似于 MVC 架構模式中的 C 層,用于處理項目的業務邏輯部分。Django 的視圖函數就是 Django 項目中專門處理對應 path 的 python 函數,這也是整個項目開發中最核心的業務處理部分。當然,在 Django 中處理 path 路徑的不只有視圖函數(FBV),還有視圖類(CBV)。

3.1. Freemarker 視圖技術

本小節和大家一起聊聊在 Spring MVC 中如何使用 Freemarker 視圖技術 。打開 pom.xml 文件,添加 Freemarker 依賴包;<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.1.13.RELEASE</version></dependency>新建 spring-freemarker.xml 文件,放在 src/main/resources 目錄中。新建 freemarker.properties 文件放在 src/main/resources /conf 目錄中;Tips: Spring MVC 支持 JAVA 、XML 配置,也支持兩者混合使用。Freemarker 的相關配置這里使用 XML 方法。打開 WebConfig 文件,在類名前加上 @ImportResource(value = {“classpath:spring-freemarker.xml”}) 這樣配置類和 XML 文件就可以混合使用;@Configuration@EnableWebMvc@ComponentScan(basePackages = { "com.mk.web.action" })@ImportResource(value = {"classpath:spring-freemarker.xml"})public class WebConfig implements WebMvcConfigurer { //……}在 spring-freemarker.xml 中配置 3 個 Bean。<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:conf/freemarker.properties" /></bean><!-- freeMarker 的模板路徑 --><bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="freemarkerSettings" ref="freemarkerConfiguration" /> <property name="templateLoaderPath"> <value>/WEB-INF/ftl/</value> </property></bean><!-- freeMarker 視圖解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> <property name="contentType" value="text/html; charset=utf-8" /> <property name="cache" value="true" /></bean> freemarker.properties 文件內容。用來設置 Freemarker 的工作環境;#設置標簽類型tag_syntax=auto_detect#模版緩存時間,單位:秒template_update_delay=0default_encoding=UTF-8output_encoding=UTF-8locale=zh_CN#設置數字格式 ,防止出現 000.00number_format=\##變量為空時,不會報錯classic_compatible=true在項目的 WEB-INF 目錄下新建用來存放 freemarker 模板文件的 ftl 目錄;編寫 FreemarkerAction 控制器;@Controllerpublic class FreemarkerAction { @RequestMapping("/fm") public String sayHello(ModelMap map){ map.put("name", "mk"); return "mk.ftl"; } }在 WEB-INF/ftl 下創建一個名為 mk.ftl 的模板文件;<pre name="code" class="java"> <html> <body> <h1>holle world ${name}</h1><br/> </body> </html> </pre> Tips: 每一種視圖技術都會提供自己的模板語法。FreeMarker 更多的語法元素大家可查閱 FreeMarker 官方網站 http://freemarker.foofun.cn/toc.html 。本文僅介紹在 Spring MVC 中如何使用 FreeMarker 。打開瀏覽器,地址欄中輸入 http://localhost:8888/sm-demo/fm 。瀏覽器中將顯示;

2. 攔截器的概念

攔截器是什么?攔截器就是一個功能模塊,工作模式決定了其與眾不同:非侵入式: Spring MVC 的攔截器是 AOP 編程思想的實際應用,可以在不影響服務對象代碼結構的條件下提供附加功能;動態裝配、拆卸: 需要時就裝配,不需要時可拆卸。與被服務的對象之間具有極低的耦合度。

4. 小結

本節介紹了 Spring Security 項目實現單元測試的方法,主要內容有:Spring Security 的單元測試是基于 Spring 單元測試擴展;Spring Security 的單元測試核心思想是模擬出認證用戶及相關用戶信息;Spring MVC 環境下的單元測試可以模擬各種安全頭信息及用戶認證信息。至此,關于 Spring Security 的內容就全部結束了。

4. 用戶控制器

用戶控制處理器(簡稱用戶控制器或控制器 \ 處理器)提供具體的響應用戶請求的邏輯。用戶控制器雖然由用戶自定義編寫,但也需要直接或間接遵循 Spring MVC 的控制器編寫規范。Tips: 如果說前端控制器是大門,那么用戶控制器就是具體的洽談部門。

3. Spinner 使用示例

本節仍然采用“水果列表”的示例,之前是通過 ListView、GridView 將水果類型和圖片直接羅列在屏幕上。而本節只會在屏幕上暴露出一個選項,在點擊水果的時候彈出所有的選擇項等待用戶選擇,由于 Adapter 完善的 MVC 模式,可以繼續在之前的代碼上簡單修改即可。

3. Servlet API 代理類

什么是 Servlet API 代理類?Spring MVC 在它的 org.springframework.web.context.request 包中提供的有 WebRequest 接口,此接口可以用來代理原生 HttpServletRequest 的功能。其本質就是給原生 HttpServletRequest 加了一個外殼,擴充了點功能,實質還是在使用 HttpServletRequest 的功能。這個接口或者說是與此類似的接口,大家可以作為常識性知識了解,在企業開發過程并不常用。和使用原生 Servlet API 一樣,只需要在控制器的方法中聲明成參數便可。@RequestMapping(value = "/testApi03")public String hello(WebRequest request) { String userName = request.getParameter("userName"); return "success";}

4. 使用 Flash 屬性

Spring MVC 使用重定向時,內部會做些處理,把數據以查詢字符串或變量參數方式進行傳遞。對于簡單的數據傳遞已經足夠了。如果需要傳遞一個對象,則需要把一個對象拆分后再傳遞,顯然不是一種最佳方案。Spring MVC 提供有 RedirectAttributes 組件,專用于重定向期間進行數據傳遞,其本質是把數據先保存在會話作用域中,但不會長時間占據會話存儲空間,當整個重定向結束后數據會自動從會話作用域中刪除。所以,RedirectAttributes 組件中的屬性也叫 Flash 屬性。如下面實例:用戶對象以 Flash 屬性的方式封裝在模型對象中進行傳遞。@RequestMapping("/response05") public String response06(RedirectAttributes model) throws IOException { User user=new User("mk", "123"); model.addFlashAttribute("user", user); return "redirect:/test01"; }Tips:重定向路徑 test01 是控制器中的另一個方法,如下所示。@RequestMapping("/test01") public String response07(ModelMap model) throws IOException { User user= (User) model.get("user"); System.out.println(user); return "hello"; }自然,在 hello 視圖中很便捷的就能得到數據。<body> <div style="color:red"> ${user.userName} </div> <div style="color:red"> ${user.userPassword} </div> </body>

6. 測試

在項目的 WEB-INF 目錄下新建 jsp 子目錄,在此子目錄中新建 htllo.jsp 文件,內容可任意填寫。編寫控制器實例:@Controllerpublic class HelloAction implements org.springframework.web.servlet.mvc.Controller {@RequestMapping("/hello")public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("Bean URL "); return “hello”;}}發布項目、啟動 tomcat、打開瀏覽器。在瀏覽器的地址欄中輸入:http://localhost:8888/sm-demo/hello 。如果在瀏覽器中看到下圖信息,則恭喜 Spring MVC 項目的基礎平臺搭建完成。

4. 小結

本節課程主要是和大家講解如何綁定表單中的數據。有 2 種方式,一是使用 @RequestParam 注解,另一個就是通過一個對象參數直接綁定數據。Spring MVC 的自動綁定功能非常強大。在使用的時候可根據自己的需要自行選擇。當然,以 OOP 的形式綁定數據定當是最佳、快速的選擇。

2.5 限定頭信息

所謂限定頭信息,指 Spring MVC 可以通過 HTTP 請求包中的消息頭信息進行過濾。如下面的實例:@RequestMapping(value="/test",headers="content-type=text/*")public String test(){ ... }test() 方法只會響應請求包中的內容類型為 text/* 的請求。無論是方法限定、還是參數限定或是頭信息限定,其本質都是檢查請求包是否符合條件要求。

3.2 全局異常處理器

Spring MVC 提供了名為 SimpleMappingExceptionResolver 的異常處理組件,該組件實現了 HandlerExceptionResolver 接口,或者說實現了這個接口的對象都可稱其為全局異常處理器。何謂全局異常處理器?通俗講,有點類似于前端控制器的設計思路。Spring MVC 把所有異常分離出來后通通交給全局異常處理器做集中處理。使用流程:打開項目中的 WebConfig 配置類,添加組件;@Beanpublic SimpleMappingExceptionResolver simpleMappingExceptionResolver() { SimpleMappingExceptionResolver simResolver=new SimpleMappingExceptionResolver(); //異常處理頁面 simResolver.setDefaultErrorView("error"); //封裝異常信息的屬性名,默認是 exception simResolver.setExceptionAttribute("exception"); //添加自定義異常信息 Properties mappings=new Properties(); mappings.put("com.mk.web.exception.MyException", "/WEB-INF/jsp/exception.jsp"); simResolver.setExceptionMappings(mappings); return simResolver;}代碼中有注解,不再多言。自定義異常類。自定義異常類并不是必須的,項目中自定義異常的目的可以讓異常的語義更具體;public class MyException extends Exception { public MyException() { } public MyException(String msg) { super(msg); }}編寫控制器??刂破髦械姆椒〞鶕?userName 的值決定是否拋出異常。 @RequestMapping("/exception03") public String exception03(String userName) throws MyException { if (StringUtils.isEmpty(userName)) { throw new MyException("用戶名不能為空"); } return "index"; }測試。打開瀏覽器,輸入 http://localhost:8888/sm-demo/exception03 ;瀏覽器會顯示把錯誤導向到 “WEB-INF/exception.jsp” 頁面。此頁面,可添加下面的代碼。 <body> 出錯啦!${exception.message} </body> 解析出錯誤的具體信息,最后可以在瀏覽器中看到:開發者可以根據需要編寫自己的全局異常處理器組件。

5. 小結

本節課程和大家探討了中文亂碼的問題,首先需要了解為什么會出現中文亂碼,知道原因后,解決的方案便會有很多。中文亂碼是一個共性問題,Spring MVC 框架提供了一個字符過濾器,很完美地解決了這個問題。當然,通過本節課程,你也了解到了如何使用 JAVA 方式動態配置過濾器。

2.1 配置文件上傳組件

打開項目中的 WebConfig 文件,添加如下代碼:@Beanpublic MultipartResolver multipartResolver() { return new StandardServletMultipartResolver();}MultipartResolver 是一個接口,約定了文件上傳的方法。StandardServletMultipartResolver 是具體的實現類,用來完成文件上傳。對上傳的文件信息進一步進行配置,如限制文件大小、文件類型等。打開 WebInitializer 文件,重寫 customizeRegistration() 方法:@Overrideprotected void customizeRegistration(Dynamic registration) { registration.setMultipartConfig(new MultipartConfigElement(null,2000000,400000,0));}MultipartConfigElement()方法可以接收 3 個參數:第一個參數指定保存上傳文件的臨時目錄。如果指定 null,由 Spring MVC 自己提供;最好不要指定;第二個參數,文件上傳的最小大小限制;第三個參數,文件上傳的最大尺寸限制。

5. 小結

每一個組件都有自己的特點,但大家都有一個共同特點,都是為前端控制器服務的。用戶的每一次請求、響應,都是經由所有組件一起協作完成的。組件之間有很好的隔離性,但其內部又有其完善的功能,高內聚,低耦合是 Spring MVC 組件最大的特色。通過本章節內容的學習,務必記住這些組件及組件的功能。

3. 在 SpringBoot 中配置 Swagger-UI

由于 SpringBoot 框架簡化了傳統 Spring MVC 框架中繁瑣的 xml 文件配置,所以我們在對 Swagger-UI 進行配置時只需要使用兩個注解和一個配置類即可完成,SpringBoot 為我們提供了兩種配置方法,讓我們來看一下吧。Tips : 在接下來的兩種配置方法中,主要介紹 Swagger-UI 的集成注解,而對于配置類我會單獨進行詳細講解,請同學們注意。

3. 編輯 web.xml

打開 web.xml,在 web.xml 中配置 DispatcherServlet 組件相關的信息; <!-- 配置 Spring MVC 的核心組件 DispatcherServlet --><servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>contextConfigLocation 是 DispatcherServlet 的屬性,用于指定與 DispatcherServlet 創建的上下文對象有關的配置文件的位置。此處為 spring-mvc.xml 文件位置。Tips: 放在 src/main/resource 目錄中的文件,編譯后都會放入 classpath (字節碼目錄中)。在 web.xml 中配置 ContextLoaderListener 監聽器組件相關信息;<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application.xml</param-value></context-param><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>配置臨聽器時,也需要為臨聽器創建的上下文對象指定配置文件的位置,此處指 application.xml 文件的位置。測試 web.xml 中的配置是否成功。發布項目,啟動 Tomcat 。查看 Tomcat 啟動時在控制臺中輸出的日志信息。如果能夠看到上圖標注的信息,說明 Spring MVC 初始化成功。

直播
查看課程詳情
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號