из HTML в сервлет - PullRequest
       25

из HTML в сервлет

2 голосов
/ 05 января 2010

Я изучаю html и sevlets, я написал небольшую заявку, но не получаю никакой информации, когда нажимаю кнопку «Отправить» со страницы from.html: ниже мой код

<html>
<body>
<h1 align="center>Color Selection Page</h1>
<form method="POST" action="/SelectColor.do" >
Select Color Charecterstics<p>
Color:
<select name="color" size="1">
<option>light
<option>amber
<option>brown
<option>dark
</select>

<br><br>

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

</form>
</body>
</html>

файл web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

   <servlet>
    <servlet-name>ColorServlet</servlet-name>
    <servlet-class>com.example.web.ColorServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>ColorServlet</servlet-name>
    <url-pattern>/SelectColor.do</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
    <welcome-file>form.html</welcome-file>
    </welcome-file-list>

</web-app>

сервлет

package com.example.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class ColorServlet extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{
        res.setContentType("text/html");
        try {
            PrintWriter out = res.getWriter();
            out.println("Beer Selection ADvice<br>");
            String c=req.getParameter("color");
            out.println("<br>Got beer color "+c);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ответы [ 2 ]

6 голосов
/ 05 января 2010

Я проверил ваш код, и проблема возникает из этой строки:

<h1 align="center>Color Selection Page</h1>

Атрибут align не закрыт, вам нужно добавить двойную кавычку, чтобы закрыть его.

<h1 align="center">Color Selection Page</h1>

Это не сделает ваш HTML верным - Eclipse по-прежнему жалуется на «Неверное расположение тега (в центре)» - но, по крайней мере, вы сможете отправить форму.

На самом деле, я бы порекомендовал написать действительный HTML или XHTML, даже если ваш код работает нормально (обратите внимание, что вам, возможно, придется использовать action="SelectColor.do" вместо action="/SelectColor.do" в зависимости от пути к контексту вашего веб-приложения, но это другое история). Написание «плохого» HTML приведет вас к странным проблемам рендеринга и неожиданным ошибкам. Вы должны научиться писать HTML правильно и правильно.

4 голосов
/ 05 января 2010

Относительный URL-адрес действия формы, вероятно, неверен. Удалите начальную косую черту /, чтобы она стала:

<form method="POST" action="SelectColor.do">

В противном случае он станет относительным к корню домена. Начинающие часто создают веб-проекты с контекстным именем, например, http://localhost:8080/contextname/page.jsp. Сервлет будет доступен по http://localhost:8080/contextname/servleturlpattern. Таким образом, в перспективе JSP действие формы должно быть action="servleturlpattern". Но если вы добавите ведущий /, то он фактически будет указывать на http://localhost:8080/servleturlpattern, которого вообще не существует.

Тем не менее, я настоятельно рекомендую вам сначала пройтись по приличной книге или учебнику по HTML. Ваш HTML забит синтаксическими ошибками, и вы также используете элемент <center>, который устарел с 1998 года. На w3schools.com есть базовое руководство по HTML. На w3.org есть валидатор HTML. Далее есть много статей о написании семантического HTML .

Что касается JSP / Servlets, я знаю, что вы изучаете, но на самом деле вы не должны использовать Servlets для вывода HTML. JSP предназначен для этого. Вам нужно перенаправить запрос на страницу результатов JSP и получить доступ к данным с помощью EL.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Do some business logic here? Then forward to some result JSP page.
    request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);
}

JSP должен выглядеть следующим образом:

<!doctype html>
<html lang="en">
    <head><title>Result</title></head>
    <body>
        Beer Selection ADvice<br>
        <br>Got beer color ${param.color}
    </body>
</html>

${param.color} - это язык выражений , и эта конкретная строка на самом деле вроде out.print(request.getParameter("color")) за кадром.

Если вы вообще не выполняете никакой логики постобработки в сервлете (сохранение в БД, выполнение некоторой бизнес-логики / проверки и т. Д.), То на самом деле сервлету вообще не нужен;)

Чтобы узнать больше о JSP / Сервлетах, я могу порекомендовать вам Учебники Марти Холла по Coreservlets .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...