从零开始使用spring boot搭建WEB项目(一)——盘古开天辟地

    Hello,everyone!世上无难事,只怕有心人!!!

    作为初学者,在熟悉JAVA编程的基础知识后,如何快速的提高自身代码能力呢?答案很简答——动手写代码,动手写代码,动手写代码。重要事情说三篇。。。在实践中学习是最快提高自我的方法。

    今天开始我将一步步介绍如何利用spring boot搭建自己的WEB项目,并实现简单的用户,角色以及权限管理等功能。废话不多说,正式开始!!

     本章我们将搭建一个简单的WEB工程:

       创建maven工程与项目结构

           第一步:在Eclipse界面选择菜单File ——> New ——> Other,打开如下对话框图1。找到并选择Maven Project,点击Next进行一下步。

图1 图1

          第二步:一路Next直至下图图2;根据自身项目情况修改Group Id、Arfact Id以及Package,这里我分别修改为marshall,rookie,marshall.rookie如图3。点击Finish完成创建。

图2

图3
(忽略红叉报错,因为我workspace已存在该命名)

          第三步:优化目录结构。 创建完成后,目录结构如下图4:

       

图4

                  优化完成后,如图5:

图5

      Hello World

        通过上面的步骤,已经成功创建了属于我们自己的第一个maven工程,接下来按照国际惯例我们编写“hello world”。首先我们要进行pom.xml的编写,主要是引入相关的依赖。(这里要说一句,为什么现在spring boot那么流行,很大的原因就是它好用啊!省去很多配置文件的编写工作,当年纯ssm,ssh时代,那XML配置文件多的,保证你极度酸爽!!)

        本次我们编写pom.xml主要是添加<parent>…… </parent><dependencies>……</dependencies>2块。parent代表的是继承哪个父POM,并且通过指定继承版本号来指定依赖包的版本。dependencies则是指定本工程所要依赖的包。

        完整pom.xml内容如下:

<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>

  <groupId>marshall</groupId>
  <artifactId>rookie</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>rookie</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.1.RELEASE</version>
  </parent>

  <dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
  </dependencies>
</project>

         接下来我们编写spring boot入口类,Application.java。首先添加注解 @SpringBootApplication,从字面理解就是指明这个是一个springboot的应用,其作用相当于@Configuration、@EnableAutoConfiguration和  @ComponentScan,你也可以同时使用这3个注解。其中@Configuration、@ComponentScan是spring框架的语法,在spring 3.x就有了,用于代码方式创建配置信息和扫描包。@EnableAutoConfiguration是spring boot语法,表示将使用自动配置 。添加main方法,方法体内加入

SpringApplication.run(Application.class, args);\\spring boot 应用启动入口

到此其实咱们的第一个spring boot工程就OK了,对Application.java右键然后Run As ——> Java Application就能启动了。但是我们的目标是能看到hello world,那么我们就要继续添加一些代码。首先添加注解@Controller表示该类是个控制器,简单说就是让我们能够通过URL来访问这个类。然后添加一个hello方法,返回“Hello World”字符串。这里要注意2个注解@ResponseBody和@RequestMapping,前者的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的是,在使用此注解之后类不会再走试图(view)处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据;后者的作用是用来处理请求地址映射,简单说就是该类该方法负责响应什么URL请求(这里我们设置的是根,也就是说直接输入域名就能响应)。

         Application.java:

package marshall.rookie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Hello world!
 *
 */
@Controller
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
    public static void main( String[] args ) {
    	SpringApplication.run(Application.class, args);//spring boot应用入口
    }
    
    //没有responsebody,所返回的字符串会被当成view(即页面),然后又找不到,所以页面报错
    @ResponseBody
    @RequestMapping(value = "/")
    public String hello() {
    	return "Hello World";
    }
}

           现在再对Application.java右键然后Run As ——> Java Application启动应用,完成后看到控台输出以来内容证明成功启动(图6),然后在浏览器中输入http://localhost:8080/,就可以看到图7,So 咱们第一个简单的WEB工程就大功告成!!!开不开心,ha不happy!!

图6

       疑难杂症

         a.在启动工程的时候,未能识别为WEB工程,始终无法启动tomcat

*            *查看springboot源码,发现以下位置

           

         被判断为非web项目,因此没有启动tomcat。先怀疑是servlet类没有加载,于是在pom里面手动添加servlet依赖。启动报Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean。于是查资料怀疑是本地maven仓库的tomcat相关包有问题,删除后重新拉,启动正常!!!!

        b.输入网址不能正常显示,如图:

     因为没有找到对应的view,从而重定向至/error页面,但是又没有定义error页面所以报错。检查hello方法发现缺少注解@ResponseBody,返回的字符串被视图控制器当成了页面。

代码交流 2020