#java #servlets #tomcat7
#java #сервлеты #tomcat7
Вопрос:
когда я запускаю свое приложение, у меня возникает ошибка HTTP:
Статус HTTP 404 — /Имяпроекта/
Это URL-адрес моего проекта:
локальный хост: 8080 /Инициация1/
Когда я ввожу эту строку в адресную строку:
localhost:8080/Initiation1/CarteIdentite
у меня это сообщение об ошибке HTTP 500:
javax.servlet.ServletException: Error instantiating servlet class ca.web.CarteIdentite
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.ClassNotFoundException: ca.web.CarteIdentite
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
Это мой код сервлета:
package ca.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
/**
* Servlet implementation class CarteIdentite
*/
@WebServlet("/CarteIdentite")
public class CarteIdentite extends HttpServlet
{
// paramètres d’instance
private String defaultNom = null;
private String defaultAge = null;
private String defaultCourriel = null;
//init
public void init()
{
// on récupère les paramètres d’initialisation de la servlet
ServletConfig config = getServletConfig();
defaultNom = config.getInitParameter("defaultNom");
if(defaultNom==null)
{
defaultNom="XXXXXXXXXXXXXXXX";
}
defaultAge = config.getInitParameter("defaultAge");
if(defaultAge==null)
{
defaultAge="AAA";
}
defaultCourriel = config.getInitParameter("defaultCourriel");
if(defaultCourriel==null)
{
defaultCourriel="XXXXXX@XXXXXXXX.XX";
}
}
//GET
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
IOException, ServletException
{
// on récupère les paramètres du formulaire
String nom = request.getParameter("txtNom");
if (nom == null)
{
nom = defaultNom;
}
String age = request.getParameter("txtAge");
if (age == null)
{
age = defaultAge;
}
String courriel = request.getParameter("txtCourriel");
if (courriel == null)
{
courriel = defaultCourriel;
}
// on affiche le formulaire
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println
(
"<html>"
"<head>"
"<title>Carte d’identité</title>"
"</head>"
"<body>"
"<center>"
"<h2>Carte d’identité</h2>"
"<form action=’’ method=’post’>"
"<table>"
"<tr>"
"<td>Nom:</td>"
"<td><input name=’txtNom’ value=’" nom "’ type=’text’ size=’30’></td>"
"</tr>"
"<tr>"
"<td>Age:</td>"
"<td><input name=’txtAge’ value=’" age "’ type=’text’ size=’3’></td>"
"</tr>"
"<tr>"
"<td>Courriel:</td>"
"<td><input name=’txtCourriel’ value=’" courriel "’ type=’text’ size=’30’></td>"
"</tr>"
"</table>"
"<table>"
"<tr>"
"<td><input type=’submit’ value=’Envoyer’></td>"
"<td><input type=’reset’ value=’Effacer’></td>"
"</tr>"
"</table>"
"</form>"
"</center>"
"</body>"
"</html>"
);
}
/**
* @param request la requête HTTP du client
* @param response la réponse HTTP qu’on va construire
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
//on passe la main au GET
doGet(request, response);
}
}
Это мой web.xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>CarteIdentite</servlet-name>
<servlet-class>ca.web.CarteIdentite</servlet-class>
<init-param>
<param-name>defaultNom</param-name>
<param-value>inconnu</param-value>
</init-param>
<init-param>
<param-name>defaultAge</param-name>
<param-value>XXX</param-value>
</init-param>
<init-param>
<param-name>defaultCourriel</param-name>
<param-value>inconnu</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CarteIdentite</servlet-name>
<url-pattern>/CarteIdentite</url-pattern>
</servlet-mapping>
</web-app>
Вот структура моего проекта:
Комментарии:
1. Привет всем, у меня нет папки WEB-INF / classes в структуре проекта. Кроме того, когда я щелкаю правой кнопкой мыши по имени проекта, у меня нет «Пути сборки», спасибо.
2. Вы действительно не видите этого в Project Explorer . Однако вы можете увидеть это в режиме навигатора или просто прямо в месте развертывания файла WAR. Однако это должно произойти автоматически. Вы перестроили проект, повторно опубликовали сервер и перезапустили сервер?
Ответ №1:
Возможно, Eclipse не рассматривается src
как исходная папка. Попробуйте щелкнуть по нему правой кнопкой мыши и выбрать Build Path
-> Use as source folder
.
Ответ №2:
Проверьте ca.web.CarteIdentite
, правильно ли скомпилирован класс и попал ли он в войну вашего проекта (в разделе WEB-INF /classes). Если нет, проверьте / исправьте настройки пути сборки проекта.