Spring Boot . 2 -- 用Spring Boot 创建一个Java Web 应用

  • 通过 start.spring.io 创建工程
  • 通过 IDEA 创建工程

??《Spring Boot In Action》 中的例子

建立一个展示阅读列表的应用。不同的用户将读过的书的数据登记进来,每次进到页面都能看到相应的读书记录。

1. 首先登录页面 start.spring.io。

页面大概长这个样子:

点击空框内的链接,会展示更全面的参数选择。【参数填好后】,选择 “Generate Project” 就可以将一个完整的Spring Boot 工程下载下来了。

工程的目录是这样的:

pom.xml 是工程构建的明细、ReadingListApplication.java 是bootstrap类 也是Sping 的首要配置类、application.properties 是Spring Boot 和应用读取特定属性的文件;在test目录下 的ReadinglistApplicationTests.java 的就是最基本的测试类。

BOOTSTRAPING SPRING

类ReadingListApplication充当了两个角色:配置Spring,启动Spring。虽然Spring Boot 负责了几乎所有的配置任务,但是总要有个入口来告诉Spring Boot 开始进行 AUTO-CONFIGURE,在ReadingListApplication.java 中有一些注解就是唤起自动配置:

@SpringBootApplication  // 就是这个注解唤起自动配置
public class ReadinglistApplication {

    public static void main(String[] args) {
        SpringApplication.run(ReadinglistApplication.class, args);
    }
}

@SpringBootApplication 触发了 Component-Scanning 和 自动配置。实际上这个注解做了其他三个注解做的事儿。

  1. @Configuration 等价于在XML中配置了Beans。这个是基于Java的配置。
  2. @ComponentScan。相当于启动了 Component scanning,其他标记@Controller和@Component的类可以在Spring的Context中被发现和注册。
  3. @EnableAutoConfiguration 。这个注解本身就是Spring Boot 开启自动配置的。

那么问题来了,怎么启动这个应用呢?最简单的办法大概就是 在IDEA中直接右键->Run main(). 当然还有CLI的、war 形式的。这些后续慢慢写。

现在开发一个简单的 ReadingListApplication了。需要定义一个Book类表示读过的书、一个Repository来存储读书记录、一个Controller相应Http请求、一个页面承接用户的操作。其他的就不需要了。那这些代码这么来写就好了。

