SpringBoot學習(一):Springboot建立MVC Web項目入門

做者:享學Peter老師

使用Springboot建立MVC Web項目

Spring Boot是一個很是棒的應用程序開發框架。大多數人可能會使用這個框架來建立基於Web的應用程序 - MVC應用程序或基於RESTFul API的應用程序。這些應用程序能夠部署到Docker容器中,成爲微服務。javascript

本教程將向同窗們展現使用Spring Boot建立基於Web應用程序的過程。它是一個獨立的Java應用程序。內置一個嵌入式Tomcat服務器。能夠處理Web頁面的各類請求。對於新手來講,每一個新起項目,最困難的部分就是項目環境配置部分。但跟隨本教程,你將發現使用Spring Boot建立web項目與使用Spring v3 / v4 MVC建立應用程序相比,簡直要簡單得不要不要的。php

項目結構

在開始以前,先展現項目的目錄和文件結構:css

<base-dir>/src/main/java/org/hanbo/boot/app/controllers/HelloController.java

<base-dir>/src/main/java/org/hanbo/boot/app/App.java

<base-dir>/src/main/resources/application.properties

<base-dir>/src/main/resources/static/test.html

<base-dir>/src/main/resources/static/assets/css/index.css

<base-dir>/src/main/resources/static/assets/js/test.js

<base-dir>/src/main/webapp/WEB-INF/jsp/testme.jsp
複製代碼
兩個Java文件。一個是程序入口類。另外一個是MVC控制器。
一個properties屬性文件,裏面是一些項目配置值。
三個靜態文件,可在請求時直接提供給用戶。
一個JSP文件,用做MVC應用程序的視圖模板。

若是咱們使用springmvc的舊方法來配置web項目,則須要在項目web.xml裏配置spring容器和spring mvc容器,這至少須要兩個pring xml配置文件。而在這裏,一切都使用Java註釋來進行配置。html

POM XML文件

讓咱們從POM XML文件開始。POM XML文件用於Maven構建。它指定了如何編譯和打包項目。如下是此文件的內容:java

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<artifactId>boot-war</artifactId>

<packaging>war</packaging>

<name>Hanbo Boot War Sample App</name>

<description>An example of Spring Boot, JSP and WAR</description>

<version>1.0.0</version>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.5.RELEASE</version>

</parent>

<properties>

<java.version>1.8</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

</dependency>

<dependency>

<groupId>org.apache.tomcat.embed</groupId>

<artifactId>tomcat-embed-jasper</artifactId>

<scope>provided</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>
複製代碼

這個POM文件有幾個重要的事情。第一個是指定maven構建將建立WAR存檔的行:web

<packaging>war</packaging>
複製代碼

第二個是POM文件具備父POM依賴性。這容許下載許多Spring非Spring依賴項並將其連接到此項目中:spring

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.5.RELEASE</version>

</parent>
複製代碼

三個是將Java編譯設置爲使用JDK 1.8的屬性定義:apache

<properties>

<java.version>1.8</java.version>

</properties>
複製代碼

最後一個是使用Spring Boot maven插件進行編譯和打包:瀏覽器

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>
複製代碼

依賴項部分定義了此應用程序所需的額外依賴項。我須要的是Spring MVC,並做爲J2EE Web應用程序運行。添加的依賴項用於編譯JSP視圖和運行嵌入式應用程序服務器。tomcat

主程序入口

接下來,開始咱們程序編碼。spring boot項目,程序都有必須有一個入口主類,如下是主類的完整源代碼:

package org.hanbo.boot.app;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication

public class App extends SpringBootServletInitializer {

 @Override

 protected SpringApplicationBuilder configure(SpringApplicationBuilder appBuilder) {

 return appBuilder.sources(App.class);

 }

 public static void main(String[] args) throws Exception {

 SpringApplication.run(App.class, args);

 }

}
複製代碼

該App類從SpringBootServletInitializer擴展而來。它能被Spring Framework識別,並將類App做爲傳統的WAR包進行初始化和執行。它還告訴Spring Framework將有WEB-INF文件夾及其中的資源供使用。

