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>
pom.xl
复制代码

application.properties配置

1 #springmvc配置
2 spring.mvc.view.prefix=/WEB-INF/jsp
3 spring.mvc.view.suffix=.jsp
application.properties

启动类

复制代码
 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 }
Program.java
复制代码

内嵌Tomcat属性配置

配置Servlet容器

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

配置Tomcat:

复制代码
1 # 配置Tomcat编码,默认为UTF-8
2 server.tomcat.uri-encoding=UTF-8
3 # 配置最大线程数
4 server.tomcat.max-threads=1000
application.properties
复制代码

更为详细的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 }
Program.java
复制代码

这个类的作用与在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 }
IndexController.java
复制代码
复制代码
 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>
HelloWorld.jsp
复制代码

 

第一种启动方式,通过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官方是不推荐的,原因:

  1. tomcat只支持war的打包方式,不支持可执行的jar。
  2. Jetty 嵌套的容器不支持jsp
  3. Undertow
  4. 创建自定义error.jsp页面不会覆盖错误处理的默认视图,而应该使用自定义错误页面
posted @   —八戒—  阅读(1375)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2015-01-15 自定义Microsoft Visual Studio 代码模板,增加公司和个人信息
点击右上角即可分享
微信分享提示