Статус HTTP 404 возникает, когда я нажал кнопку отправки

87
10

Это мой html-код:

<form action="Post" method="post"  >

<label for="semester">Semester</label>
<input type="text" name="semester" placeholder="Enter the semester">

<label for="prof-name">Instructor name</label>
<input type="text" name="prof-name" placeholder="Enter the instructor name">

<label id="course-eval">How was the course?</label>
<textarea name="course-evaluation" placeholder="Write everything about the course"></textarea>

<label for="prof-eval">How was your professor?</label>
<textarea name="prof-evaluation" placeholder="Write everything about your professor"></textarea>

<input type="submit" value="Submit" >

</form>

И это мой код сервлета:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String semester = request.getParameter("semester");
String name = request.getParameter("prof-name");
String course = request.getParameter("course-evaluation");
String prof = request.getParameter("prof-evaluation");

response.setContentType("text/html;");
PrintWriter writer = response.getWriter();

writer.println("<html><head></head><body>");
writer.println("Semester:"+semester+"<br/>");
writer.println("Instructor name:"+name+"<br/>");
writer.println("How was the course?:"+course+"<br/>");
writer.println("How was your professor?:"+prof+"<br/>");
writer.print("</body></html>");
writer.close();
}

Это мой 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>skce</display-name>
<welcome-file-list>
<welcome-file>cse101.html</welcome-file>
<welcome-file>cse101.htm</welcome-file>
<welcome-file>cse101.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Post</servlet-name>
<servlet-class>com.skce.post.Post</servlet-class>

<init-param>
<param-name>semester</param-name>
<param-value></param-value>
</init-param>

<init-param>
<param-name>prof-name</param-name>
<param-value></param-value>
</init-param>

<init-param>
<param-name>course-evaluation</param-name>
<param-value></param-value>
</init-param>

<init-param>
<param-name>prof-evaluation</param-name>
<param-value></param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Post</servlet-name>
<url-pattern>/post</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.skce.post.ContextListener</listener-class>
</listener>
</web-app>

И я получил статус HTTP 404, а описание - "Запрошенный ресурс недоступен". Я использую Apache Tomcat/7.0.73.

Что может сделать эта ошибка?

спросил(а) 2021-01-19T18:11:59+03:00 2 месяца, 3 недели назад
1
Решение
106

Если ваша форма является страницей JSP, используйте taglib для создания правильного пути контекста для вашей формы, поэтому вы не будете жестко закодированы в атрибуте действия формы. Тег <c:url/> taglib добавляет правильный путь к вашему действию формы.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<form action="<c:url value="/post"/>" method="post" >
...
</form>

Чтобы использовать taglib, вам нужно добавить следующую зависимость к вашему веб-проекту.

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

ответил(а) 2021-01-19T18:11:59+03:00 2 месяца, 3 недели назад
44

+ Изменить

<form action="Post" method="post">

в


<form action="Post" action = "/post" method="post">

Зачем?

В вашем текущем коде вы не указали атрибут action в форме. Таким образом, ваше сообщение формы по умолчанию имеет значение "self", что означает, что почтовый запрос попадет в ваш контейнер сервлета с URL-адресом вашей формы. Однако у вас нет сервлета почтового обработчика, сопоставленного с URL-адресом формы. Поэтому Catalina выбрасывает 404 - клиентскую ошибку. Я вижу, что ваш сервлет-обработчик отправляется в URL-адрес "/post". Поэтому для того, чтобы эта форма подавала работу, вы должны использовать "/post" в своем действии формы.

ответил(а) 2021-01-19T18:11:59+03:00 2 месяца, 3 недели назад
-4

<form action='post' method="POST">
....
</form>

ответил(а) 2021-01-19T18:11:59+03:00 2 месяца, 3 недели назад
-4

Я подозреваю ваш атрибут "действие". Является ли 'Post' вашим именем сервлета? Попробуйте указать свой полный url как '/application-name/servletName'. Также, как упоминалось в комментариях, убедитесь, что ваш сервлет-сопоставление в web.xml

ответил(а) 2021-01-19T18:11:59+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема