Как мне направить это в правильное местоположение? - PullRequest
0 голосов
/ 17 февраля 2019

Я относительно новичок в HTTP и кодировании в целом, и я столкнулся со следующей проблемой.Я заранее прошу прощения за любые ошибки, которые я допускаю, задавая этот вопрос, но я благодарен за любые отзывы.

Мой (давайте назовем его) инструктор создал проект Evense в Maven, чтобы продемонстрировать, как ведут себя сервлеты.В src / main / java у меня есть следующий класс.

public class MyServlet extends HttpServlet {

@Override
public void init() {
    System.out.println("My servlet initializing");
}

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException {
    System.out.println("Request received");
    super.service(request, response);
}

@Override
protected void doPost(HttpServletRequest request, 
HttpServletResponse response) throws IOException, ServletException {
    System.out.println("Post received");

    String parameter = request.getParameter("name");
    System.out.println(parameter);

    System.out.println(request.getReader().readLine());

    // We call our service
    response.getWriter().write("Hi there!");
    response.getWriter().write("Hi there again!");
    response.sendRedirect("http://google.com");
}

@Override
protected void doGet(HttpServletRequest request, 
HttpServletResponse response) throws IOException, ServletException {
    System.out.println("Get received");
}

В файле web.xml, соответствующем этому проекту, мне присвоено имя сервлета myservlet.Шаблон URL затем устанавливается на /myservlet.Теперь я пытаюсь понять, как работает HTTP.Используя Postman, я получил сервер TOMCAT, который я использую, чтобы вести себя как ожидалось с запросами GET и POST.Однако проблема возникает в следующем HTML-документе, который я создал и который называется form.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form method="post" action="./details">
    <input name="name" type="text" placeholder="enter your name">
    <input type="submit">
</form>

</body>
</html>

Когда я открываю его в Firefox, форма загружается нормально.Я набираю что-то случайное и отправляю запрос.Поскольку из того, что я понимаю, это запрос POST, я думаю, что бит action="./details" будет ссылаться на сервлет, который я определил выше, и, в частности, на метод doPost(), который, в свою очередь, должен перенаправить меня в Google.Тем не менее, он дает мне сообщение об ошибке «Firefox не может найти файл в ...src/main/webapp/details».В чем проблема?

Кроме того, в приведенном выше методе doPost(), что происходит с вызовами response.getWriter().write(...)?Я не вижу их нигде после отправки чего-либо в виде файла form.html.В любом случае, я в замешательстве.Точка в правильном направлении будет высоко ценится.Если потребуется какая-либо дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 17 февраля 2019

В вашем примере ./details интерпретируется относительно того, где вы сохранили документ form.html.Когда вы говорите, что открыли его в Firefox, я предполагаю, что вы имели в виду, что вы открыли файл HTML из локальной папки.Вам нужно перейти к форме через Tomcat.Если форма сохранена в src/main/webapp/form.html, то, скорее всего, она будет видна из http://localhost:8080/form.html

Кроме того, если для шаблона URL для сервлета задано значение /myservlet, то действие формы также необходимобыть /myservlet, чтобы поразить ваши методы сервлета.

...