使用Java和Spring构建现代Web应用程序
使用Spring Framework創建Java Web應用程序從未如此簡單。 如果您已經熟悉Java并且幾乎沒有創建Web應用程序的經驗,或者如果您擔心所有很酷的孩子都放棄Java取而代之的是Ruby和Node.js,那么您想讀這篇。
我的意圖是在此處提供實用指南,以快速入門并使用Java和Spring創建現代Web應用程序。
我們將使用Java,Spring Framework(4.x),Spring Boot(v1.2.x),Spring Security,Spring Data JPA,Thymeleaf和Maven 3框架的最新版本。
為什么使用Spring框架
Spring是最流行的開源Java框架之一。
- Spring是一個成熟但仍具有創新性的開源框架
- 春天有一個非常活躍的社區
- 彈簧重量輕–可以使用嵌入式容器從命令行運行
- Spring,尤其是Spring Boot使您的工作效率更高–無需XML配置
春天不僅僅是一個框架……
…這是一個平臺,可讓您了解構建Web應用程序所需的大多數技術:
- 創建MVC應用程序
- 提供身份驗證和授權
- 使用JDBC,Hibernate和JPA連接到RDBMS數據庫
- 連接到NoSQL數據庫(MongoDB,Neo4J,Redis,Solr,Hadoop等)
- 處理消息(JMS,AMQP)
- 快取
- 等等
是時候創建一些代碼了
在本教程中,我們將創建一個示例url-shortener應用程序( 此處提供源代碼),盡管本文不涵蓋構建Web應用程序的所有方面,但希望您會找到足夠的有用信息,以便能夠開始并想了解更多。
該應用程序由一個HTML頁面組成,它可以從任何URL創建一個短URL,并且您可能已經猜到了,它還可以從該短URL重定向到原始URL。
要運行它,請在命令行中執行以下命令(假設您已經安裝了Maven v3 ):
$ mvn spring-boot:run組件
YourlApplication.java
這是應用程序的主類,用于初始化Spring上下文(包括該項目中的所有Spring組件),并在嵌入式Apache Tomcat( http://tomcat.apache.org )Web容器內啟動Web應用程序。
@SpringBootApplication public class YourlApplication {public static void main(String[] args) {SpringApplication.run(YourlApplication.class, args);} }基本上,@ SpringBootApplication和SpringApplication.run()方法在這里起到了神奇的作用。
UrlController.java
@Controller public class UrlController {@Autowiredprivate IUrlStoreService urlStoreService;// ... }遵循MVC范例,此類用作處理HTTP請求的Controller(請注意@Controller注釋)。 此類中用@RequestMapping注釋的每個方法都映射到特定的HTTP端點:
- showForm():顯示主屏幕,用戶可以在其中輸入要縮短的網址 @RequestMapping(value="/", method=RequestMethod.GET) public String showForm(ShortenUrlRequest request) {return "shortener"; }
- redirectToUrl():從縮短的網址重定向到原始網址 @RequestMapping(value = "/{id}", method = RequestMethod.GET)public void redirectToUrl(@PathVariable String id, HttpServletResponse resp) throws Exception {final String url = urlStoreService.findUrlById(id);if (url != null) {resp.addHeader("Location", url);resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);} else {resp.sendError(HttpServletResponse.SC_NOT_FOUND);}}
- shortUrl():顧名思義,它將創建所提供網址的簡化版本,并將其傳遞給shorter.html進行顯示 @RequestMapping(value="/", method = RequestMethod.POST) public ModelAndView shortenUrl(HttpServletRequest httpRequest,@Valid ShortenUrlRequest request,BindingResult bindingResult) {String url = request.getUrl();if (!isUrlValid(url)) {bindingResult.addError(new ObjectError("url", "Invalid url format: " + url));}ModelAndView modelAndView = new ModelAndView("shortener");if (!bindingResult.hasErrors()) {final String id = Hashing.murmur3_32().hashString(url, StandardCharsets.UTF_8).toString();urlStoreService.storeUrl(id, url);String requestUrl = httpRequest.getRequestURL().toString();String prefix = requestUrl.substring(0, requestUrl.indexOf(httpRequest.getRequestURI(),"http://".length()));modelAndView.addObject("shortenedUrl", prefix + "/" + id);}return modelAndView; }
如您所見,@ RequestMapping批注負責將單個URL映射到Java方法。 該方法可以具有多個參數:
- @PathVariable(即id),它來自網址的動態部分(/ {id}),或者
- @RequestParam,或者
- 一個POJO(普通舊Java對象),其中字段對應于請求參數,或者
- 如果是POST請求,則為@RequestBody;或者
- Spring提供的其他預定義的Bean(例如HttpServletResponse)
ShortenUrlRequest.java
Spring將縮短的url請求映射到此POJO(普通的舊Java對象)中。 Spring還負責驗證請求,請參見url字段上的注釋。
public class ShortenUrlRequest {@NotNull@Size(min = 5, max = 1024)private String url;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;} }shorter.html
這是基于Thymeleaf的( http://www.thymeleaf.org/ )模板,該模板使用Twitter Bootstrap( http://getbootstrap.com/ )來呈現主屏幕HTML代碼。 它呈現UrlController類中的請求映射所提供的數據(模型)。
... <div class="jumbotron"><div class="container"><h1>Shorten your url</h1><p><div class="alert alert-success" role="alert" th:if="${shortenedUrl}"th:utext="'Link created: <a href=\'' + ${shortenedUrl} + '\'>' + ${shortenedUrl}+ '</a>'"></div><form class="form-inline" th:action="@{/}" th:object="${shortenUrlRequest}" method="POST"><div class="alert alert-danger" role="alert" th:if="${#fields.hasErrors('*')}"th:errors="*{url}">Input is incorrect</div><div class="form-group"><input type="text" class="form-control" id="url" name="url"placeholder="http://www.example.com"th:field="*{url}" th:class="${#fields.hasErrors('url')}? fieldError"/></div><button type="submit" class="btn btn-primary">Shorten</button></form></p></div> </div> ...InMemoryUrlStoreService.java
該應用程序當前僅將縮短的url持久存儲在此簡約類中實現的內存持久層中。 稍后,我們可以通過實現IUrlStoreService接口將數據持久保存到數據庫中來改善這一點。
@Service public class InMemoryUrlStoreService implements IUrlStoreService{private Map<String, String> urlByIdMap = new ConcurrentHashMap<>();@Overridepublic String findUrlById(String id) {return urlByIdMap.get(id);}@Overridepublic void storeUrl(String id, String url) {urlByIdMap.put(id, url);} }請注意,@ Service方法告訴Spring這是Service層中的一個bean,可以將其注入到其他bean中,例如UrlController。
結論
簡而言之就是這樣。 我們涵蓋了此Web應用程序的所有部分。 我希望您現在同意,使用Java和Spring構建Web應用程序會很有趣。 不再需要樣板代碼和XML配置,Spring的最新版本將為我們處理所有這些工作。
如果您想了解有關Spring框架和Spring Boot的更多信息,請不要忘了訂閱我的新聞通訊以獲取有關Spring的最新更新。 如果您有任何疑問或建議,請隨時在下面發表評論。
翻譯自: https://www.javacodegeeks.com/2015/08/building-modern-web-applications-using-java-and-spring.html
總結
以上是生活随笔為你收集整理的使用Java和Spring构建现代Web应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新手自己用u盘怎么装系统如何用u盘做电脑
- 下一篇: 使用Java 8 Completable