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


Автор: ElectricalStorm 22.6.2004, 19:06

Проясните пожалуйста возникший в голове бардак...

1) Я так понимаю есть у меня JSP это типа Верстка + Java мешанина... которая как-то работает самостоятельно точнее Web Server сам понимает JSP теги и их интерпритирует (кстати а что это за Web Server такой)
2) Есть servlet'ы это Java програмы расположенные на сервере к которым я могу обращатся через Web Server
как к cgi скриптам, но там верстки нет тада(!) раз там верстки нет у них (сервлетов) должны быть либо типа SSI что-то либо какой то шаболнизатор тоесть теги более высокого уровня не HTML которые встраиваются в сервлет и потом происходит транформация в HTML и на клиента отдается вот ...
если такие шаблонизаторыы есть хотелось бы узнать как они называются ...
3) И наконец каким боком здесь EJB ?

Спасибо !




Автор: Domestic Cat 22.6.2004, 19:23
1. На самом деле контеuнер компилирует JSP в Servlet и получает обычныu класс smile.gif Например y Tomcat ети классы можно нажти в папке Work/Catalina.
2. Не понял? Сервлет - ето класс, которыж получает реквест и отсылает респонс ТАКИМ КАКИМ ego yвидит броусер клиента. При чем тут шаблонизатор? Сервлет посылает респонс которыж содержит скажем <img src=""> ну а броусер интерпретирует етот теxт. Сервлет абсол-тно не занимается версткоu, шаблонами и пр - ето программа которую пишете Вы.
3. При том что EJB - tozhe часть J2EE, кстати более еффективная технология по части производительноисти и пр. Можно обеспечить коммуникацию JSP/Servlets и EJB; но для обычных wеб-саuтов JSP/Servlets с головоu хватит.
smile.gif

Автор: ElectricalStorm 22.6.2004, 19:50
Большое спасибо но все-таки не все ясно...

Значит сервлет получает реквест и отсылает респонс ТАКИМ КАКИМ ego yвидит броусер клиента
т.е

// Я сервлет
импорты
.
.
.
реквест = гет реквест;
если (реквест.экшн эквивалентно логин) {
респонсе = "Введите логин <input type=text name=login><br>"+
"Введите пароль<input type=password name=password>";
}
// и терь куда-нибудь типа
принт респонсе;

вот так ?


если так то это таже самая мешанина... кода и верстки тока маленько сдругой стороны....



Автор: Domestic Cat 22.6.2004, 20:30
Сервлет конечно можно использовать для формирования реквеста, например
Код

...
out.print("</UL><HR><FORM METHOD=POST>");
out.print("Enter your email address: <INPUT TYPE=TEXT NAME=email><BR>");
out.print("<INPUT TYPE=SUBMIT NAME=action VALUE=subscribe>");
out.print("<INPUT TYPE=SUBMIT NAME=action VALUE=unsubscribe>");
out.print("</FORM></BODY></HTML>");
...

Получается дежствительно мешанина. Поетому я бы советовал прочесть Falkner, Jones. Servlets and JSP the J2EE Web Tier (http://www.jspbook.com/index.jsp ) но поскольку возможно такоu книжки вы не наuдете, то вкраtце суть в следуюшем:

1. JSP используется ТОЛьКО для преzентации и получения/прикрепления обьектов от/к session, page, application, request. Если нужно например сделать что-то еше (то что называетса business logic) na .jsp stranice, используuте tag-фаuлы, классические тег classy, simple-теги. В результате страница не будет також мешаниноu.
2. Сервлеты используюстя ТОЛьКО как фильтры и для business logic. Например, при переходе на страницу "форум" сервлет читает из DB и присоединяет список тем к session , передает реквест .jsp, а .jsp просто получает список и показывает его (желательно через JSTL/tags). В результате не нужно никаких out.println-ov.

Например вам надо написать страницу регистрации. Вы даете ссылку не на нее, а на сервлет которыu генерирует, skazhem, анти-бот image, сохраняет его и перенаправляет реквест на обычную форму, которая посылает POST реквест на другоu сервлет. Етот сервлет загоняет все в DB, проверяет что нужно, посылает email, итп и перенаправляет реквест на страницу "успешная регистрация".


Автор: DarkDS 22.6.2004, 20:39
Не совсем. JSP - это Java Server Pages. Теговый язык, который компилится на сервере и выдается конечному пользователю в виде ХТМЛ страницы.
Есть 2-а способа использования JSP.
1. Инлайн подстановка кода. То есть весь код написан в перемешку с ХТМЛ кодом.
К примеру так:
Код
<table>
<%

Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()) {
 String name = (String) e.nextElement();
 %><tr><td><%= name %><td><%= request.getHeader(name) %>
 <%
}

%>
</table>

2. Вариант это теговое использование. То есть вся обработка происходит в написанных программистом Тегах. Класс тега юзера наследуется от класса Тег, описывается параметры тега в спец классе-сателите и вот этот тег, скомпилиный сервером, уже вставляется в код. То есть вставляется что то типа
Код
<table>
<%TableGeneratorTag%>
</table>

и при генерации страницы управление будет передаватся из сервера тегу и отображать полученный из тега результат.
Дальнейшее поведение не зависит от способа написания.
данная страничка генерится в класс JavaPage, унаследованный от сервлета, дается классу реквест, ожидается респонс, и управление передается данному классу. Класс сам пишет в поток респонса то, что ему нужно и все.

Автор: ElectricalStorm 22.6.2004, 20:41
Спасибо большое !

Автор: Domestic Cat 22.6.2004, 21:11
Ну я имел в виду советы Falkner'a, Jones'a а не в целом JSP. Использовать JSP можно как угодно, но для избежания мешанины и nuzhno разделение труда между JSP и Servlets - в J2EE eto nazyvaetsja
MVC pattern.

Автор: Катена 13.3.2007, 07:07
Помогите пожалуйста! Не компилируется сервлет(красным помечено ошибки)

[code=java]
package bonus.controllers;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BonusCalculationServlet extends HttpServlet {

    public void init(ServletConfig config) {
        System.out.println("BonusCalculationServlet: init()");
    }
    
    public double calculateBonus(int multiplier, double bonus) {
        double calculatedBonus = (multiplier * bonus);
        return calculatedBonus;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        String inputMultiplier = request.getParameter("multiplier");
        String ssn = request.getParameter("ssn");

        Integer multiplierAsInteger = new Integer(inputMultiplier);
        int multiplier = multiplierAsInteger.intValue();

        double inputBonus = 100.00;
        double bonus = this.calculateBonus(multiplier, inputBonus);

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<HTML><HEAD><TITLE>");
        out.println("Servlet Example - Bonus Calculator");
        out.println("</TITLE></HEAD><BODY>");

        out.println("<H1>Bonus Calculation:</H1>");
        out.println("<P>Social Security Number: " + ssn + "<P>");
        out.println("<P>Multiplier: " + multiplier + "<P>");
        out.println("<P>Bonus Amount: " + bonus + "<P>");

        out.println("</BODY></HTML>");

        out.close();
    }

    public void destroy() {
        System.out.println("BonusCalculationServlet: destroy()");
    }
}

Я не все указала. Ошибки выдаются на HttpServlet

Автор: tux 13.3.2007, 08:21
Нужна библиотека с J2EE-классами. В Томкате это ${TOMCAT_HOME}/common/lib/servlet-api.jar.

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