1,感觉传统的JSP可以放弃,直接前端JS+后端就可以了
2,建议不要用低版本的springboot,版本兼容搭配太麻烦
如果仅仅是搭建springboot开发环境,没什么难度,本文主要记录以下几个问题的解决:
1,支持jsp
2,打包war后在外部tomcat环境下运行
使用软件清单
安装IDEA社区版的最新版本(时下是2024.3.2.2)
下载Maven
下载java21
配置maven
以下内容为D:\Develop\apache-maven-3.9.9\settings.xml,从网上搬来的,感谢该网友的分享。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!--本地仓库。该值表示构建系统本地仓库的路径。其默认值为${user.home}/.m2/repository。 --><localRepository>D:\Develop\apache-maven-3.9.9\local</localRepository><!--配置服务端的一些设置。如果局域网内部有nexus,需要管理项目jar包可配置 --> <servers></servers><!--为仓库列表配置的下载镜像列表--> <mirrors><!--给定仓库的下载镜像--> <mirror><id>aliyun</id><mirrorOf>central</mirrorOf><url>http://maven.aliyun.com/nexus/content/groups/public/</url></mirror></mirrors><!-- 仓库配置 --><profiles><!--根据环境参数来调整的构件的配置 --> <profile><!--该配置的唯一标识符 --> <id>lovecto_profile</id><!-- 远程仓库列表 --> <repositories><repository><id>aliyun</id><name>aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><!-- 配置插件下载的仓库列表--><pluginRepositories><pluginRepository><id>thirdparty_repository</id><name>thirdparty_repository</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></pluginRepository></pluginRepositories></profile></profiles><!-- 激活所使用的配置--><activeProfiles><activeProfile>lovecto_profile</activeProfile></activeProfiles>
</settings>
打开Idea,配置Maven:
创建一个web项目
打开pom.xml,修改配置后如下(注意其中的注释,需要保留,后面打war包需要):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>TestSpringBoot3</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>TestSpringBoot3 Maven Webapp</name><url>http://maven.apache.org</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.2</version></parent><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
<!--<exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
--></dependency><!-- for jsp --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version>
<!--<scope>provided</scope>
--></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version>
<!--<scope>provided</scope>
--></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><version>10.1.34</version>
<!--<scope>provided</scope>
--></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jasper</artifactId><version>10.1.19</version>
<!--<scope>provided</scope>
--></dependency><!-- end for jsp --></dependencies><!--for spring boot init application--><build><finalName>TestSpringBoot3</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.sample.Application</mainClass></configuration></plugin></plugins></build></project>
最后的build-plugin的配置就是让外部tomcat环境启动时能够正常加载Springboot框架二设置的。其中所指的Application.java代码如下:
java">package com.sample;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;import org.springframework.boot.builder.SpringApplicationBuilder;@SpringBootApplication
@ServletComponentScan("com.sample")
public class Application extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {System.out.println("--SpringApplicationBuilder ------------------x-");return builder.sources(Application.class);}
}
这个文件可以分成两个,也可以像我一样放在一个文件里,它包含了连个部分:springbootapplication和Springbootservletinitializer,前者只有一个main方法,用来在idea环境下启动springboot项目用,后者是打包war后用的。
添加Springboot的配置文件application.properties(在src-main-resources目录下):
#server.port=8080
#server.servlet.context-path=/test3
spring.mvc.view.suffix=.jsp
#spring.mvc.view.prefix=/WEB-INF/jsp/
server.servlet.jsp.init-parameters.development=true
注意最后一行,那个也是支持jsp的关键。
写一个Controller测试以下:
java">package com.sample.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class Hello {@RequestMapping("/hello")public String helloHtml() {System.out.println("--hello1-index.html-------");return "index";}//@GetMapping("/helloJsp")@RequestMapping("/helloJsp")public String hello() {System.out.println("--hello1-jsp-------");return "/WEB-INF/jsp/hello1";}
}
请看我代码里特意保留了一个注释@GetMapping,不要用它,那个是SpringMvc的注解,在springboot项目里不起作用。
在src-main-webapp目录下编写一个index.jsp、WEB-INF/jsp/目录下编写hello1.jsp,内容只有一行即可,用来区分输出的页面,例如(两个文件里自己修改输出的内容,能够区分开两个文件即可):
java"><%out.println("This is index.jsp file.");%>
在Idea开发环境运行springboot项目
直接在Application.java代码页面右键 Run Application.main
注意观察下方的运行日志,其中就标明了默认的服务器端口8080,看到正常启动后,就可以打开浏览器输入以下地址:
http://localhost:8080/hello
http://localhost:8080/helloJsp
就可以分别看到两个页面的输出了。
打包war
去掉pom.xml里的所有注释,然后在maven栏目-plugin-war:war双击。