龙空技术网

Spring Boot JSP应用实例(五十四)

IT技术院 261

前言:

当前你们对“jsp实例”都比较讲究,朋友们都想要分析一些“jsp实例”的相关知识。那么小编同时在网上收集了一些对于“jsp实例””的相关知识,希望各位老铁们能喜欢,你们快快来了解一下吧!

这是一个Spring Boot web应用程序示例,使用嵌入式Tomcat + JSP模板,并将包作为可执行文件WAR文件发布。

使用到的技术和工具如下:

Spring Boot 1.4.2.RELEASESpring 4.3.4.RELEASETomcat Embed 8.5.6Maven 3Java 8

项目目录

在这个示例中,是使用 Eclipse 来创建一个 Maven 项目,打开 Eclipse ,按照以下步骤:File -> New -> Other… 如下所示:

第二步,如下 -

第三步,填入相关信息 -

可参考 用Eclipse创建一个Maven Web项目:

最终创建以下文件夹目录结构如下所示:

项目依赖

Maven示例。阅读以下 pom.xml 文件中的内容及注释就知道了。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <modelVersion>4.0.0</modelVersion> <artifactId>spring-boot-web-jsp</artifactId> <packaging>war</packaging> <name>Spring Boot Web JSP Example</name> <description>Spring Boot Web JSP Example</description> <url>;/url> <version>1.0</version> <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>

执行后,显示项目依赖关系:

F:\worksp\springboot\springboot-jsp> mvn dependency:tree

[INFO] Scanning for projects...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building Spring Boot Web JSP Example 1.0

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ spring-boot-web-jsp ---

[INFO] org.springframework.boot:spring-boot-web-jsp:war:1.0

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.4.2.RELEASE:compile

[INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.4.2.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot:jar:1.4.2.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.2.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.2.RELEASE:compile

[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.7:compile

[INFO] | | | | +- ch.qos.logback:logback-core:jar:1.1.7:compile

[INFO] | | | | \- org.slf4j:slf4j-api:jar:1.7.21:compile

[INFO] | | | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile

[INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile

[INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile

[INFO] | | +- org.springframework:spring-core:jar:4.3.4.RELEASE:compile

[INFO] | | \- org.yaml:snakeyaml:jar:1.17:runtime

[INFO] | +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile

[INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile

[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile

[INFO] | | \- com.fasterxml:classmate:jar:1.3.3:compile

[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.4:compile

[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.4:compile

[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.4:compile

[INFO] | +- org.springframework:spring-web:jar:4.3.4.RELEASE:compile

[INFO] | | +- org.springframework:spring-aop:jar:4.3.4.RELEASE:compile

[INFO] | | +- org.springframework:spring-beans:jar:4.3.4.RELEASE:compile

[INFO] | | \- org.springframework:spring-context:jar:4.3.4.RELEASE:compile

[INFO] | \- org.springframework:spring-webmvc:jar:4.3.4.RELEASE:compile

[INFO] | \- org.springframework:spring-expression:jar:4.3.4.RELEASE:compile

[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.2.RELEASE:provided

[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.6:provided

[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.6:provided

[INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.6:provided

[INFO] +- javax.servlet:jstl:jar:1.2:compile

[INFO] +- org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.6:provided

[INFO] +- org.eclipse.jdt.core.compiler:ecj:jar:4.6.1:provided

[INFO] \- org.webjars:bootstrap:jar:3.3.7:compile

[INFO] \- org.webjars:jquery:jar:1.11.1:compile

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 1.327 s

[INFO] Finished at: 2017-01-21 T16:57:00+08:00

[INFO] Final Memory: 20M/309M

[INFO] ------------------------------------------------------------------------

3. Spring Boot

3.1 - 这个SpringBootServletInitializer执行传统的WAR部署运行SpringApplication

SpringBootWebApplication.java文件内容如下所示 -

package com.felix;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.support.SpringBootServletInitializer;@SpringBootApplicationpublic class SpringBootWebApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SpringBootWebApplication.class); } public static void main(String[] args) throws Exception { SpringApplication.run(SpringBootWebApplication.class, args); }}

3.2 - 一个简单的Spring控制器类。WelcomeController.java类的代码如下所示 -

package com.felix;import java.util.Map;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class WelcomeController { // inject via application.properties @Value("${welcome.message:test}") private String message = "Hello World"; @RequestMapping("/") public String welcome(Map<String, Object> model) { model.put("message", this.message); return "welcome"; }}

4. JSP + 资源 + 静态文件

4.1 - 对于JSP文件,把它们全放入到 src/main/webapp/WEB-INF/jsp/ 目录中。

src/main/webapp/WEB-INF/jsp/welcome.jsp文件的内容如下所示 -

<!DOCTYPE html><%@ taglib prefix="spring" uri=""%><%@ taglib prefix="c" uri=""%><html lang="en"><head><meta charset="UTF-8"> <!-- 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</h1> <h2>Message: ${message}</h2> </div> </div> <script type="text/javascript" src="webjars/bootstrap/3.3.7/js/bootstrap.min.js"></script></body></html>

4.2 - 对于像CSS或Javascript这样的静态文件,放在 /src/main/resources/static/ 目录中。/src/main/resources/static/css/main.css文件的内容如下所示 -

h1{ color:#0000FF;}h2{ color:#FF0000;}

4.3 - 对于属性文件,放在 /src/main/resources/ 目录下, /src/main/resources/application.properties文件的内容如下所示 -

spring.mvc.view.prefix: /WEB-INF/jsp/spring.mvc.view.suffix: .jspwelcome.message: Hello felix

注意

Spring Boot约定过配置,不需要像这样声明资源映射。资源映射只是自动处理。

运行实例

5.1 - 在终端下进入 F:\worksp\springboot\springboot-jsp 目录,执行以下命令,应该会看到以下结果 -

F:\worksp\springboot\springboot-jsp>mvn spring-boot:run

[INFO] Scanning for projects...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building Spring Boot Web JSP Example 1.0

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] >>> spring-boot-maven-plugin:1.4.2.RELEASE:run (default-cli) > test-compile @ springboot-jsp >>>

[INFO]

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ springboot-jsp ---

[INFO] Using 'UTF-8' encoding to copy filtered resources.

[INFO] Copying 1 resource

[INFO] Copying 1 resource

[INFO]

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ springboot-jsp ---

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ springboot-jsp ---

[INFO] Using 'UTF-8' encoding to copy filtered resources.

[INFO] skip non existing resourceDirectory F:\worksp\springboot\springboot-jsp\springboot-jsp\src\test\resources

[INFO]

[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ springboot-jsp ---

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] <<< spring-boot-maven-plugin:1.4.2.RELEASE:run (default-cli) < test-compile @ springboot-jsp <<<

[INFO]

[INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:run (default-cli) @ springboot-jsp ---

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

::Spring Boot:: (v1.4.2.RELEASE)

2017-01-21 11:53:26.321 INFO 6584 --- [ main] com.felix.SpringBootWebApplication : Starting SpringBootWebApplication on MY-PC with PID 6584 (F:\worksp\springboot\springboot-jsp\springboot-jsp\target\classes started by Administrator in F:\worksp\springboot\springboot-jsp\springboot-jsp)

2017-01-21 11:53:26.336 INFO 6584 --- [ main] com.felix.SpringBootWebApplication : No active profile set, falling back to default profiles: default

2017-01-21 11:53:26.477 INFO 6584 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1614202d: startup date [Sat Jan 21 11:53:26 CST 2017]; root of context hierarchy

2017-01-21 11:53:28.921 INFO 6584 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)

2017-01-21 11:53:28.937 INFO 6584 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat

2017-01-21 11:53:28.952 INFO 6584 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.6

2017-01-21 11:53:29.391 INFO 6584 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

2017-01-21 11:53:29.406 INFO 6584 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext

2017-01-21 11:53:29.406 INFO 6584 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2929 ms

2017-01-21 11:53:29.672 INFO 6584 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]

2017-01-21 11:53:29.672 INFO 6584 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]

2017-01-21 11:53:29.672 INFO 6584 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

2017-01-21 11:53:29.688 INFO 6584 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]

2017-01-21 11:53:29.688 INFO 6584 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]

2017-01-21 11:53:30.148 INFO 6584 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1614202d: startup date [Sat Jan 21 11:53:26 CST 2017]; root of context hierarchy

2017-01-21 11:53:30.258 INFO 6584 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.felix.WelcomeController.welcome(java.util.Map<java.lang.String, java.lang.Object>)

2017-01-21 11:53:30.258 INFO 6584 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)

2017-01-21 11:53:30.273 INFO 6584 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

2017-01-21 11:53:30.320 INFO 6584 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2017-01-21 11:53:30.336 INFO 6584 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2017-01-21 11:53:30.383 INFO 6584 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2017-01-21 11:53:30.601 INFO 6584 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup

2017-01-21 11:53:30.787 INFO 6584 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)

2017-01-21 11:53:30.787 INFO 6584 --- [ main] com.felix.SpringBootWebApplication : Started SpringBootWebApplication in 5.411 seconds (JVM running for 9.678)

之后,将项目发布到 Tomcat 中,在项目上点击右键,在弹出的选项中选择“Run As -> Ru On Server” ,使用浏览器访问: ,如果程序没有出错误,那应该会看到以下结果 -

JSP限制

不能创建可执行jar来运行这个嵌入式Tomcat + JSP Web示例,因为Tomcat中有一个硬编码文件模式。 阅读以下这篇文章:Spring Boot JSP限制。

标签: #jsp实例