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


Автор: Samotnik 23.10.2007, 15:42
Значит есть проект, в нем :
Сервлет
Код

public class SayHello extends HttpServlet {
    String message = "";
     private static final Logger log = Logger.getLogger(SayHello.class);
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        message = request.getParameter("Name");
        System.out.println("message = " + message);
        request.setAttribute("fromServlet", "Hello, " + message);
        log.info("   !!!!!!!!!!!!!!!!!   We  are the  chempions ,  my  friend!!!!!!!!1" + message);
        request.setAttribute("MessageType", request.getMethod());
        request.getRequestDispatcher("/indexPast.jsp").forward(request, response);
    }
}

jsp страница 
Код

<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
 <%
    String message = (String) request.getAttribute("fromServlet");
    String message2 = (String) request.getAttribute("MessageType");
  %>
<html>
  <head>
    <title>Simple jsp page</title>
  </head>
  <body>
   <h1><%=message%>
        <br>Type is , " </br>
       <%=message2%>
   </h1>
  </body>
</html>

ВСЕ  РАБОТАЕТ.
Нужно сделать архитектуру  MVC   т.е. нужно чтобы в проекте присутствовали три слоя (Model, View, Controller), представленные соответственно: сервис классом (реализующим бизнес логику создания фразы приветствия), JSP (реализующим способ отображения), servlet (контролирование процесса обработки запроса).
Помогите плз..   smile

Добавлено через 7 минут и 54 секунды
Я пологаю, что нужно новый класс создать в котором будет формироваться это самое приветствие, но как? ведь он будет обычным классом, а не сервлетом, и получаетчся что request  у него не будет  smile 

Автор: Vasay 23.10.2007, 16:07
Цитата

Я пологаю, что нужно новый класс создать в котором будет формироваться это самое приветствие, но как? ведь он будет обычным классом, а не сервлетом, и получаетчся что request  у него не будет 


А передать в него реквест, как параметр?

Автор: Samotnik 23.10.2007, 16:09
Vasay,  т.е.  создать метод в новом классе и  через параметр его вызвать?  
Я что тоне особо представляю, как  его передать через параметр ?!?

Автор: mbasil 23.10.2007, 16:14
Вот Вам пример класса модели

Код

/**
 * This domain object represents a User in application.
 */
package model;

public class User {
    
    String name = "";
    
    Player( String name ) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String value) {
        name = value;
    }
}

Ваш класс SayHello по сути является контроллером, то есть он осуществляет 
прием параметров и диспетчирование.
Пусть он создает объект модели и помещает его в Request  в виде атрибута, а
затем выполняет диспетчирование на Вашу JSP, которая собственно и есть View.
JSP страница получить атрибут с объектом модели и выведет информацию.

Добавлено через 4 минуты и 25 секунд
Извините за двойной вывод и ошибку в имени конструктора (Конечно User, а не Player).
Однако суть от этого не меняется.

Да, пожалуйста не переопределяйте метод  service(),  лучше переопределить doGet() и doPost()

Автор: Samotnik 23.10.2007, 16:21
Так мне ведь нужно 3-х слойную модель, т.е.
1 -сервис классом (реализующим бизнес логику создания фразы приветствия),  Model
2 -JSP (реализующим способ отображения),                                                           View    
3-  servlet (контролирование процесса обработки запроса).                Kontroler

Я так себе это представляю, или нет?

Добавлено через 11 минут и 17 секунд
не получается  smile 

Автор: mbasil 23.10.2007, 16:33
Так.
Но модель не обязательно должна включать службу. 
В таком простом случае, как у Вас моделью может служить сущность инкапсулирующая принятые от
пользователя параметры.
Если Вы все-же хотите службу, то создавайте объект модели в службе, которая вызывается из сервлета контроллера.
Это не меняет основной картины: у Вас уже есть прототип контроллера и представления.
Их только надо подкорректировать и создать объект сущность.

Добавлено через 5 минут и 27 секунд
MVC - это всего лишь концепция.
Она может быть реализована, как очень просто, так и сложно.
Если хочется посложнее, используйте Struts. При этом модель все равно может представлять один единственный класс сущности.
 

Автор: Samotnik 23.10.2007, 16:39
mbasil,  да мне че по-проще   smile    Я изучаю сервлеты всего неделю.   
Вот не получается пока сделать это и все!!  Не могу  понять как передать  в качестве параметра request 

Автор: Vasay 23.10.2007, 16:52
Вобще, тебе не обязательно передавать реквест, можно и имя ("Name")

У тебя сейчас все очень просто. 

Но если нужно передать реквест, то создаешь класс, внем метод

Код

public String CreateMessage(HttpServletRequest request)
{
// обработка

return message;
}


а в сервлете просто вызываешь этот метод, передавая ему реквест.

Автор: Samotnik 23.10.2007, 16:55
Все разобрался, оказалось вообще  детский  сад, и без никакого  реквеста
Код

import org.apache.log4j.Logger;
import java.util.GregorianCalendar;
import java.util.Calendar;
public class ModelClass {
    private static Logger log = Logger.getLogger("log4j.properties");
    ModelClass() {
    }
    public String SendToServlet(String clientMessage) {
        String MessageOfDay ="";
        log.info("O'k  Let's  go");
        Calendar cal = new GregorianCalendar();
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        if (hour<=9)
                 MessageOfDay = "Good Morning, ";
        else if(hour<=12 && hour>=9)
                MessageOfDay = "Good Day, ";
        else if(hour<=17 && hour>=12)
                MessageOfDay = "Gootten  tag, ";
        else if(hour<=24 && hour>=17)
                MessageOfDay = "Good  evening, ";
        else if(hour<=9 && hour>=24)
                MessageOfDay = "Good  night, ";
        return  MessageOfDay + clientMessage;
    }
}

Автор: mbasil 23.10.2007, 17:08
В сервлете 

        User u = new User( message );  
        request.setAttribute("user", u );

в JSP странице:

<jsp:useBean id=”myBean” scope=”request” class=”model.User” />

или (это хуже) 

<%
  CustomerBean myBean = (CustomerBean) request.getAttribute(“myBean”);
  if ( myBean == null ) {
               . . .
     }
%>

Так как ссылку request определять не надо - на JSP странице она 
существует "автоматом".

Добавлено через 3 минуты и 2 секунды
Опять поспешил, переменная должна называться  user, а не myBean:

Код

<jsp:useBean id=”user” scope=”request” class=”model.User” />


или (это хуже) 

Код

<%
  CustomerBean user = (CustomerBean) request.getAttribute(“myBean”);
  if ( myBean == null ) {
               . . .
     }
%>

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