1、大体步骤
(1) 创建Maven web project;
(2) 在pom.xml文件添加依赖;
(3) 配置application.properties支持jsp
(4) 编写测试Controller
(5) 编写JSP页面
(6) 编写启动类App.java
2、新建SpringInitialzr
3、pom文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<
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
>org.apache.tomcat.embed
groupId
>
<
artifactId
>tomcat-embed-jasper
artifactId
>
dependency
>
<
dependency
>
<
groupId
>org.springframework.boot
groupId
>
<
artifactId
>spring-boot-starter-test
artifactId
>
<
scope
>test
scope
>
dependency
>
dependencies
>
|
4、application.properties文件
1
2
3
4
5
6
7
8
9
10
11
|
# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
# 自定义属性,可以在Controller中读取
application.hello=Hello GOD
|
5、Controller文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package
com.example;
import
org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
java.util.Map;
/**
* on 2016/9/9.
*/
@Controller
public
class
HelloController {
// 从 application.properties 中读取配置,如取不到默认值为Hello
@Value
(
"${application.hello:Hello}"
)
private
String hello;
@RequestMapping
(
"/helloJsp"
)
public
String helloJsp(Map
System.out.println(
"HelloController.helloJsp().hello="
+ hello);
map.put(
"hello"
, hello);
return
"helloJsp"
;
}
}
|
6、jsp页面
1
2
3
4
5
6
7
8
9
10
|
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" %>
<
html
>
<
head
><
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
><
title
>GOD
title
>
head
>
<
body
>
helloJsp
<
hr
>
${hello}
body
>
html
>
|
7、遇到的问题
1、Spring Boot: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
把pom中所有的
2、报404
<1>注意controller和restcontroller区别
<2>检查application.properties
<3>检查pom是否缺支持jsp包
3、Failed to introspect annotated methods on class org.springframework.boot.web.support.SpringBootServletInitializer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration
class
[com.example.SampleWebJspApplication]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on
class
org.springframework.boot.web.support.SpringBootServletInitializer
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:
187
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:
321
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:
243
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:
273
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:
98
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:
681
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
523
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:
759
) [spring-boot-
1.4
.
0
.RELEASE.jar:
1.4
.
0
.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:
369
) [spring-boot-
1.4
.
0
.RELEASE.jar:
1.4
.
0
.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:
313
) [spring-boot-
1.4
.
0
.RELEASE.jar:
1.4
.
0
.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:
1185
) [spring-boot-
1.4
.
0
.RELEASE.jar:
1.4
.
0
.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:
1174
) [spring-boot-
1.4
.
0
.RELEASE.jar:
1.4
.
0
.RELEASE]
at com.example.SampleWebJspApplication.main(SampleWebJspApplication.java:
20
) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:
1.8
.0_77]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
62
) ~[na:
1.8
.0_77]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
43
) ~[na:
1.8
.0_77]
at java.lang.reflect.Method.invoke(Method.java:
498
) ~[na:
1.8
.0_77]
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:
147
) [idea_rt.jar:na]
Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on
class
org.springframework.boot.web.support.SpringBootServletInitializer
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:
163
) ~[spring-core-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:
301
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:
237
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:
204
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:
173
) ~[spring-context-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
...
17
common frames omitted
|
解决方案:添加以下依赖
1
2
3
4
|
<
dependency
>
<
groupId
>org.apache.tomcat.embed
groupId
>
<
artifactId
>tomcat-embed-jasper
artifactId
>
dependency
>
|
4、java.lang.NoClassDefFoundError: javax/servlet/ServletContext
1
2
3
4
5
6
7
8
9
10
11
12
|
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:
1.8
.0_77]
at java.lang.Class.privateGetDeclaredMethods(Class.java:
2701
) ~[na:
1.8
.0_77]
at java.lang.Class.getDeclaredMethods(Class.java:
1975
) ~[na:
1.8
.0_77]
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:
152
) ~[spring-core-
4.3
.
2
.RELEASE.jar:
4.3
.
2
.RELEASE]
...
21
common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:
381
) ~[na:
1.8
.0_77]
at java.lang.ClassLoader.loadClass(ClassLoader.java:
424
) ~[na:
1.8
.0_77]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
331
) ~[na:
1.8
.0_77]
at java.lang.ClassLoader.loadClass(ClassLoader.java:
357
) ~[na:
1.8
.0_77]
...
25
common frames omitted
|
解决方案:添加
1
2
3
4
5
6
7
8
|
<
dependency
>
<
groupId
>javax.servlet
groupId
>
<
artifactId
>javax.servlet-api
artifactId
>
dependency
>
<
dependency
>
<
groupId
>javax.servlet
groupId
>
<
artifactId
>jstl
artifactId
>
dependency
>
|
删除其他依赖中的