Book.java

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String reader;
    private String isbn;
    private String title;
    private String author;
    private String description;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getReader() {
        return reader;
    }

    public void setReader(String reader) {
        this.reader = reader;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

ReadingListRepository.java

package readinglist;

/**
 * Created on 17/1/4.
 */

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ReadingListRepository extends JpaRepository<Book, Long> {
    List<Book> findByReader(String reader);
}

ReadingListController.java

package readinglist;

/**
 * Created on 17/1/4.
 */

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/")
@ConfigurationProperties(prefix = "amazon")
public class ReadingListController {

    Logger logger = LoggerFactory.getLogger(ReadingListController.class);
    private ReadingListRepository readingListRepository;

    private String associateId;

    @Autowired
    public ReadingListController(ReadingListRepository readingListRepository) {
        this.readingListRepository = readingListRepository;
    }

    @RequestMapping(value = "/{reader}", method = RequestMethod.GET)
    public String getReadingList(@PathVariable("reader") String reader, Model model) {

        List<Book> bookList = readingListRepository.findByReader(reader);

        if (null != bookList) {
            model.addAttribute("books", bookList);
        }

        logger.warn("Here IS Log Output. AssociateId is {}.",associateId);

        return "readingList";
    }

    @RequestMapping(value = "/{reader}", method = RequestMethod.POST)
    public String addToReadingList(@PathVariable("reader") String reader, Book book) {
        book.setReader(reader);
        readingListRepository.save(book);
        return "redirect:/{reader}";
    }

    public void setAssociateId(String associateId) {
        this.associateId = associateId;
    }
}

readlingList.html

<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <title>Reading List</title>
    <link rel="stylesheet" th:href="@{/style.css}" />
</head>
<body>
<h2>Your Reading List</h2>

<div th:unless="${#lists.isEmpty(books)}">
    <dl th:each="book : ${books}">
        <dt class="bookHeadline">
            <span th:text="${book.title}">Title</span> by
            <span th:text="${book.author}">Author</span>
            (ISBN: <span th:text="${book.isbn}">ISBN</span>)
        </dt>
        <dd class="bookDescription">
          <span th:if="${book.description}"
                th:text="${book.description}">Description</span>
          <span th:if="${book.description eq null}">
                No description available</span>
        </dd>
    </dl>
</div>
<div th:if="${#lists.isEmpty(books)}">
    <p>You have no books in your book list</p>
</div>
<hr/>
<h3>Add a book</h3>

<form method="POST">
    <label for="title">Title:</label>
    <input type="text" name="title" size="50"></input><br/>
    <label for="author">Author:</label>
    <input type="text" name="author" size="50"></input><br/>
    <label for="isbn">ISBN:</label>
    <input type="text" name="isbn" size="15"></input><br/>
    <label for="description">Description:</label><br/>
        <textarea name="description" cols="80" rows="5">
        </textarea><br/>
    <input type="submit"></input>
</form>
</body>
</html>

启动即可。

时间: 2024-08-08 22:05:50

Spring Boot . 2 -- 用Spring Boot 创建一个Java Web 应用的相关文章

Eclipse创建一个JAVA WEB项目

1.打开Eclipse,选择菜单栏的file>New>Dynamic Web Project 弹出窗口如下 2.点击Next>Next进入下面界面: 3.想要生成web.xml,就把Generate web.xml deployment descriptor前的选择框打勾 然后点击Finish,一个java Web Project 就建好了,项目结构如下图 4.鼠标右键项目名称[MyFirstWeb],选择New>JSP File,弹窗如下 5.按照上图文件名字为index.jsp

创建一个Java Web项目,获取POST数据并显示

新建一个新的Java Web工程项目 打开IntelliJ IDEA 新建一个工程,选择选择Java Enterprise,设置Tomcat的安装目录,点击下一步. 选中Create project from template,点击下一步: 创建工程成功,可以看到目录结构是如下图一样的: 第一个程序,HelloWorld程序 JSP代码要使用<%%>包起来,因此HelloWorld输出到网页上是这么写的: 变量的使用 Java Web中的变量是这么声明和使用的. 构建一个登录页面 接受表单参数

创建一个maven web project

几经周折总算是找到了和高杨学长一样的web  project的方法.感谢学长的一语点醒.我之前以为,既是maven又是web project的项目得要是通过dynamic web project转换到maven.实际上,是我理解错误了,maven就自带有创建web project的功能. 创建一个maven web project: 选择maven-archetype-webapp项目: New Maven project: 生成的项目的结构如下: maven自动将src/main/webapp

创建一个动态Web项目:

开始你的Eclipse,然后进入"文件">"新建">"动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后检查生成的web.xml部署描述符选项.这将创建一个动态Web项目在Eclipse中.现在去窗口>显示视图>项目资源管理器,你会看到你的项目窗口中的东西如下: 现在复制以下文件从Struts 2的lib文件夹C:\struts-2.2.3\lib添

使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclipse上安装Buildship 建议直接去Eclipse market处下载,简单方便,如下图: Buildship的更多信息 请参考以下链接,有教程,比较简单, 主要内容: 如何导入Gradle工程, 如何创建Gradle工程, 如何执行Gradle任务, 等... http://projects.e

用Spring Tools Suite(STS)开始一个RESTful Web Service

spring.io官方提供的例子Building a RESTful Web Service提供了用Maven.Gradle.STS构建一个RESTFul Web Service,实际上采用STS构建会更加的便捷. STS安装参考. 目标 在浏览器中输入url: http://localhost:8080/greeting 访问后得到结果: {"id":1,"content":"Hello, World!"} 可以在url中带上参数: http:

快速创建一个springboot web工程

以IntelliJ IDEA为例: 1.首先创建一个项目,创建时选择Spring Initializr,然后Next,如下图: 2.填写项目信息,如下图: 3.勾选web 4.最后一步,填写工程名字点击finish 第一次创建时系统会去下载需要的依赖,耗时稍长,请耐心等待. 创建成功后,目录结构如下:项目的根目录下会有一个artifactId+Application命名规则的入口类,SpringbootLearningApplication SpringbootLearningApplicati

【Java_SSM】(二)使用eclipse创建一个Maven web工程

这篇博文我们介绍一下如何利用eclipse创件一个maven web工程. (1)File--New--Other--Maven--Maven project 此处我们快速创建一个maven工程 点击next finish创建工程 (2)项目src/mian/webapp中可能会缺少web.xml文件(pom.xml文件报错),添加步骤如下: 项目工程右键--properties--Project facets,取消此处对勾,点击Apply 然后再添加对勾,点击红圈处 确认OK即可!

学习 JSP:第二步 创建一个JSP Web Project

接上文 学习 JSP:第一步Eclipse+Tomcat+jre(配置环境) [创建新工程](Dynamic Web Project) 1.选择 "File-->New-->Dynamic Web Project",创建 TomcatTest 项目: Next→Next 得到一个这样的工程结构,各个目录解析: deployment descriptor:部署的描述. lib:自己加的包可以放在里面. build:放入编译之后的文件. src:java文件放在里面. WebC