2012-10-02 4 views
1

Я только начал работать над сервлетами, и я новичок. Я разработал html-страницу с раскрывающимся меню, из которого пользователь может выбрать цвет пива, и есть кнопка отправки, которая вызывает сервлет. Вот для него html-код.Сервлет не загружается в браузере

<html> 
<head> 
<title>Beer Selection</title> 
</head> 
<body> 
<h2>Beer Selection Page</h2> 
<p>Select beer charecteristics:</p> 
<hr> 
<form method="POST" action="SelectBeer.do"> 
    <b>Color :</b><!--Keeping it outside the form unnecessarily creates a line break between color and Drop-down menu--> 
    <select name="color"> 
     <option>Light</option> 
     <option>Brown</option> 
     <option>Amber</option> 
     <option>Dark</option> 
    </select><br> 
    <input type="SUBMIT" value="SUBMIT"> 
</form> 
</body> 
</html> 

Я создал следующий дескриптор

<?xml version="1.0" encoding="UTF-8"?> 
<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/web-app_2_5.xsd" 
version="2.5"> 
<servlet> 
<servlet-name>MyBeer</servlet-name> 
<servlet-class>com.example.web.BeerSelect</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>MyBeer</servlet-name> 
<url-pattern>/SelectBeer.do</url-pattern> 
</servlet-mapping> 
</web-app> 

развертывания Я также успешно скомпилирован BeerSelect.java сервлет, код которого приведен ниже

package com.example.web; 

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

public class BeerSelect extends HttpServlet 
{ 
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out=response.getWriter(); 
    out.println("Beer Selection Advice<br>"); 
    String c=request.getParameter("color"); 
    out.println("<br>Got Beer color"+c); 
} 
} 

Я использую 7.0.21 кота и я создал каталоги следующим образом: tomcat/webapps/learning/Beer-v1/form.html и
tomcat/weba pc/learning/Beer-v1/WEB-INF/web.xml и
tomcat/webapps/learning/Beer-v1/WEB-INF/classes/com/example/web/BeerSelect.class
(обучение - это просто папка, в которой я держу все мой маленький сервлет и JSP проектов в WebApps Внутри обучения я имею мой другой проект, таких как Беэр-v1, DateDisplay, HotelMgmt и др.)

Теперь, когда я запустить form.html внутри кота он отображается правильно, но когда я нажимаю на сообщение, он показывает

HTTP Status 404 - /learning/Beer-v1/SelectBeer.do 

type Status report 

message /learning/Beer-v1/SelectBeer.do 

description The requested resource (/learning/Beer-v1/SelectBeer.do) is not available. 
Apache Tomcat/7.0.21 

Что я делаю неправильно. Пожалуйста, помогите.

+0

Я не могу показаться, чтобы увидеть какие-либо ошибки. Вы пытались перезапустить свой сервер? При редактировании файлов конфигурации и создании новых классов вам необходимо перезагрузить сервер. –

+0

Я перезапустил почти 6-7 раз, но все равно получаю то же сообщение об ошибке –

ответ

1

Он должен работать, если у вас есть Beer-v1 в качестве прямой подпапки папки Tomcat's webapp.
Затем попытайтесь получить доступ к [tomcaturl]/Beer-v1/[yourhtmlform] .html.

Поскольку вы сопоставили свой сервлет с корнем контекста (который равен /), для /learning/Beer-v1/SelectBeer.do нет сопоставления.

ИМХО это не очень хорошая идея, чтобы иметь структуру папок рабочего пространства внутри Папка webapp Tomcat. Это специальная папка для развернутых webapps, и Tomcat ожидает своего рода стандартную структуру для этой папки (например, WEB-INF внутри корневого каталога).

Я думаю, что лучше использовать Eclipse или что-то, что автоматически развертывает ваше приложение (из вашей файловой системы) в Tomcat. Таким образом, вы можете управлять своим рабочим пространством, как хотите.

Eclipse поддерживает так называемое «рабочее пространство», где хранит все проекты, которые вы создаете с ним. При первом запуске Eclipse он спросит вас, какую папку использовать в качестве рабочего пространства. Тогда вы можете назвать свою папку «обучения», как вы ее используете.

Когда вы добавляете среду выполнения сервера в Eclipse (например, установку Tomcat), вы можете настроить развертывание Eclipse. Конфигурация по умолчанию - это копирование webapp в подпапку рабочего пространства Eclipse.

+0

Как работает eclipse? Мы создаем рабочее пространство, в котором хранятся наши файлы. Развертывает приложения в webapp постоянно (таким образом, создавая 2 копии по одному в рабочей области и один в tomcat/webapps) или временно ли они развертывают их (таким образом, сохраняя одну копию)? ИЛИ Может ли Eclipse поддерживать иерархии папок, как я пытался это сделать? ТОЛЬКО НУЖДАЕТСЯ МАЛЫЙ ОБЗОР. –

+0

См. Мои обновления. – Zeemee

1

попробуйте добавить слеш в вас образуют действие

action="SelectBeer.do" 

к

action="/SelectBeer.do" 
+0

Hey Russell Gutierrez, метод, который вы предложили, не сработал, но на удивление теперь я не получаю сообщение об ошибке, но вместо этого получаю пустую страницу. Mulmoth предложил способ, который работает, но я хочу сохранить папку «Learning», если это возможно, и все еще заставлять приложение работать. Какие изменения я могу внести в дескриптор развертывания web.xml –

+0

@Naveen, см. Обновления моего ответа , – Zeemee

Смежные вопросы