我在网上关注一个例子,但是当我使用某个函数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>
非常感谢任何帮助。谢谢。
答案 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:
这些也是玻璃鱼束,在这个过程中重新包装并制成osgi束,因此它们可以在osgi环境中与jetty一起使用....它们应该正常工作,我们将它们打包在我们的jetty7发行版中。@ Toby Speight的