IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Spring boot jsp版入门配置程序-maven工程源码

    asuncool@gmail.com(yihaomen)发表于 2017-03-12 11:10:34
    love 0
    最近很多应用都慢慢转向了微服务,而在微服务里面很多都用到了spring boot 框架,其实作为这个框架来说,还是比较简单的。官方的文档也写得比较详细。至于微服务这种模式,其实多年前就在用了,多个系统独立运行,病提供接口给其他系统使用,系统间通过RPC等方式进行交互数据。作为这种思想,已经没什么新意。但最近流行的框架,还是得看看,要不然以后别人问起来,都还没使用过,就太OUT了。

    这是一个入门的例子,没什么技术含量。记录下来的原因就是为了记录我这个周末没有白过,花了我两个小时的时间,一边看文档,一边自己弄,其实完全可以自己在网上下载一个例子,会更快,但个人习惯不喜欢那样。

    用到的东西:
    Spring Boot 1.4.2.RELEASE
    Spring 4.3.4.RELEASE
    Tomcat Embed 8.5.6
    Maven 3
    Java 8

    工程代码结构:


    POM 文件如下:
    程序代码 程序代码

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.yihaomen</groupId>
      <artifactId>SpringBoot-001</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>SpringBoot-001 Maven Webapp</name>
      <url>http://maven.apache.org</url>
      
      <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.2.RELEASE</version>
        </parent>

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

        <dependencies>

            <!-- This is a web application -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

            <!-- Tomcat embedded container-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>

            <!-- JSTL for JSP -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>

            <!-- Need this to compile JSP -->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>

            <!-- Need this to compile JSP,
                tomcat-embed-jasper version is not working, no idea why -->
            <dependency>
                <groupId>org.eclipse.jdt.core.compiler</groupId>
                <artifactId>ecj</artifactId>
                <version>4.6.1</version>
                <scope>provided</scope>
            </dependency>

            <!-- Optional, test for static content, bootstrap CSS-->
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>bootstrap</artifactId>
                <version>3.3.7</version>
            </dependency>

        </dependencies>
        <build>
            <plugins>
                <!-- Package as an executable jar/war -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>


    初始化Application, 作为WEB工程来说,SpringBootServletInitializer 把这个web工程当做传统的WAR来部署,Application.java
    程序代码 程序代码

    package com.yihaomen.springboot;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;

    @SpringBootApplication
    public class Application extends SpringBootServletInitializer {

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }

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

    }

    这个类原则上要放在最外层,最好在controller,service,repository的外层。可以参考上面的工程结构。

    一个用来测试的 Controller :
    程序代码 程序代码

    package com.yihaomen.springboot.controller;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;

    @Controller
    public class HelloController {

        // 注入配置文件
        @Value("${welcome.message:test}")
        private String message = "Hello, You are my world";

        @RequestMapping("/")
        public String welcome(Map<String, Object> model) {
            model.put("message", this.message);
            return "hello";
        }
        
        @RequestMapping("/say")
        @ResponseBody
        public List<String> say() {        
            List<String> list = new ArrayList<String>();
            list.add("summer");
            list.add("cool");
            return list;
        }

    }


    spring boot静态资源文件的使用:
    1. 对于 CSS 或者 Javascript, 放到 /src/main/resources/static/ 文件夹里面。
    2. 对于 配置文件,直接放到 /src/main/resources/ 文件夹下。
    3. 对于JSP 页面,放到 src/main/webapp/WEB-INF/jsp/ 下。

    其实这是一种约定优于配置的东西,注意在配置文件里面配置的东西:
    程序代码 程序代码

    spring.mvc.view.prefix: /WEB-INF/jsp/
    spring.mvc.view.suffix: .jsp

    welcome.message: This is a Hello World Test.


    静态资源文件配置之后,注意在jsp页面的用法,特别 js, css的应用路径。可以参考例子hello.jsp
    程序代码 程序代码

    <!DOCTYPE html>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <html lang="en">
    <head>

        <!-- Access the bootstrap Css like this,
            Spring boot will handle the resource mapping automcatically -->
        <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css" />

        <!--
        <spring:url value="/css/main.css" var="springCss" />
        <link href="${springCss}" rel="stylesheet" />
         -->
        <c:url value="/css/main.css" var="jstlCss" />
        <link href="${jstlCss}" rel="stylesheet" />

    </head>
    <body>

        <nav class="navbar navbar-inverse">
            <div class="container">
                <div class="navbar-header">
                    <a class="navbar-brand" href="#">Spring Boot</a>
                </div>
                <div id="navbar" class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#">Home</a></li>
                        <li><a href="#about">About</a></li>
                    </ul>
                </div>
            </div>
        </nav>

        <div class="container">

            <div class="starter-template">
                <h1>Spring Boot Web JSP Example(Using Bootstrap JS)</h1>
                <h2>Message: ${message}</h2>
            </div>

        </div>

        <script type="text/javascript" src="webjars/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    </body>

    </html>


    运行,就是比较简单了:
    1. 直接当做java 工程直接运行都可以,如果在Eclipse 里面,找到Application.java, 然后run as --> java application就可以了。
    2. 你也可以用maven 来运行:mvn spring-boot:run  (这个时候,要切换到工程目录下运行)
    3. 先用mvn package 打成 war包,然后再运行:java -jar target/springboot-001.0.1.war

    检查运行效果,在浏览器输入:http://localhost:8080



    注意,这是在达成war包的情况下,jsp页面才能这么用,如果jar 包是不可以用的,切记。在后面有时间继续研究如果是打成jar包的情况怎么处理。

    最后,附上源代码,maven 工程:

    下载文件 spring boot jsp sample download


沪ICP备19023445号-2号
友情链接