解决在web.xml中添加filter后idea提示错误的问题

  之前在整合SSM框架的时候,配置web.xml的时候一直提示错误,但filter、servlet的顺序写的也是对的,而且项目也能正常运行。
错误提示:

The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)

后来发现是web.xml的头部声明的问题。由于当时用的是maven创建的,默认使用的是Servlet2.3模板。最后改成Servlet3.1的就好了。

Servlet 3.1:
Java EE 7 XML schema,命名空间是 http://xmlns.jcp.org/xml/ns/javaee/
JSTL标签库使用<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">

</web-app>

Servlet 3.0:
Java EE 6 XML schema,命名空间是 http://java.sun.com/xml/ns/javaee

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
          version="3.0">

</web-app>

Servlet 2.5:
Java EE 5 XML schema,命名空间是 http://java.sun.com/xml/ns/javaee

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd"
          version="2.5">

</web-app>

Servlet 2.4:
Java EE 1.4 XML schema, 命名空间是 http://java.sun.com/xml/ns/j2ee

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
          version="2.4">

</web-app>

Servlet 2.3:
Java EE 1.3 DTDs schema
JSTL标签库使用<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<!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>
  <display-name>Servlet 2.3 Web Application</display-name>
</web-app>

下面来罗列一下JSP中各个版本的JSTL的taglib的引用方式:
JSTL1.0(要求(必须满足此条件):Servlet 2.3, JavaServer Pages 1.2)的使用方法:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

JSTL1.1(要求(必须满足此条件):Servlet 2.4, JavaServer Pages 2.0)的使用方法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL1.2(要求(必须满足此条件):Servlet 2.5, JavaServer Pages 2.1)的使用方法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

不同版本的Java EE对应的要求:

VersionReleased in
JEE2 (J2EE 1.2)12 Dec 1999Servlet 2.2JSP 1.1
JEE3 (J2EE 1.3)24 Sep 2001Servlet 2.3JSP 1.2JSTL 1.0
JEE4 (J2EE 1.4)11 Nov 2003Servlet 2.4JSP 2.0JSTL 1.1JSF1.1
JEE511 May 2006Servlet 2.5JSP 2.1EL2.1JSTL 1.2JSF 1.2
JEE610 Dec 2009Servlet 3.0JSP 2.2EL 2.2JSTL 1.2JSF 2.0
JEE712 Jun 2013Servlet 3.1JSP 2.3EL 3.0JSTL 1.2JSF 2.2
IntelliJ IDEA 社区版是一款流行的 Java 开发集成环境,通常情况下它会自动管理 web 应用的配置文件,比如 `web.xml`。如果你手动添加了 `web.xml` 文件并且遇到红色波浪线错误,这可能是由于几个原因: 1. **冲突检测**:IntelliJ IDEA 可能检测到你的 `web.xml` 内容符合规范,或者与其他已经存在的配置存在冲突,如重复的 servlet 或 filter 定义。 2. **缺少模块设置**:如果没有正确配置 Web 模块,IDEA 可能知道如何处理这个文件。你需要确保将 `web.xml` 添加到正确的 Web 应用模块中,并配置相应的部署描述符路径。 3. **依赖注入插件**:某些插件可能会干扰 web.xml 的解析,检查是否安装了与默认行为冲突的插件,尝试禁用它们看看问题是否会消失。 4. **版本兼容性**:如果项目的构建工具(如 Maven、Gradle 等)版本过旧,可能导致 web.xml 解析问题。确认使用的构建工具与项目配置是否匹配。 要解决这个问题,你可以按照以下步骤操作: 1. **检查语法**:确保 `web.xml` 中的 XML 语法无误,可以使用内置的XML验证功能或者在线验证工具。 2. **更新或调整配置**:在 IntelliJ IDEA 的模块设置里检查 web.xml 的关联,可能需要指定部署描述符的路径。 3. **启用或禁用插件**:查看是否有影响 web.xml 解析的第三方插件,必要时禁用它们。 4. **更新项目依赖**:如有版本问题,考虑升级相关库到最新版本。 如果问题仍然存在,建议查阅 IntelliJ IDEA 文档,或者搜索相关论坛寻求帮助,提供详细错误信息以便定位问题
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值