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】,获取精选准备的架构学习资料(视频+文档+架构笔记)



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值