在App類中,有一個名爲configure()的受保護方法。它用於指定任何特定於應用程序的配置。它只有一行,它接受App類的類型並建立一個SpringApplicationBuilder對象並返回。這樣作的是,建立的SpringApplicationBuilder對象將自動掃描App類,它所在的包,以及任何帶註釋的類的子包,以及包含Spring配置的註釋。而後它將基於這些配置構建Spring應用程序。這是按慣例進行集成的典型示例。而且一切都經過依賴注入耦合。

靜態main方法只有一行,它將類App的類型和任何其餘命令行參數傳遞給SpringApplication.run()。在幕後,這門課作了不少。它將隱式地對當前包和全部子包進行組件掃描。若是須要,開發人員還能夠添加其它路徑包爲掃描目標。開發人員能夠爲所需的任何其餘配置添加額外的註釋。對於這個簡單的程序,只有MVC控制器類能夠處理用戶對頁面的請求。

MVC控制器

接下來是咱們的MVC控制器類。這是一個很是簡單的類,只有一個方法能夠處理來自用戶的HTTP GET請求,並帶有一些查詢參數。它經過使用JSP頁面做爲視圖來響應。源代碼以下:

package org.hanbo.boot.app.controllers;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class HelloController {

 @RequestMapping(value = "/meow", method = RequestMethod.GET)

 public ModelAndView hello(@RequestParam("sayit") String sayit) {

 ModelAndView retVal = new ModelAndView();

 retVal.setViewName("testme");

 retVal.addObject("mymessage", sayit);

 return retVal;

 }

}
複製代碼

類中代碼沒有什麼新鮮的。也就是說,該控制器類的定義與任何Spring MVC控制器的定義相同。咱們簡單走讀一下類實現:

類用@controller註釋:表示它是一個控制器類。

類只有一個方法來處理HTTP GET請求。它用@requestmapping註釋。註釋定義了請求的子路徑以及它能夠處理的http方法get請求。

方法建立一個ModelAndView對象並返回。視圖頁面稱爲「testme」。數據模型只是一個將顯示在頁面上的字符串。

該方法接受一個參數,該參數來自查詢參數,稱爲「sayit」。

整個類的功能,就是當用戶在瀏覽器地址欄輸入如下路徑時,進行響應處理:

http://localhost:8080/meow?sayit=This+is+pretty+crazy
複製代碼

爲了讓這個控制器按預期工做,還須要一些額外的配置。它在application.properties文件中完成。

Application.properties屬性文件

application.properties須要指定視圖模板文件的前綴和後綴。

若是您作過spring mvc項目,或者你知道,web項目須要建立和配置一個org.springframework.web.servlet.view.internalResourceViewResolver類型的對象,而這個對象須要指定兩個屬性:

spring.mvc.view.prefix=/WEB-INF/jsp/

spring.mvc.view.suffix=.jsp
複製代碼

意思是應用程序在「WEB-INF/JSP/」文件夾中查找視圖模板。文件擴展名是「.jsp」

ok,如今咱們已經有了主程序入口類、控制器類和內部資源視圖解析器的設置。最後一塊是視圖模板。

JSP模版

本教程的視圖模板很是簡單,只有一個JSP文件演示如何顯示視圖模型中的數據:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>

<html lang="en">

<head>

<c:url value="/assets/css/index.css" var="jstlCss"/>

<link href="${jstlCss}" rel="stylesheet"/>

</head>

<body>

<p>What did you say?</p>

<p>I said: <span class="text-underline">"${mymessage}."</span></p>

<script type="text/javascript" src="/assets/js/test.js"></script>

</body>

</html>
複製代碼

在這個JSP文件中,有三件事:

有級聯樣式表文件。它是一個靜態文件,經過JSTL標記添加。這要求JSTL庫已經正確地引入到了項目中。

視圖模型只有一個元素,並經過$mymessage添加到視圖中。

