Spring boot + SpringMVC Web + JSP(IDEA多模块项目)
使用Springboot创建MVC Web项目
Spring Boot干货系列:(五)开发Web应用之JSP篇
源代码
https://github.com/tengj/SpringBootDemo/tree/master
先来看看整体的框架结构,只是多了webapp这个用来存放jsp的目录,静态资源还是放在resources的static下面。
引入依赖

1 <!--WEB支持--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 <exclusions> 6 <exclusion> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-tomcat</artifactId> 9 </exclusion> 10 </exclusions> 11 </dependency> 12 13 <!--jsp页面使用jstl标签--> 14 <dependency> 15 <groupId>javax.servlet</groupId> 16 <artifactId>jstl</artifactId> 17 </dependency> 18 19 <!--用于编译jsp--> 20 <!-- Provided --> 21 <dependency> 22 <groupId>org.apache.tomcat.embed</groupId> 23 <artifactId>tomcat-embed-jasper</artifactId> 24 <scope>provided</scope> 25 </dependency>
application.properties配置

1 #springmvc配置 2 spring.mvc.view.prefix=/WEB-INF/jsp 3 spring.mvc.view.suffix=.jsp
启动类

1 package tb.view.sbmsm.easyuidemo; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.boot.builder.SpringApplicationBuilder; 7 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 8 9 @SpringBootApplication(scanBasePackages = {"tb.view.sbmsm.easyuidemo"}) 10 @MapperScan(basePackages = "tb.db.mysql.shopcart.mybatis") 11 public class Program extends SpringBootServletInitializer { 12 13 /** 14 * 重写方法 Ctrl+O 15 * @param builder 16 * @return 17 */ 18 @Override 19 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 20 return builder.sources(Program.class); 21 } 22 23 public static void main(String[] args) { 24 SpringApplication.run(Program.class, args); 25 } 26 27 }
内嵌Tomcat属性配置
配置Servlet容器:

1 #配置程序端口,默认为8080 2 server.port= 8080 3 #用户绘画session过期时间,以秒为单位 4 server.servlet.session.timeout=4880 5 # 配置默认访问路径,默认为/ 6 server.servlet.context-path=/
配置Tomcat:

1 # 配置Tomcat编码,默认为UTF-8 2 server.tomcat.uri-encoding=UTF-8 3 # 配置最大线程数 4 server.tomcat.max-threads=1000
更为详细的Servlet容器配置以及Tomcat配置,可以前往博主之前文章查看:Spring Boot干货系列:常用属性汇总
外部的Tomcat服务器部署war包
Spring Boot项目需要部署在外部容器中的时候,Spring Boot导出的war包如果直接在Tomcat的部署会报错,不信你可以试试看。
需要做到下面两点修改才可以:
- 继承SpringBootServletInitializer
外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法:

1 public class Program extends SpringBootServletInitializer { 2 3 /** 4 * 重写方法 Ctrl+O 5 * @param builder 6 * @return 7 */ 8 @Override 9 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 10 return builder.sources(Program.class); 11 } 12 13 public static void main(String[] args) { 14 SpringApplication.run(Program.class, args); 15 } 16 17 }
这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。

1 package tb.view.sbmsm.easyuidemo.controller; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMethod; 8 import org.springframework.web.servlet.ModelAndView; 9 import tb.db.mysql.shopcart.mybatis.mapper.Account_userMapper; 10 import tb.db.mysql.shopcart.mybatis.pojo.Account_user; 11 12 import java.util.HashMap; 13 import java.util.Map; 14 15 /** 16 * <pre> 17 * 18 * </pre> 19 * 20 * @author wangyunpeng 21 * @date 2020/1/15 12:36 22 */ 23 @Controller 24 @RequestMapping(IndexController.CONTROLLER_NAME) 25 public class IndexController extends BaseController { 26 27 public static final String CONTROLLER_NAME = "/Index"; 28 29 @Override 30 protected String getViewName(String viewName) { 31 return super.getFullViewName(CONTROLLER_NAME, viewName); 32 } 33 34 @Value("${WEB_SITE_NAME}") 35 private String WEB_SITE_NAME; 36 37 @Autowired 38 public Account_userMapper account_userMapper; 39 40 @RequestMapping(value = "HelloWorld", method = RequestMethod.GET) 41 public ModelAndView helloWorld() { 42 Map<String, Object> map = new HashMap<String, Object>(); 43 Account_user accountUser = this.account_userMapper.selectByPrimaryKey(7); 44 map.put("WEB_SITE_NAME", WEB_SITE_NAME); 45 map.put("Email",accountUser.getEmail()); 46 map.put("UserDir", System.getProperty("user.dir")); 47 String viewName = this.getViewName("HelloWorld"); 48 return new ModelAndView(viewName, map); 49 } 50 51 }

1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator 4 Date: 2020/1/15 5 Time: 17:33 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <html> 10 <head> 11 <title>${WEB_SITE_NAME}</title> 12 </head> 13 <body> 14 <h1>Hello World</h1> 15 <h2>${Email}</h2> 16 <hr/> 17 <h3>${UserDir}</h3> 18 </body> 19 </html>
第一种启动方式,通过IDEA启动
SpringBoot Whitelabel Error Page
springboot 在idea多模块下 子模块的web项目用内置tomcat启动访问jsp报404
因为是多模块方式创建Module,所以需要设置Working direcotry目录为Module的Working Dir。
第二种方式通过CMD运行
java -jar easyuidemo-1.0-SNAPSHOT.war
运行目录已经变成target目录下面了
JSP技术Spring Boot官方是不推荐的,原因:
- tomcat只支持war的打包方式,不支持可执行的jar。
- Jetty 嵌套的容器不支持jsp
- Undertow
- 创建自定义error.jsp页面不会覆盖错误处理的默认视图,而应该使用自定义错误页面
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2015-01-15 自定义Microsoft Visual Studio 代码模板,增加公司和个人信息