Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > servlet


Автор: desarrollo 14.11.2006, 18:29
Помогите разобраться.

Проблема с сервлетами.

Работаю на JBuilder 2006. Не смог создать с помощью InterliJ IDEA 5.1

Код

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

public class HelloServlet extends GenericServlet{
    public void service(ServletRequest request,
                        ServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
        pw.println("<B>Hello!");
        pw.close();
    }
}


В IDEA не смог понять, как сделать web.xml. Понятно, что надо просто создать файл в редакторе и поместить его в WEB-INF. А что туда писать? Или какие есть средства в IDEA, чтобы создавался автоматически данный файлик? В  Builder'е проблем нет, он сам всё создаёт. 
И когда даже не зная как там всё это создаётся, скопировал просто web.xml которую сгенерировал билдер и поместил в IDEA, 
прокомпилировал, но он ничего не выдаёт. В чём проблема?
--------------------------------------------------------------------------------
Когда я дошёл до тега SERVLET он почему то не определяется, пишет что нет такого тега.
Код


<HTML>
<HEAD><TITLE>Times!</TITLE></HEAD>
<BODY>
The current time here is:
<SERVLET CODE=CurrentTime>
</SERVLET>
<P>
The current time in London is:
<SERVLET CODE=CurrentTime>
<PARAM NAME=zone VALUE=GMT>
</SERVLET>
<P>
And the current time in New York is:
<SERVLET CODE=CurrentTime>
<PARAM NAME=zone VALUE=EST>
</SERVLET>
<P>
</BODY>
</HTML>


 В книге написано что надо использовать Java Web Server, чтобы работал этот тег. Но я не нашёл где можно посмотреть какой сервер используется в Builder'e. Прочитал доки, всё что с этим связано, но ничего толкового для решения этой проблемы не нашёл. Помогите в этих вопросах. 

Автор: powerOn 14.11.2006, 19:32
Модератор: Название темы должно отражать ее суть!
И используйте кнопку КОД, для оформления исходников.

Автор: _and 14.11.2006, 19:53
desarrollo, советую всё-таки взять какую-нить другую книжку и почитать про Java вообще и сервлеты

Автор: desarrollo 14.11.2006, 20:30
Цитата(powerOn @ 14.11.2006,  19:32)
Модератор: Название темы должно отражать ее суть!
И используйте кнопку КОД, для оформления исходников.

Почему тема не отражает сути вопроса? Всё критится возле темы сервлетов вот так и назвал тему

Автор: LSD 14.11.2006, 20:42
Цитата(desarrollo @  14.11.2006,  20:30 Найти цитируемый пост)
Почему тема не отражает сути вопроса? Всё критится возле темы сервлетов вот так и назвал тему

А также все написано на Java, так что тему можно назвать Java (как и 99% тем в этом разделе). Заголовок должен кратко описывать суть проблемы.

Автор: batigoal 14.11.2006, 23:10
Сказать по правде, я впервые слышу о теге SERVLET. Откуда это?

Автор: Sherst 15.11.2006, 03:41
Краткое теоретическое введение:


Сервлет является классом Java, который может быть загружен и выполнен специальным web-сервером, называемым контейнер сервлетов. В настоящее время существует большое множество таких контейнеров (Tomcat, Java Web Server и др). 
Итак, для начала необходимо скачать контейнер сервлетов ( я рекомендую Tomcat http://tomcat.apache.org/download-55.cgi) 

Когда будет идти первый запрос на сервлет, то сразу произойдет его загрузка контейнером сервлета. Далее сервлету передается запрос клента, сервлет его обрабатывает и возвращает результат контейнеру сервлетов, который уже в свою очередь отсылает ответ пользователю. После этого сервлет остается в памяти ожидая другие запросы, и будет выгружен лишь при нехватке памяти. Этим сервлеты превзошли на то время технологию CGI в которой каждый запрос порождал новый процесс.

Итак, после установки контейнера сервлетов, приступим непосредственно к созданию самого сервлета.
Можно выделить 5 шагов:

1.Написание кода сервлета:
Код

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.*;
import java.util.*;

public class FirstServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        Calendar cal = Calendar.getInstance();

        out.println("<HTML>");
        out.println("<HEAD><TITLE>Times!</TITLE></HEAD>");
        out.println("<BODY>");
        out.println("The current time here is:"+cal.getTime().toString());
        out.println("</BODY>");
        out.println("</HTML>");
    }
}



2. Компиляция кода.
3. Создание дескриптора развертывания (web-xml):
Код

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/servlet/FirstServlet</url-pattern>
    </servlet-mapping>
</web-app>

4. Запуск контейнера сервлетов.
5. Вызов сервлета из браузера.

У меня IDEA 4.5 

File - > New Project -> select module type (Web Module) -> Configure (Tomcat) ;
Справа появляется меню с тремя вкладками: (Packages, J2EE, Project). Выбираем J2EE -> WebModules -> Наш проект (на нем нажимаем правой кнопкой) -> New -> Servlet.

И повторяем все пункты описанные мною выше.

PS: не понятно чем JBuilder не устроил, я сам только им пользуюсь. ИМХО там все удобно и легко создается, кроме того есть встроенный Tomcat.

Автор: Kangaroo 15.11.2006, 04:20
Цитата(batigoal @ 14.11.2006,  23:10)
Сказать по правде, я впервые слышу о теге SERVLET. Откуда это?

Самому стало интересно smile Вот нашел http://java.sun.com/products/servlet/whitepaper.html.. кратко и понятно smile

