当前位置 博文首页 > zhtbs的博客:Springboot 入门培训 4 WEB+JSP MVC项目搭建
在建立spring boot web项目的时候,我们需要判断这个工程项目是普通java项目还是maven项目。因为这两种项目对spring boot web项目结构是不一样的。我遇到很多人在会把这两种项目结构搞混导致项目无法运行和访问到web服务中的资源。所有在建立spring boot Web项目的时候一定要分请自己建立的是普通项目还是maven项目。我看到很多人整不明白的时候都会把问题归结给编辑工具上说什么eclipse没有idea 好用什么的,其实你是把工程结构整混了用,eclipse建立一个普通项目非要用maven项目的结构去调试写代码最后运行不出来,就说什么eclipse不好用,你如果把项目换成maven项目就解决问题了,你非要说是什么工具不好用就不对了。
2种项目工程结构
注意:一定要分清你的项目使用的是那种工程,他们引用路径webapp使用的目录是不一样的。
下载地址spring boot WEB jsp普通项目例子.zip
下载地址springboot+webJSP maven项目例子.zip
所有例子代码百度网盘:https://pan.baidu.com/s/1rDpcZtdBA6i7vBmYTMwcUA
提取码:1234
我们使用eclipse或者idea创建一个普通java项目。在项目的src目录下创建2个文件包,一个是代码包名字自己定义,一个包是main这个名字一定要用默认的名字(main)。如果这个main包名字改变启动 spring boot 后,spring boot会找不到web服务器的资源。
项目结构
Project
└─src
└─cn #代码都在这个包下
└─ main #WEB资源都在这个包下
└─application.yml #配置文件
项目全体结构
Project
└─src #项目根目录
└─cn
└─ core.... #代码部分
└─ main
└─ webapp #WEB资源
└─ WEB-INF #web工程资源(web.xml,lib)
└─ web.xml
└─ lib
└─ static (JavaScript、CSS、图)
└─ js #js脚本
└─ css #css 样式
└─ page #页面(JSP,HTML)
└─application.yml #spring boot 配置文件
└─ mapper #mybatis sql文配置文件
webapp 包下面一定要创建一个WEB-INF文件,这个文件就是整个web项目的核心目录,在这个目录下面创建web.xml文件和lib文件,lib文件中装入所有的spring boot工程使用到的jar包,web.xml配置所有java web项目中使用web元素。
webapp结构
Project
└─src #项目根目录
└─ main
└─ webapp #WEB资源
└─ WEB-INF #web工程资源(web.xml,lib)
└─ web.xml
└─ lib (装入入spring boot 和其他jar包)
maven项目与普通项目代码结构是不一样,需要按maven项目结构来进行开发。maven项目结构是在src创建3个文件包java包,resources包,webapp包。它与普通项目区别是没有main这个包,自接创建webapp包到src目录中来。
maven项目结构
Project
└─src
└─main #头目录
└─java #代码
└─ resources #claess下配置文件目录
└─ mapper #mybatis sql文配置文件
└─ application.yml #spring boot 配置文件
└─ webapp #web服务器资源
└─ WEB-INF
└─ web.xml
└─ lib
└─ static (JavaScript、CSS、图)
└─ js #js脚本
└─ css #css 样式
└─ page #页面(jsp,html)
└─test
└─ java #测试代码
└─pom.xml
在webapp文件目录下的所有文件(html,图片,css,js)等都可以通过…/路径访问到。但是不包括jsp文件内容,如果想使用jsp页面开发项目需要进行如下操作。导入tomcat包和servlet的jstl包,这些包可以样项目获得编译jsp的功能,如果不导入这些包,我们的spring boot web项目无法编译jsp页面内容。
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.20</version>
</dependency>
发现很多人在调试spring boot jsp项目的时候maven项目工程的pom.xml配置总是引不对jar包,导致项目一直运行不起来,在这面补充一下我的pom文件配置内容来方便大家开发与调试代码。
pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.2.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.3.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<version>2.2.3.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 工程主入口-->
<mainClass>cn.core.my.app.OnApp</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/webapp</directory>
</resource>
</resources>
</build>
spring boot web项目application.yml文件中配置jsp文件在项目的访问地址,如果不设置访问地址项目无法访问到jsp页面。
application.yml
server:
port: 9089
tomcat:
uri-encoding: utf-8
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
http:
encoding:
force: true
charset: utf-8
enabled: true
server
spring
? 创建jsp页面访问容器,通过这个容器来访问jsp所在地址,这样就可以通过url路径访问到jsp。
创建Controller容器
package cn.core.my.app.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/zht")
public class ZhtController {
@RequestMapping("/index")
public String index(Model map) {
map.addAttribute("name", "欢迎来到 web jsp页面");
return "/index";
}
}
创建jsp 地址src/main/webapp/WEB-INF/jsp/
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"
content="text/html;charset=utf-8" />
<title>zhtbs</title>
<link rel="stylesheet" href="../static/css/css.css" />
<style type="text/css">
</style>
</head>
<body>
<h1>${name}</h1>
</body>
</html>
创建启动容器SpringBootApplication
package cn.core.my.app;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class OnApp {
public static void main(String[] args) {
new SpringApplicationBuilder(OnApp.class).
web(WebApplicationType.SERVLET).run(args);
}
}
启动容器运行项目工程访问url
浏览器中输入 http://localhost:9089/zht/index 地址,我们可以看到页面结果。
我们可以使用spring boot Test测试中的MockMvc
类来进行web url访问的单元测试工作,这样我们在开发的时候就不需要启动web服务器,也能进行代码的开发调试工作。
Spring Testorg.springframework.test.web.servlet.MockMvc
提供了一个类作为与 Spring MVC 框架结合的的测试机制,它的功能很强大。如果有机会我回单独写一篇文章来单独介绍它,现在大家只需要理解它怎么使用就可以了。
MyUrlPageTest.java
@RunWith(SpringRunner.class)
@SpringBootTest(classes=OnApp.class)
@AutoConfigureMockMvc
public class MyUrlPageTest {
@Autowired
private WebApplicationContext webapp;
private MockMvc mockMvc;
@Before
public void setup() {
//进入spring boot 容器 到MockMvc容器中
mockMvc = MockMvcBuilders.webAppContextSetup(webapp).build();
}
@Test
public void TestPage() throws Exception{
//通过url 路径找到页面控制的Controller容器
ResultActions results =mockMvc.
perform(MockMvcRequestBuilders
.get("/zht/index").param("test", "测试数据来了"));
results.andReturn().getResponse()
.setCharacterEncoding("UTF-8");
//查看返回结果
results.
andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
}
}
返回测试结果
===========测试访问到了===========
===========测试 test value 测试数据来了===========
MockHttpServletRequest:
HTTP Method = GET
Request URI = /zht/index
Parameters = {test=[测试数据来了]}
Headers