重温 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>

相关