Я получаю ошибку, когда пытаюсь запустить локальный сервер Tomcat 7 в Eclipse:
"Запуск Tomcat v7.0 Server на localhost" возникла проблема. Сервер Tomcat v7.0 Сервер на локальном хосте не запускался.
Это шаги, которые я сделал:
Создайте новый servlet
под названием "Testservlet".
Имя пакета: testpackage
servlet-api.jar
.Это структура пути в Eclipse:
Содержимое файла web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Testservlet</servlet-name>
<servlet-class>testpackage.Testservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Testservlet</servlet-name>
<url-pattern>/Testservlet</url-pattern>
</servlet-mapping>
</web-app>
Содержимое файла Testservlet.java
:
package testpackage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(description = "a test servlet", urlPatterns = { "/Testservlet" })
public class Testservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("This is a test servlet");
}
}
Затем я добавляю проект на сервер Tomcat и пытаюсь запустить сервер. Это когда я получаю сообщение об ошибке, из-за которой сервер не запускается.
Если я удалю связанную с сервлетом разметку из файла web.xml, сервер начнет отлично. Это разметка, которую я удаляю:
<servlet>
<servlet-name>Testservlet</servlet-name>
<servlet-class>testpackage.Testservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Testservlet</servlet-name>
<url-pattern>/Testservlet</url-pattern>
</servlet-mapping>
Я предполагаю, что мне нужна вышеуказанная разметка в файле web.xml, чтобы сервлет отображался, когда я переходил на test/Testservlet? Особенно, когда я развертываю проект на удаленном сервере.
Что я здесь делаю неправильно?
Servlet API 3.0 включил новый пакет javax.servlet.annotation
который предоставляет аннотации, такие как @WebServlet
, для аннотирования класса сервлета, и это может исключить использование конфигурации сервлета в web.xml
. Таким образом, servlet
и servlet-mapping
устарели.
Также не следует развертывать servlet-api.jar
с вашим приложением. Tomcat 7 уже имеет эти классы и поддерживает множество API-интерфейсов Servlet. Он автоматически выберет, какой API сервлета загрузить, используя дескриптор развертывания веб-приложения.
test.war
или каков контекст вашего приложения? Имя проекта не совпадает с контекстом, используемым для развертывания приложения. Вы должны указать контекст, в котором должно быть развернуто приложение.
Лучшими решениями являются добавление времени выполнения Runtime во время создания сервлета 1.Add runtime сервера при создании имени sevelet 2.Add указано, что установленные tomcat местоположения