2016-11-22 96 views
2

我曾尝试使用下面的命令创建了一个示例Maven项目:无法实例化一个servlet,让类未发现异常

MVN原型:产生-DgroupId = com.rohit -DartifactId = RohitLoginApp -DarchetypeArtifactId = Maven的原型-webapp -DinteractiveMode =假

下面是项目结构的Eclipse中的图像的链接:

Maven project structure in eclipse

的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.rohit</groupId> 
    <artifactId>RohitLoginApp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>RohitLoginApp Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>RohitLoginApp</finalName> 
    </build> 
</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>RohitTestServlet</servlet-name> 
    <display-name>RohitTestServlet</display-name> 
    <description></description> 
    <servlet-class>com.company.rohit.RohitTestServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>RohitTestServlet</servlet-name> 
    <url-pattern>/RohitTestServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

RohitTestServlet.java

package com.company.rohit; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class RohitTestServlet 
*/ 
public class RohitTestServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public RohitTestServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     String userId = request.getParametker("userName"); 
     String pwd = request.getParametker("psw"); 
     response.getWriter().write("User ID and password are received"); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

的index.jsp

<html> 
<body> 
<h2>Login Page</h2> 
<form action="RohitTestServlet"> 
    User Name<br> 
    <input type="text" name="userName"> 
    <br> 
    Password<br> 
    <input type="password" name="psw"> 
    <br><br> 
    <input type="submit" value="Submit"> 
</form> 
</body> 
</html> 

当我在tomcat上部署此应用程序时,它首先加载欢迎屏幕,我在其中输入用户名和密码,然后单击提交按钮。然后它重定向到servlet url,即http://localhost:8080/RohitLoginApp/RohitTestServlet?userName=“xyz”& psw =“www”。然而它无法击中servlet并获得响应。下面是错误:

严重:分配例外的servlet RohitTestServlet 抛出java.lang.ClassNotFoundException:com.company.rohit.RohitTestServlet 在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1856 ) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1705) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506) at org.apache.catalina.core .DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864) at org.apache.catalina.core。 StandardWrapperValve.invoke(StandardWrapperValve.java:134) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在org.apache.catalina.valves。 AccessLogValve.invoke(AccessLogValve.java:956) at org.apache.catalina.core.StandardEngineValve.invo科(StandardEngineValve.java:116) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent。的ThreadPoolExecutor。runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java: (Thread.java:745)

它无法加载类。我已经做了很多次,但仍然无法加载servlet。

+0

您在'request.getParametker()'中有一个拼写错误' – Krzysiek

+0

您是否尝试过在包资源管理器中右键单击项目并选择Maven - > Update Project(Alt + F5)? 然后转到服务器选项卡,展开Tomcat实例并从那里删除您的项目。之后,点击运行.. - >在服务器上运行 – Krzysiek

回答

0

看起来你的班级没有被编译到战争文件中。您需要确保您的servlet类在src/main/java中使用相应的包子文件夹进行定义。你可以通过访问webapps目录并查看“classes”文件夹来查看你的班级是否在那里。

+0

感谢您的回应。你说的是仪式。当我将maven archtype设置为“maven-archetype-webapp”时,我认为maven会创建适当的文件夹结构。这不正确吗? – RRN

+0

从您的映像中,您在“src/main/resources”而不是“src/main/java”中定义了您的servlet类。 “src/main/resources”用于静态资源,例如属性文件。所有代码需要在构建战争时由java编译器编译的“src/main/java”下。 – GameSalutes

+0

好的。但我没有任何文件夹,即我的项目中的src/main/java。那么我需要创建一个吗? – RRN