0

I have an annoying problem, I build my maven app, run it on tomcat 8.5.6 server, main page works but when i press the log in button which should redirect me to /home it gives 404 not found ..

@WebServlet("/servletLog")
public class LoginServlet extends HttpServlet {

LoginService userService = new LoginService();
/**
 * 0
 */
 private static final long serialVersionUID = -5954379250312991811L;

 @Override
    public void doPost(HttpServletRequest request, HttpServletResponse   response)       throws ServletException, IOException {

    try {

        User user = new User();
        user.setUsername(request.getParameter("username"));
        user.setPassword(request.getParameter("userpass"));

        user = userService.login(user);

        if (user != null) {

            HttpSession session = request.getSession(true);
            session.setAttribute("currentSessionUser", user);

            if (user.getUserRole().name().equals("CLIENT")) {
                response.sendRedirect("home.jsp");
            } // logged-in page
            else if (user.getUserRole().name().equals("ADMIN")) {
                response.sendRedirect("admin.jsp");
            } else {
                response.sendRedirect("403.jsp");
            }
        } else {
            response.sendRedirect("403.jsp"); // error page
        }
    }

    catch (Throwable theException) {
        System.out.println(theException);
    }
}
}

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Application</title>
</head>
<body>
<form action="servletLog" method="post">
    <fieldset style="width: 300px">
        <table>
            <tr>
                <td>User ID</td>
                <td><input type="text" name="username" required="required"   /></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="userpass"      required="required" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Login" /></td>
            </tr>
        </table>
    </fieldset>
</form>
</body>
</html>

I've tried this way with annotations, and even with

web.xml

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.bogdan.assign2.servlets.LoginServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
</servlet-mapping>

<servlet>
    <description></description>
    <display-name>LogoutServlet</display-name>
    <servlet-name>LogoutServlet</servlet-name>
    <servlet-class>com.bogdan.assign2.servlets.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LogoutServlet</servlet-name>
    <url-pattern>/LogoutServlet</url-pattern>
</servlet-mapping>



<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>

So I never used both together :) And i don't know why i keep getting 404 not found on /servletLog.

This is my pom.xml

<modelVersion>4.0.0</modelVersion>
<groupId>com.bogdan.as2</groupId>
<artifactId>assign1_2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>assign1_2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api -->
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.5.Final</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

</dependencies>
<build>
    <finalName>assign1_2</finalName>
</build>
</project>

I don't really get what is wrong.. Error :

HTTP Status 500 - Error instantiating servlet class com.bogdan.assign2.servlets.LoginServlet

type Exception report

message Error instantiating servlet class com.bogdan.assign2.servlets.LoginServlet

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class com.bogdan.assign2.servlets.LoginServlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) root cause

java.lang.ClassNotFoundException: com.bogdan.assign2.servlets.LoginServlet org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) note The full stack trace of the root cause is available in the Apache Tomcat/8.5.6 logs.

Ah One more thing that could help: when i try to generate default serial ID for LoginServlet: I get Could not find the class file, Make sure the file is compilable.

1 Answers1

0

Roman, your exception clearly says that the class LoginServlet doesn't exist inside the package/directory "com.bogdan.assign2.servlets". Please double check your package name or provide a valid package name in the web.xml file.

Also, LoginServlet is present inside src->main->java->com->bogdon->assign2->servlets directory? since it's an maven project.