Eclipse的maven项目中的类型HttpServletRequest未定义类型getServletContext()

时间:2016-12-25 22:38:24

标签: java eclipse maven servlets servlet-filters

我在网上关注一个例子,但是当我使用某个函数request.getServletContext()。getServletRegistrations()时。它无法识别此功能

 //   Check the target of the request is a servlet?
 private boolean needJDBC(HttpServletRequest request) {
   System.out.println("JDBC Filter");

   String servletPath = request.getServletPath();
   // => /abc/mnp
   String pathInfo = request.getPathInfo();

   String urlPattern = servletPath;

   if (pathInfo != null) {
       // => /spath/*
       urlPattern = servletPath + "/*";
   }

   // Key: servletName.
   // Value: ServletRegistration

   Map<String, ? extends ServletRegistration> servletRegistrations = request.getServletContext()
           .getServletRegistrations();

   // Collection of all servlet in your webapp.
   Collection<? extends ServletRegistration> values = servletRegistrations.values();
   for (ServletRegistration sr : values) {
       Collection<String> mappings = sr.getMappings();
       if (mappings.contains(urlPattern)) {
           return true;
       }
   }
   return false;
}

当我在常规动态Web项目中使用相同的功能时,它可以正常工作而没有错误,但使用maven这些相同的方法是未定义的。我试图改变     request.getServletContext()getServletRegistrations();

要     。request.getSession()的getServletContext()getServletRegistrations();

我识别了getSession.getServletContext(),但它没有认识到getServletRegistrations()。我认为它可能是一个依赖项问题所以我在我的pom.xml中添加了几个依赖项

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ers</groupId>
<artifactId>ERSProject</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ERSProject Maven Webapp</name>
<url>http://maven.apache.org</url>


<repositories>
    <!-- Repository for ORACLE ojdbc6. -->
    <repository>
        <id>codelds</id>
        <url>https://code.lds.org/nexus/content/groups/main-repo</url>
    </repository>
</repositories>



<dependencies>

    <!-- Oracle database driver -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.servlet.jsp.jstl</artifactId>
        <version>1.2.5-b03</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>

</dependencies>
<build>
    <finalName>ERSProject</finalName>
</build>

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

REPLACE

&LT;依赖&gt;
        &LT; groupId&gt; javax.servlet&lt; / groupId&gt;
        &LT; artifactId&gt; javax.servlet-api&lt; / artifactId&gt;
        &LT;版本&GT; 3.0.1&LT; /版本&GT;
        &LT;范围&GT;提供&lt; /范围&GT;
    &LT; /依赖性&GT;


&LT;依赖性&GT;
                &LT;的groupId&GT; org.mortbay.jetty&LT; /&的groupId GT;
                &LT;的artifactId&GT; servlet的API&LT; / artifactId的&GT;
                &LT;版本&GT; 3.0.20100224&LT; /版本&GT;
            &LT; /依赖性&GT;



希望它能起作用

**** org.mortbay.jetty:servlet-api-2.5:6.1.5与javax.servlet.jsp之间的差异:servlet-api:2.1 ****

Jetty与jsp有着悠久而丰富多彩的历史,没有我们自己的jsp实现,我们经常利用其他实现,根据版本号判断你看那些非常旧的版本,我们在glassfish上维护补丁jsp实现。我认为这是一个补丁,用于支持在码头登录,然后修复错误或三个。

现在有一天我们一直在使用java.net项目中的jsp工件,这些工件一段时间后从glassfish中分离出来。然而,这似乎并不是经常跟踪错误修复,所以我们正在尝试在tomcat中执行jasper实现。

回到你的问题,jsp-api工件通常只是重新打包的工件,因为api不会频繁更改。我们历史上将它们重新捆绑,以使它们与修补后的实现配对。

现在,您显然正在使用jetty-6设置,因为您仍在使用org.mortbay包装,但jetty6和jetty7都是servlet-api 2.5,因此您可以使用jetty7 jsp设置,我们有一个在这里声明这些工件的方便的pom:

http://central.maven.org/maven2/org/eclipse/jetty/jetty-jsp/7.6.5.v20120716/jetty-jsp-7.6.5.v20120716.pom

这些也是玻璃鱼束,在这个过程中重新包装并制成osgi束,因此它们可以在osgi环境中与jetty一起使用....它们应该正常工作,我们将它们打包在我们的jetty7发行版中。@ Toby Speight的