转载

SpringBoot学习(一):Springboot创建MVC Web项目入门

作者:享学Peter老师

使用Springboot创建MVC Web项目

Spring Boot 是一个非常棒的应用程序开发框架。大多数人可能会使用这个框架来创建基于 Web 的应用程序 - MVC应用程序或基于 RESTFul API 的应用程序。 这些应用程序可以部署到Docker容器中,成为微服务。

本教程将向同学们展示使用Spring Boot创建基于Web应用程序的过程。它是一个独立的Java应用程序。内置一个嵌入式 Tomcat 服务器。可以处理Web页面的各种请求。 对于新手来说,每个新起项目,最困难的部分就是项目环境配置部分。 但跟随本教程,你将发现使用 Spring Boot 创建 web 项目与使用 Spring v3 / v4 MVC 创建应用程序相比,简直要简单得不要不要的。

项目结构

在开始之前,先展示项目的目录和文件结构:

<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注释来进行配置。

POM XML文件

让我们从 POM XML 文件开始。 POM XML 文件用于 Maven 构建。它指定了如何编译和打包项目。以下是此文件的内容:

<?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 存档的行:

<packaging>war</packaging>
复制代码

第二个是 POM 文件具有父 POM 依赖性。 这允许下载许多 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 的属性定义:

<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 视图和运行嵌入式应用程序服务器。

主程序入口

接下来,开始我们程序编码。 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】 ,获取精选准备的架构学习资料(视频+文档+架构笔记)

SpringBoot学习(一):Springboot创建MVC Web项目入门

原文  https://juejin.im/post/5ce676eae51d4577614760b2
正文到此结束
Loading...