如何使用不同的javax.servlet-api?

How to use a different javax.servlet-api?

我正在尝试调试一些代码以确保我正在设置一些 HttpServletResponse headers 正确。为此,我只想从 HttpServletRequest 和 HttpServletResponse 打印出 headers。请求端工作正常,但响应没有,因为 response.getHeaderNames() 未定义。

    private void printDebug(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("----- Request ---------");
        Collections.list(request.getHeaderNames()).forEach(n -> System.out.println(n + ": " + request.getHeader(n.toString())));

        System.out.println("----- Response ---------");
        response.getHeaderNames().forEach(n -> System.out.println(n + ": " + response.getHeader(n)));
}

使用:
Eclipse Oxygen.1a 版本 (4.7.1a)
Tomcat v.7.0
jdk1.8.0_112

项目方面:
动态网络模块 3.1

在我的 pom 文件中:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

但有些地方我确定我缺少一个配置,它默认将 Eclipse 指向我们 2.5 javax.servlet-api,但我只是不知道在哪里查看或如何更改它。

更新: 如果我取消选中 "Dynamic Web Module" 然后执行 maven 更新,maven 会将动态 Web 模块设置回 2.5

如何让这个 getHeaderNames() 起作用?

问题是,当我编译 javax.servlet-api v2.5 时,即使我在我的 pom 中明确包含 3.1,也正在使用。

首先,按照@Oleg 的建议,我打开了 HttpServletResponse 的声明并检查了包资源管理器以找出 HttpServletResponse 的来源。它来自 Maven 依赖项中的 servlet-api-2.5.jar。这是我认为正在发生但不是我想要的。

接下来,我检查了所有的依赖层次结构,以查找 pom 中的哪个条目包含 2.5 版本。我注意到 jstl 工件包含我不想要的旧版本。

所以我改变了这个:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

对此:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
  <exclusions>
     <exclusion>
        <groupId>java.servlet</groupId>
        <artifactId>servlet-api</artifactId> 
     </exclusion>
  </exclusions>
</dependency>

最后,我进行了 Maven 更新和干净的编译以确保它有效。

希望这对其他人有帮助!

谢谢@Oleg。