重温 javaweb 之项目搭建
环境
日期:2022年2月17日
环境版本:idea2021、maven3、jdk8、tomcat10
下载解压 tomcat
Idea 配置应用服务器
Idea 创建 maven javaweb 项目
清理 pom.xml 中不必要的东西。
web.xml 模板
注意天坑:web-app 版本错误可能会导致 jsp el 表达式无法解析而将源码直接返回给客户端!!!
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> web-app>
以下是通过 mvn 创建时生成的 web.xml,不能用这个
DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
项目目录创建
配置 Idea 项目结构
Idea 添加项目启动配置
启动项目
启动并访问 http://localhost:8080/webproject_war_exploded/
tomcat10 中 jsp-api 与 servlet-api 的变化
Tomcat 10 将 JavaEE 也换成了Jakarta? EE,导致 jsp-api 与 servlet-api 包路径由原来的 "javax.servlet.*" 变成了 "jakarta.servlet",
在引入这两个 jar 包时需要换成以下两个包:【也可以手动将这 tomcat/lib/ 下的两个 jar 包添加到项目依赖中去】
否则会报错:jakarta.servlet.ServletException: 类 ... 不是Servlet
<dependency> <groupId>jakarta.servletgroupId> <artifactId>jakarta.servlet-apiartifactId> <version>5.0.0version> <scope>providedscope> dependency> <dependency> <groupId>jakarta.servlet.jspgroupId> <artifactId>jakarta.servlet.jsp-apiartifactId> <version>3.0.0version> <scope>providedscope> dependency>
所以升级到 tomcat10 之前要注意:如果项目中其他框架依赖了 jsp-api 与 servlet-api ,会由于包路径的变化而无法工作,建议不要贸然升级到 tomcat10;
<dependency> <groupId>javax.servletgroupId> <artifactId>javax.servlet-apiartifactId> <version>3.1.0version> <scope>providedscope> dependency> <dependency> <groupId>javax.servlet.jspgroupId> <artifactId>javax.servlet.jsp-apiartifactId> <version>2.3.0version> <scope>providedscope> dependency>