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

卡斯德加

我正在尝试调试一些代码以确保我正确设置了一些 HttpServletResponse 标头。为此,我只想打印出来自 HttpServletRequest 和 HttpServletResponse 的标头。请求端工作正常,但响应没有,因为 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 Release (4.7.1a)
Tomcat v.7.0
jdk1.8.0_112

Project Facets:
Dynamic Web Module 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,但我只是不知道在哪里查看或如何更改它。

更新:如果我取消选中“动态 Web 模块”,然后进行 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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在我的 Maven 项目中包含 javax.servlet servlet-api 3.0.1?

如何在Eclipse项目中导入javax.servlet API?

javax.servlet-api.jar与servlet-api.jar之间的区别

如何获得javax.servlet.Filter的Keycloak验证之前调用

如何在javax.servlet.Filter中注入ResourceInfo

如何修复的ClassNotFoundException:javax.servlet.http.HttpFilter

如何告诉Gradle在哪里寻找javax.servlet?

为什么不建议使用(javax.servlet。)SingleThreadModel?

如何解决:javax.servlet.ServletException:java.lang.NoClassDefFoundError:javax / xml / ws / soap / SOAPFaultException

使用Netty实现Servlet API

如何解决在试图打包REST应用程序从Servlet“不能被转换为javax.servlet.Servlet”错误

编译失败-无法从https://maven.repository.redhat.com/ga/javax/servlet/javax.servlet-api/maven-metadata.xml加载Maven元数据

Maven中最新的javax.servlet.jsp jsp-api版本是否稳定?

如何使用Servlet API处理POST请求

javax.servlet在哪里?

如何使用javax动态servlet注册配置多个Jersey提供程序包

如何获得javax.comm API?

如何使用不同的策略在 Cloudfront 上缓存 API

如何使用不同的 API Javascript 映射日期

使用Javax API的固定长度验证

使用Java Servlet API存储敏感

如何从javax.servlet.filter doFilter方法返回JSON响应消息和HTTP错误代码?

使用Javax和Jersey Servlet调度程序的Java RESTful服务入门

使用jboss时不存在javax.servlet.annotation包

替代不推荐使用的javax.servlet.http.HttpUtils.parseQueryString吗?

无法使用Spring WebFlow将对象强制转换为javax.servlet.http.HttpServletRequest

添加javax.servlet-api依赖项会引发异常,导致org.slf4j.impl.StaticLoggerBinder无法加载,但是我不使用sl4j,而是使用thymeleaf

无法实例化javax.servlet.ServletException

无法解析javax.servlet.http