在HTML內容的末尾添加了一個javascript文件,加載後將執行該文件。這是爲了演示在這個項目中靜態文件的使用。

讓示例應用程序提供靜態內容是很是重要的。它提供了超越Spring MVC的方法——靜態頁面和javascript可用於單頁Web應用程序。並且,使用Spring引導很容易得到靜態內容,後面會再解釋這一點。

靜態文件

Spring Boot提供了不少便利,讓開發人員可以快速上手開發。

這些便利是經過一個約定來實現的:

當您使用Spring Boot開發的應用程序指定爲基於Web的應用程序時,您所須要作的就是在src/main/resources下建立一個名爲「static」的文件夾。

​ 在這個「靜態」文件夾中,只需根據須要添加任何子文件夾,並將任何靜態內容文件放入其中,就能夠爲它們提供服務。以本案例程序爲例,我有三個指定爲靜態內容的文件:

  • 級聯樣式表的文件——src/resources/static/assets/css/index.css

  • 一個javascript文件——src/resources/static/assets/js/test.js

  • 一個HTML文件——src/resources/static/test.html

那麼,用戶如何經過瀏覽器訪問這些靜態內容呢?這很容易。假設應用程序正在運行,而且假設應用程序運行的網站的URL是http://localhost:8080/(在這沒有特定的應用程序上下文),那麼用戶可使用如下URL查看這些靜態內容文件的實際內容:

http://localhost:8080/assets/js/test.js
http://localhost:8080/assets/css/index.css.
http://localhost:8080/assets/test.html.

有一些方法能夠配置Spring引導應用程序在其餘位置查找靜態內容文件,WEB-INFJSP位置也是如此,應用程序如何初始化,以及Spring引導應用程序如何工做的許多其餘方面。這些不是本教程中討論的主題,可是若是你對Spring Boot有足夠的瞭解,這些主題就微不足道了。我可能會在之後的文章中介紹其中的一些。

構建和運行應用程序

在構建項目以前,請轉到src/main/resources/static/assets/js文件夾,並將文件「test.sj」重命名爲「test.js」

要構建此應用程序,請在命令行控制檯中運行如下命令:

mvn clean install
複製代碼

當您第一次運行此應用程序時,它將下載用於構建此應用程序的全部依賴項,這可能須要一些時間。以後,後續的構建將花費更少的時間。

要運行Web應用程序,還可使用命令行控制檯:

java -jar target\boot-war-1.0.0.war
複製代碼

若是一切順利,而且您能夠構建應用程序,那麼執行將在最後輸出相似這樣的結果:

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) 2018-10-14 22:51:11.356 INFO 6124 --- [ main] org.hanbo.boot.app.App : Starting App v1.0.0 on U3DTEST-PC with PID 6124 (C:\Users\u3dadmin\workspace-mars8\SpringBootJspWar\target\boot-war-1.0.0.war started by u3dadmin in C:\Users\u3dadmin\workspace-mars8\SpringBootJspWar) .... .... .... 2018-10-14 22:51:28.730 INFO 6124 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-10-14 22:51:28.745 INFO 6124 --- [ main] org.hanbo.boot.app.App : Started App in 20.84 seconds (JVM running for 23.398) 複製代碼

正如我以前提到的,使用Spring引導建立Web應用程序很是簡單、方便。這種便利性的關鍵是去掉全部雜亂無章的配置,這樣人們就能夠專一於開發過程當中最重要的部分,設計出符合最終產品願景的產品。除此以外,Spring Boot還有一個很酷的地方,那就是它能夠快速部署到Docker虛擬機中。所以,它很是適合開發微服務。

那麼,接下來的即是編寫那些更加複雜的關於Spring的工做,例如數據訪問、身份驗證和受權。敬請期待。

END

歡迎長按下圖關注公衆號:享學課堂online!

公衆號後臺回覆【java】,獲取精選準備的架構學習資料(視頻+文檔+架構筆記)

相關文章
相關標籤/搜索