Windows Server 2008 R2,64 Apache Maven 2.2.1 Java版本:1.6.0\u 26 Java\u主页:C:\Program Files\Java\jdk1.6.0\u 26 Tomcat 7.0使用Java 1.6编译项目
我正在尝试使用tomcat7 maven插件来运行一个使用tomcat7:run目标的tomcat开发服务器。当我尝试点击索引时。服务器的jsp,我收到:
HTTP Status 500 - java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
type Exception report
message java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
description The server encountered an internal error (java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest") that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
java.lang.Class.getDeclaredMethods(Class.java:1791)
org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:108)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
我已经成功地使用tomcat7:deploy将相同的代码部署到本地tomcat Windows服务实例。当我访问服务器的本地实例时,没有错误。
我的代码依赖于javax。servlet。http。通过此maven依赖关系的HttpServlet:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
鉴于我得到的错误,我很确定此依赖项存在类加载冲突。我无法弄清楚冲突的方式/原因/位置;即,冲突的jar在哪里,以及当我尝试使用tomcat7: run运行时如何/为什么会发生这种情况,但当我使用本地tomcat实例运行“独立”时不会。
pom:
<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.moring.gloak</groupId>
<artifactId>gloak-registration</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>gloak-registration Maven Webapp</name>
<build>
<finalName>gloak-registration</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<configuration>
<server>local_tomcat</server>
<url>http://localhost:9280/manager/text</url>
<update>true</update>
<port>9280</port>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>people.apache.snapshots</id>
<url>http://repository.apache.org/content/groups/snapshots-group/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
项目web。xml
<!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>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>registrationServlet</servlet-name>
<servlet-class>com.moring.gloak.web.register.RegistrationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registrationServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
</web-app>
tomcat web。maven目标目录中的xml webapp声明:
<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">
实际servlet代码:
package com.moring.gloak.web.register;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public final class RegistrationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("index.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> messages = new HashMap<String, String>();
request.setAttribute("messages", messages);
// Get and validate name.
String serviceName = request.getParameter("serviceName");
if (serviceName == null || serviceName.trim().isEmpty()) {
messages.put("name", "Please enter service name");
} else if (!serviceName.matches("\\p{Alnum}+")) {
messages.put("name", "Please enter alphanumeric characters only");
}
if (messages.isEmpty()) {
messages.put("success", String.format("Service name is %s", serviceName));
}
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
对我来说,它就像。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
只需在依赖项中添加作用域
比州昆琼门在他对我原始帖子的评论中回答了这个问题。谢谢比州昆琼门!请投票支持他的评论。
我对自己问题的回答只是提供了更多的细节。
pom中的servlet api依赖关系。xml需要“提供的”范围。这是因为Tomcat已经提供(需要并使用自己)servlet api依赖关系。Maven的依赖关系范围规则定义如下:
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
更正的servlet api依赖关系xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
为什么以前的xml在我将war部署到本地tomcat实例时起作用,而不是“在过程中”运行它(即使用tomcat7:运行目标)?我没有确切的答案。maven in-process server runner显然以与本地tomcat实例不同的方式加载依赖项。
我的收获是,尽管我可能需要依赖项来编译一些代码,但我需要记住,如果我要将代码部署到某种容器中,我需要使用maven提供的作用域来确保依赖项不会发生冲突。
问题内容: 我的JSystem / Java / Eclipse环境有问题。 我收到此错误,但我不明白这是什么错误: 我想知道是否有人遇到过类似的问题,我认为我的环境对于解决它不是很重要,如果我能理解“ undergound”发生的事情,我希望自己解决问题。 非常感谢。 问题答案: 我认为这是当我两次加入图书馆时发生的。
问题内容: 是否可以在Java中加载类并“伪造”类的包名称/规范名称?我尝试这样做,这很明显,但是我在中收到“类名不匹配”的消息。 我这样做的原因是我试图加载在默认程序包中编写的API,以便我可以直接使用它而无需使用反射。该代码将在表示包和包名称导入的文件夹结构中针对该类进行编译。即: 我当前的代码如下: 问题答案: 如Pete所述,可以使用ASM字节码库来完成此操作。实际上,该库实际上带有一个专
我正在使用composer在我的项目中包含一个私有包,其中包含一些我将使用PHPUnit进行测试的类。包的大部分被正确地自动加载,我可以从单元测试中调用类,但是任何与它所在的目录命名相同的类都会抛出“未找到类”错误。 存储库符合psr-0,位于https://github.com/DeschutesDesignGroupLLC/IPS-Source 文件结构示例投掷错误: 调用
问:如何运行一个安装文件 .reg 答:注:your.reg为文件名 ExecWait "regedit.exe /s your.reg" 问:如何运行一个安装文件 .inf 答:注:skins.inf 为文件名 ExecWait "RunDll32 advpack.dll,LaunchINFSection skins.inf,DefaultInstall" 问:如何运行一个安装文件 .msi 答
每当我在tomcat中部署Web应用程序时,WEB-INF/lib中的所有jar都将加载到应用程序ClassLoader中。 我很少有其他位置有一些jars集,例如WEB-INF/ChildApp1/*. jar、WEB-INF/ChildApp2/*. jar......根据用户请求,我想将一些jars集加载到当前的类加载器中。 注意:我不想创建任何子类装入器。 我真正的要求是,如何以编程方式将
问题内容: 我今天在另一个问题中提出了这个问题,但是 由于措辞的方式,恐怕无法解决任何问题。 我有一个json输入,其中包含以下数据: 杰森 如您所见,option_value项是一个对象中的Array和 另一个对象中的简单字符串。 我怎样才能让Gson正确处理呢?我的类将此描述为 List对象,因此它适用于option_value是 数组的前几个项目,但是当它成为字符串时,应用程序崩溃,并且我收