Issue
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.
Solution
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.
Answered By - Sathish Thangathurai
Answer Checked By - David Marino (JavaFixing Volunteer)