摘要:更多相關博文參考前一篇博文講了的方式創建應用,用過的童鞋都知道,早就沒有什么事情了,其實的版本,就已經支持,不用再寫本篇將介紹下,如何利用取代配置本篇博文,建議和上一篇對比看,貼出上一篇地址之基于配置的應用構建構建項目依賴對于依賴
更多spring相關博文參考: http://spring.hhui.top
前一篇博文講了SpringMVC+web.xml的方式創建web應用,用過SpringBoot的童鞋都知道,早就沒有xml什么事情了,其實Spring 3+, Servlet 3+的版本,就已經支持java config,不用再寫xml;本篇將介紹下,如何利用java config取代xml配置
本篇博文,建議和上一篇對比看,貼出上一篇地址
190316-Spring MVC之基于xml配置的web應用構建
I. Web構建 1. 項目依賴對于依賴這一塊,和前面一樣,不同的在于java config 取代 xml
200-mvc-annotation war 5.1.5.RELEASE javax.servlet javax.servlet-api 3.1.0 org.springframework spring-core ${spring.version} org.aspectj aspectjweaver org.springframework spring-aop ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.eclipse.jetty.aggregate jetty-all 9.2.19.v20160908 web-mvc org.eclipse.jetty jetty-maven-plugin 9.4.12.RC2 8080
細心的童鞋會看到,依賴中多了一個jetty-all,后面測試篇幅會說到用法
2. 項目結構第二節依然放上項目結構,在這里把xml的結構也截進來了,對于我們的示例demo而言,最大的區別就是沒有了webapp,更沒有webapp下面的幾個xml配置文件
3. 配置設定現在沒有了配置文件,我們的配置還是得有,不然web容器(如tomcat)怎么找到DispatchServlet呢
a. DispatchServlet 聲明同樣我們需要干的第一件事情及時聲明DispatchServlet,并設置它的應用上下文;可以怎么用呢?從官方找到教程
{% blockquote @SpringWebMvc教程 https://docs.spring.io/spring... %}
The DispatcherServlet, as any Servlet, needs to be declared and mapped according to the Servlet specification by using Java configuration or in web.xml. In turn, the DispatcherServlet uses Spring configuration to discover the delegate components it needs for request mapping, view resolution, exception handling
{% endblockquote %}
上面的解釋,就是說下面的代碼和web.xml的效果是一樣一樣的
public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletCxt) { // Load Spring web application configuration AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext(); ac.register(AppConfig.class); ac.refresh(); // Create and register the DispatcherServlet DispatcherServlet servlet = new DispatcherServlet(ac); ServletRegistration.Dynamic registration = servletCxt.addServlet("mvc-dispatcher", servlet); registration.setLoadOnStartup(1); registration.addMapping("/*"); } }
當然直接實現接口的方式有點粗暴,但是好理解,上面的代碼和我們前面的web.xml效果一樣,創建了一個DispatchServlet, 并且綁定了url命中規則;設置了應用上下文AnnotationConfigWebApplicationContext
這個上下文,和我們前面的配置文件mvc-dispatcher-servlet有點像了;如果有興趣看到項目源碼的同學,會發現用的不是上面這個方式,而是及基礎接口AbstractDispatcherServletInitializer
public class MyWebApplicationInitializer extends AbstractDispatcherServletInitializer { @Override protected WebApplicationContext createRootApplicationContext() { return null; } @Override protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); // applicationContext.setConfigLocation("com.git.hui.spring"); applicationContext.register(RootConfig.class); applicationContext.register(WebConfig.class); return applicationContext; } @Override protected String[] getServletMappings() { return new String[]{"/*"}; } @Override protected Filter[] getServletFilters() { return new Filter[]{new HiddenHttpMethodFilter(), new CharacterEncodingFilter()}; } }
看到上面這段代碼,這個感覺就和xml的方式更像了,比如Servlet應用上下文和根應用上下文
說明
上面代碼中增加的Filter先無視,后續會有專文講什么是Filter以及Filter可以怎么用
b. java config前面定義了DispatchServlet,接下來對比web.xml就是需要配置掃描并注冊bean了,本文基于JavaConfig的方式,則主要是借助 @Configuration 注解來聲明配置類(這個可以等同于一個xml文件)
前面的代碼也可以看到,上下文中注冊了兩個Config類
RootConfig定義如下,注意下注解@ComponentScan,這個等同于
@Configuration @ComponentScan(value = "com.git.hui.spring") public class RootConfig { }
另外一個WebConfig的作用則主要在于開啟WebMVC
@Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { }4. 實例代碼
實例和上一篇一樣,一個普通的Server Bean和一個Controller
@Component public class PrintServer { public void print() { System.out.println(System.currentTimeMillis()); } }
一個提供rest服務的HelloRest
@RestController public class HelloRest { @Autowired private PrintServer printServer; @GetMapping(path = "hello", produces="text/html;charset=UTF-8") public String sayHello(HttpServletRequest request) { printServer.print(); return "hello, " + request.getParameter("name"); } @GetMapping({"/", ""}) public String index() { return UUID.randomUUID().toString(); } }5. 測試
測試依然可以和前面一樣,使用jetty來啟動,此外,介紹另外一種測試方式,也是jetty,但是不同的是我們直接寫main方法來啟動服務
public class SpringApplication { public static void main(String[] args) throws Exception { Server server = new Server(8080); ServletContextHandler handler = new ServletContextHandler(); // 服務器根目錄,類似于tomcat部署的項目。 完整的訪問路徑為ip:port/contextPath/realRequestMapping //ip:port/項目路徑/api請求路徑 handler.setContextPath("/"); AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); applicationContext.register(WebConfig.class); applicationContext.register(RootConfig.class); //相當于web.xml中配置的ContextLoaderListener handler.addEventListener(new ContextLoaderListener(applicationContext)); //springmvc攔截規則 相當于web.xml中配置的DispatcherServlet handler.addServlet(new ServletHolder(new DispatcherServlet(applicationContext)), "/*"); server.setHandler(handler); server.start(); server.join(); } }
測試示意圖如下
6. 小結簡單對比下xml的方式,會發現java config方式會清爽很多,不需要多個xml配置文件,維持幾個配置類,加幾個注解即可;當然再后面的SpringBoot就更簡單了,幾個注解了事,連上面的兩個Config文件, ServletConfig都可以省略掉
另外一個需要注意的點就是java config的運行方式,在servlet3之后才支持的,也就是說如果用比較老的jetty是起不來的(或者無法正常訪問web服務)
II. 其他 - 系列博文web系列:
Spring Web系列博文匯總
mvc應用搭建篇:
190316-Spring MVC之基于xml配置的web應用構建
190317-Spring MVC之基于java config無xml配置的web應用構建
0. 項目工程:spring-boot-demo
項目: https://github.com/liuyueyi/spring-boot-demo/blob/master/spring/200-mvc-annotation
1. 一灰灰Blog一灰灰Blog個人博客 https://blog.hhui.top
一灰灰Blog-Spring專題博客 http://spring.hhui.top
一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛
2. 聲明盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
微博地址: 小灰灰Blog
QQ: 一灰灰/3302797840
3. 掃描關注一灰灰blog
知識星球
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73731.html
摘要:的框架用于解決上述提到的問題,基于模型,可以幫助開發人員構建靈活易擴展的應用。在這一章中,將專注于構建該應用的層,創建控制器和顯示,以及處理用戶注冊的表單。類有兩個靜態接口,代表兩種模擬服務的方式獨立測試和集成測試。 主要內容 將web請求映射到Spring控制器 綁定form參數 驗證表單提交的參數 寫在前面:關于Java Web,首先推薦一篇文章——寫給java web一年左右...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。整體目錄結構如下項目文件用于數據持久化配置項目配置配置視圖解析器配置靜態資源映射配置配置配置自定義指令配置解析器配置,類似于項目啟動類新建,注冊配置類,并將其和當前關聯。 時間:2017年3月19日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://githu...
摘要:一旦最基本的應用創建好了,你可以給他加上安全防護。一旦成功登出了,我們的應用程序重定向到到并顯示相應的登陸成功的消息。這標記該應用程序是一個應用程序,并激活一些關鍵行為,比如創建一個。一旦應用程序啟動,用瀏覽器訪問。 原網頁 https://spring.io/guides/gs/securing-web/ 本指南將引導您完成創建一個資源由Spring Security的保護的一個簡單...
摘要:的面向的異常遵從通用的異常層次結構。比如以前常用的框架,現在常用的框架包含許多項目,下面挑一些最常用的出來總結一下。狀態是流程中事件發生的地點,在流程中通過轉移的方式從一個狀態到另一個狀態,流程的當前狀況稱為流程數據。 如今做Java尤其是web幾乎是避免不了和Spring打交道了,但是Spring是這樣的大而全,新鮮名詞不斷產生,學起來給人一種凌亂的感覺,我就在這里總結一下,理順頭緒...
摘要:在中,就是前端控制器的任務是將請求發送給控制器。處理器映射會根據請求所攜帶的信息來進行決策一旦選擇了合適的控制器,會將請求發送給選中的控制器。這些信息被稱為模型。因此無需在配置類中顯式聲明任何的控制器具體來講是試圖解析器。 Spring MVC基于模型-視圖-控制器(Model-View-Controller,MVC)模式實現,能夠構建像Spring框架那樣靈活和松耦合的Web應用程序...
閱讀 2255·2023-04-26 02:14
閱讀 2926·2021-09-30 09:46
閱讀 2101·2021-09-24 09:48
閱讀 952·2021-09-24 09:47
閱讀 3252·2019-08-30 15:44
閱讀 1879·2019-08-30 15:44
閱讀 3279·2019-08-30 14:18
閱讀 1949·2019-08-30 12:58