Цитата

...
In web servers which provide complete servlet support, servlets may also be invoked by servers to help preprocess web pages, using Server Side Include functionality. The desire for this kind of preprocessing is indicated to web servers by special HTML syntax such as this, which is used in shtml files: 

    < SERVLET NAME=ServletName>
         < PARAM NAME=param1 VALUE=val1>
        < PARAM NAME=param2 VALUE=val2>
     If you see this text, it means that the web server
        providing this page does not support the SERVLET tag.
     Ask your Internet Service Provider to upgrade!
    < /SERVLET>
 
This style usage of the SERVLET tag indicates that a pre-configured servlet should be loaded and initialized (if that has not already been done), then invoked with a particular set of parameters. The output of that servlet is included directly in the HTML-formatted response. (Another invocation style allows passing initialization arguments to the servlet, and specifying its CLASS and CODEBASE directly.) 

The SERVLET tag could be used to insert formatted data such as the output of a web or database search, user-targeted advertising, individualized views of an on-line magazine, and more. Using these two facilities, HTML-aware servlets can generate arbitrary dynamic web pages. Typical servlets will accept input parameters from many sources, such as: 
- The input stream of a request, perhaps from an applet;  
- In the URI of the request;  
- From some other servlet or network service;  
- By using parameters passed from an HTML form.  

Those parameters will be used to generate HTML-formatted responses. The servlet will often consult one or more databases, or other data with which the servlet has been configured, when deciding the exact data to return with the response. 
...

Автор: desarrollo 17.11.2006, 10:34
Цитата(Sherst @ 15.11.2006,  03:41)
File - > New Project -> select module type (Web Module) -> Configure (Tomcat) ;
Справа появляется меню с тремя вкладками: (Packages, J2EE, Project). Выбираем J2EE -> WebModules -> Наш проект (на нем нажимаем правой кнопкой) -> New -> Servlet.


Проблема в том, что не выпадает Tomcat. Его надо добавить с помощью кнопочки add и выбрать Tomcat Server. Выпадает модальное окно для ввода Tomcat home и Tomcat base directory. Что я только туда не пихал, и Tomcat.jar  из JAVA-HOME/jre/plug-ins/tomcat/lib, прописывал уже путь к отдельно установленному Tomcat   C:\Program Files\Apache Software Foundation\Tomcat 5.5\server\lib. Пишет Could not find directory '{0}' Что такое? Тормозит всю работу с сервлетами. Не устривает меня JBuilder, потому что надо всё уметь настраивать ручками, просто использую для начала, так немного легче.

Автор: Sherst 17.11.2006, 11:14
А такой путь: C:\Program Files\Apache Software Foundation\Tomcat 5.5

Добавлено @ 11:16 
Проверь чтоб такой путь существовал smile

Автор: desarrollo 18.11.2006, 08:25
Подсоединил томкат, получилось smile

Сделал всё как Вы написали. Пошагово. Сначала забил код, откомпилил его с помощью Ctrl-Shift-F9, поместил в папочку WEB-INF/web.xml тот код. Запкстил опосля Tomcat C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin\tomcat5.exe. 

Теперь как эту прогу запустить в броузере? Я прописал http://localhost:8080/servlet/FirstServlet/ 
попробовал http://localhost:8080/FirstServlet/ - не работает


Кстати дальше я не понял, где это

"Справа появляется меню с тремя вкладками: (Packages, J2EE, Project). Выбираем J2EE -> WebModules -> Наш проект (на нем нажимаем правой кнопкой) -> New -> Servlet.",

где я ни искал, не смог найти эту менюшку с вкладками (Packages, J2EE, Project)

Автор: batigoal 18.11.2006, 10:42
А тыт точно сделал
Цитата(Sherst @  15.11.2006,  04:41 Найти цитируемый пост)
File - > New Project -> select module type (Web Module) ->
?

Автор: desarrollo 18.11.2006, 14:03
Цитата(batigoal @ 18.11.2006,  10:42)
А тыт точно сделал
Цитата(Sherst @  15.11.2006,  04:41 Найти цитируемый пост)
File - > New Project -> select module type (Web Module) ->
?

Да я сделал именно так

Автор: Sherst 19.11.2006, 02:18
Ок, тогда детализирую:


После установки Tomcat можно просмотреть струтуру файлов и папок которые находятся в нашем случае здесь C:\Program Files\Apache Software Foundation\Tomcat 5.5\  (т.н. домашний каталог CATALINA_HOME)
Среди множества папок нас интересует папка с названием webapps. Так вот, сюда можно кидать свои web-приложения.

Сделаем все пошагово:
1) Внутри webapps создадим папку с произвольным названием, н-р MyServlet
2) Внутри MyServlet создадим папку WEB-INF;
3) Внутри WEB-INF создадим папку classes
4) Копируем в папку classes откомпилированный сервлет FirstServlet.class
5) Копируем в папку WEB-INF файл web.xml
6) Запускаем Tomcat и проверяем его на работоспособность в адресной строке браузера вводим: http://localhost:8080/
должна появиться стартовая страница Tomcata.
7) Если все прошло нормально то вводим строку http://localhost:8080/MyServlet/servlet/FirstServlet

Автор: Sherst 19.11.2006, 02:43
Еще один более короткий путь:
делаем шаг 1, затем заходим в каталог нашего проекта на IntelijIDEA и копируем содержимое папки exploded в папку MyServlet.

Автор: desarrollo 20.11.2006, 00:15
Пасиба, у меня всё получилось

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)