2016-11-22 13 views
2

Я создал пример проекта Maven с помощью следующей команды:Невозможно создать экземпляр сервлета, получить класс не найден исключение

МВН архетип: генерировать -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, он сначала загружает экран приветствия, в котором я ввожу идентификатор пользователя и пароль, и нажмите кнопку отправки. Затем он перенаправляет на сервлет url, т. Е. http://localhost:8080/RohitLoginApp/RohitTestServlet?userName= "xyz" & psw = "www". Однако он не смог попасть в сервлет и получить ответ. Ниже ошибка:

СИЛЬНЫЙ: Выделяют исключение для сервлета RohitTestServlet java.lang.ClassNotFoundException: com.company.rohit.RohitTestServlet в org.apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.java:1856) на org.apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.java:1705) на org.apache.catalina.core.DefaultInstanceManager.loadClass (DefaultInstanceManager.java:506) в org.apache.catalina.core .DefaultInstanceManager.loadClassMaybePrivileged (DefaultInstanceManager.java:488) at org.apache.catalina.core.DefaultInstanceManager.newInstance (DefaultInstanceManager.java:115) на org.apache.catalina.core.StandardWrapper.loadServlet (StandardWrapper.java:1148) на org.apache.catalina.core.StandardWrapper.allocate (StandardWrapper.java:864) на org.apache.catalina.core. StandardWrapperValve.invoke (StandardWrapperValve.java:134) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:122) at 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 ke (StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:625) на org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:318) на java.util.concurrent. ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java: 61) at java.lang.Thread.run (Thread.java:745)

Невозможно загрузить класс. Я делал чистую сборку много раз, но все еще не смог загрузить сервлет.

+0

У вас есть опечатка в 'request.getParametker()' – Krzysiek

+0

Вы пытались щелкнуть правой кнопкой мыши по проекту в Проводнике пакетов и выбрать Maven -> Update Project (Alt + F5)? Затем перейдите на вкладку «Серверы», разверните экземпляр Tomcat и удалите проект. После этого нажмите Run as .. -> Запустите на сервере – Krzysiek

ответ

0

Похоже, что ваш класс не скомпилирован в файл войны. Вы должны убедиться, что ваш класс сервлета определен в src/main/java с соответствующими подпапками пакетов. Вы можете проверить это, перейдя в каталог webapps и заглянув в папку «classes», чтобы узнать, есть ли у вас класс.

+0

Спасибо за ответ. Вы сказали, что это обряд. Когда я дал maven archtype как «maven-archetype-webapp», я думал, что maven создаст соответствующую структуру папок. Разве это не так? – RRN

+0

С вашего изображения вы определили свой класс сервлета в «src/main/resources» вместо «src/main/java». «src/main/resources» предназначен для статических ресурсов, таких как файлы свойств. Весь код должен находиться под «src/main/java», который должен быть скомпилирован java-компилятором при построении войны. – GameSalutes

+0

ОК. Но в моем проекте у меня нет папки i.e. src/main/java. Так что мне нужно его создать? – RRN