Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / помогите разобраться с MVC / 25 сообщений из 50, страница 1 из 2
01.02.2014, 21:41
    #38546086
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Здравствуйте уважаемые форумчане!
помогите разобраться с MVC. я только начал изучать JAVA тем более web и никак не могу разобраться с MVC
написал простой пример только все в одном т.е. на JSP который обращается в БД и оттуда вытаскивает id и name пользователя и потом все записывает в HTML select
выложу сам код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
<!DOCTYPE html>
<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ page import = "java.sql.Connection"%>
<%@ page import = "java.sql.DriverManager"%>
<%@ page import = "java.sql.PreparedStatement"%>
<%@ page import = "java.sql.ResultSet"%>
<%@ page import = "java.util.ArrayList"%>
<%@ page import = "java.util.List"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
    <body>
        <%        
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        String sql = "select id, sn from users";
        try {
            conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1522:orcl", "test", "test");
            out.println(conn.getMetaData().getDatabaseProductVersion());
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
        %>
         
        <form action="baza" method="get">
            <p>
                <select size="1" name="slct">
                    <%while (rs.next()) {%>
                    <option value = <%=rs.getString("id")%>>
                        <%= rs.getString("sn")%>
                        <%}%>
                    </option>
                </select>
            </p>
            <p>
                <input type="submit" name="submit"/>
            </p>
        </form>
         
        <%
        } catch (Exception e) {
            // TODO: Add catch code
            e.printStackTrace();
        } finally {
            try {
                conn.close();
                rs.close();
                ps.close();
            } catch (Exception e) {
                // TODO: Add catch code
                e.printStackTrace();
            }
        }%>
    </body>
</html>



как вот это все сделать на MVC я никак не понимаю.... :(
...
Рейтинг: 0 / 0
01.02.2014, 22:45
    #38546100
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
...
Рейтинг: 0 / 0
02.02.2014, 06:40
    #38546238
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
rema174 http://www.datadisk.co.uk/html_docs/jsp/jsp_mvc_tutorial.htm
спасибо полезная статья, но можете сделать из моего примера MVC если Вам не трудно?
...
Рейтинг: 0 / 0
02.02.2014, 12:12
    #38546290
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Музаффар,
сделай наоборот, сначала демки по ссылкам и в сети
...
Рейтинг: 0 / 0
02.02.2014, 12:20
    #38546293
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Petro123,
я пытаюсь разобраться на них но все равно рано или поздно придется самому кодит вот по этому такие вопросы...
на сколько я понял что
должен создать некий сервлет который обращается к БД и считать данные... и конечно создаю некий arraylist и записываю полученные данные на него правильно думаю?
...
Рейтинг: 0 / 0
02.02.2014, 12:27
    #38546295
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Petro123,

ну дальше с jsp считаю этот лист... так?
...
Рейтинг: 0 / 0
02.02.2014, 13:34
    #38546319
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Музаффар,
советую разобраться сначала на основе примера, а потом уже добавлять бд
если пример не понятен, то возможно нужно брать примеры еще проще
...
Рейтинг: 0 / 0
02.02.2014, 13:39
    #38546323
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
rema174,
Вы про какого примера говорите?
...
Рейтинг: 0 / 0
02.02.2014, 15:05
    #38546359
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
я говорю про этова примера 15505325
...
Рейтинг: 0 / 0
02.02.2014, 19:37
    #38546501
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
rema174,

хорошо попробую понять...
но кто нибудь может из выше изложенного кода сделать MVC? это очень нужно... пожалуйста
...
Рейтинг: 0 / 0
02.02.2014, 21:18
    #38546563
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Музаффарrema174,

хорошо попробую понять...
но кто нибудь может из выше изложенного кода сделать MVC? это очень нужно... пожалуйста
Конечно можно сделать и MVC - ловите...
...
Рейтинг: 0 / 0
03.02.2014, 05:18
    #38546731
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex KuznetsovКонечно можно сделать и MVC - ловите...

спасибо друг!!! Вы очень помогли...
можете прокомментировать некоторые моменты?
...
Рейтинг: 0 / 0
03.02.2014, 07:07
    #38546755
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
МузаффарAlex KuznetsovКонечно можно сделать и MVC - ловите...

спасибо друг!!! Вы очень помогли...
можете прокомментировать некоторые моменты?
Не за что, пользуйтесь.

Какие именно моменты прокомментировать?
...
Рейтинг: 0 / 0
03.02.2014, 20:07
    #38547690
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex KuznetsovКакие именно моменты прокомментировать?
вот этот часть кода не совсем понятен...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public List getUsersFromMemory() {
        List users = null;
        UserInfo ui = null;
        users = new ArrayList();
        for(int i = 1;i<=10;i++){
            ui = new UserInfo(""+i,"User "+i);
            users.add(ui);
        }
        return users;
    }

    public UserInfo getUserInfo(String selId) {
        UserInfo ui = new UserInfo();
        ui.setId(selId);
        ui.setSn("User "+selId + " created with POST...");
        return ui;
    }
...
Рейтинг: 0 / 0
03.02.2014, 20:13
    #38547699
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex Kuznetsov,

если можно весь UsersModel.java
...
Рейтинг: 0 / 0
03.02.2014, 20:43
    #38547728
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
МузаффарAlex Kuznetsov,

если можно весь UsersModel.java
Ну, что-же, давайте разберёмся:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
package com.mvcsample.models;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
...

Объявления подключаемых классов из других библиотек.

Код: java
1.
2.
3.
4.
5.
6.
...
public class UsersModel {

    public UsersModel() {
    }
...

Конструктор по умолчанию

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
...
    public List getUsersFromDB() { 
        List users = null;
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        UserInfo ui = null;

        String sql = "select id, sn from users";

        users = new ArrayList(); // Создаём список

        try {
            conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1522:orcl", "test", "test"); // Создаём объект соединения с БД
            ps = conn.prepareStatement(sql); // "Подготавливаем" обращение к базе данных
            rs = ps.executeQuery(); // Собственно говоря, само обращение к БД
            while (rs.next()) { // Пока есть данные в результирующем наборе
                ui = new UserInfo( // Создать новый объект, содержащий информацию из одной строки результирующего набора
                        rs.getString("id"),
                        rs.getString("sn"));
                users.add(ui);// Добавить в список
            }
        } catch (SQLException e) { // В случае ошибки  - произвести её логирование
            Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, e);
        } finally { // Освобождение ресурсов
            // Производим в обратном порядке
            if (rs != null) {// Закрываем результирующий набор
                try {
                    rs.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, ex);
                }
                rs = null;
            }
            if(ps!=null){// Закрываем запрос
                try {
                    ps.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, ex);
                }
                ps = null;
            }
            if(conn !=null){// Закрываем соединение
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, ex);
                }
                conn = null;
            }
        }
        return users; // Возвращаем список
    }

Получение списка, содержащего объекты UserInfo путём выборки информации из базы данных и "отображения" строки результирующего набора данных в виде объекта Java. Т.е. здесь используется ORM ( Object Relational Mapping ). Как видите, здесь я использовал Ваш код, и вместе с тем немного его доработал чтобы в последующем передать информацию из модели в представление. Так как слои в MVC разделены, то мы должны каким-либо образом организовать обмен информацией между ними - вот для этого нам и нужен список объектов. В данном случае UsersModel - это модель для "бизнес обработки" данных, которая может в себя включать и получение информации от сервера БД. На самом деле модель может содержать самые различные методы обработки данных, которые зависят от поставленных перед ней задач.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
    public List getUsersFromMemory() {
        List users = null;
        UserInfo ui = null;
        users = new ArrayList();
        for(int i = 1;i<=10;i++){
            ui = new UserInfo(""+i,"User "+i);
            users.add(ui);
        }
        return users;
    }
...

Ну это просто для примера, потому что у меня под рукой нет ораклового сервера дял отладки Вашей выборки, да и не хотелось с базой возиться. По сути этот метод также создаёт список объектов, который затем может быть использован для передачи его в представление, либо в другую модель... т.е. это тестовый метод позволяющий проверить работу модели с использованием псевдо реальных данных.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
    public UserInfo getUserInfo(String selId) {
        UserInfo ui = new UserInfo();
        ui.setId(selId);
        ui.setSn("User "+selId + " created with POST...");
        return ui;
    }
    
}

Метод, для иллюстрации обращения к модели из POST запроса.

Ещё какие-либо вопросы?
...
Рейтинг: 0 / 0
03.02.2014, 21:13
    #38547765
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex Kuznetsov,
ответили на 5+ :)
но у меня возникла одна проблема :((
использую JDeveloper и Weblogic Server вес ваш код портировал на jdev и он теперь ругается типа воот такой Exception в сервлете

Error 500--Internal Server Error

java.lang.NullPointerException
at jsp_servlet.__usersview._jspService(__usersview.java:93)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:416)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:326)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

это типа нет объекта? или не находит его или куда он обращается там ниче нету... ну ещё одна загадка... %(
...
Рейтинг: 0 / 0
03.02.2014, 21:16
    #38547767
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex Kuznetsov
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
    public List getUsersFromMemory() {
        List users = null;
        UserInfo ui = null;
        users = new ArrayList();
        for(int i = 1;i<=10;i++){
            ui = new UserInfo(""+i,"User "+i);
            users.add(ui);
        }
        return users;
    }
...

Ну это просто для примера, потому что у меня под рукой нет ораклового сервера дял отладки Вашей выборки, да и не хотелось с базой возиться. По сути этот метод также создаёт список объектов, который затем может быть использован для передачи его в представление, либо в другую модель... т.е. это тестовый метод позволяющий проверить работу модели с использованием псевдо реальных данных.

значить его можно и убрать?
...
Рейтинг: 0 / 0
03.02.2014, 21:22
    #38547774
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Музаффар,

А Вы точно абсолютно весь код портировали?
Похоже что нет...
Потому что всё начало идёт от сервлета UsersController - он должен первым вызываться.
Смотрите внимательно файл web.xml

Кстати, можете посмотреть исходники сгенерированного сервлета для jsp
файл __usersview.java, строка 93 - это место срабатывания исключения, скорее всего список не создан.
Я не стал делать обработку ошибок в JSP, т.к. просто иллюстрировал то, что Вы спросили.
...
Рейтинг: 0 / 0
03.02.2014, 21:24
    #38547776
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Музаффарзначить его можно и убрать? Как хотите. Я его оставил для того, чтобы Вы могли понять принцип взаимодействия компонентов в MVC шаблоне на как можно более простом примере. Пройдите отладчиком все вызовы, поймите что к чему и только потом двигайтесь дальше.

PS. С WebLogic Server я не работаю и не работал...
...
Рейтинг: 0 / 0
03.02.2014, 21:26
    #38547780
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex Kuznetsov,

как бы ошибку нашел беда была в web.xml разобрался теперь попробую со всеми разобраться если что и если появиться вопросы могу обращаться к Вам?
...
Рейтинг: 0 / 0
03.02.2014, 21:29
    #38547783
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
МузаффарAlex Kuznetsov,

как бы ошибку нашел беда была в web.xml разобрался теперь попробую со всеми разобраться если что и если появиться вопросы могу обращаться к Вам?Рад, что нашли ошибку.
Конечно можете обращаться - на то он и форум...
...
Рейтинг: 0 / 0
04.02.2014, 04:54
    #38547986
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex KuznetsovКонечно можете обращаться - на то он и форум...

на счет форума я согласен с Вами но не все люди и будут отвечать как Вы к сожалению... :(
...
Рейтинг: 0 / 0
04.02.2014, 05:09
    #38547989
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
Alex Kuznetsov,
а ещё Вы написали вот такую строку это как я понял закрытие потоков...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 
           if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, ex);
                }
                rs = null;



а я как бы всегда писал немножко иначе а точнее
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
            try {
                conn.close();
                rs.close();
                ps.close();
            } catch (Exception e) {
                // TODO: Add catch code
                e.printStackTrace();
            }


в чем плох мой вариант?
P.S. и извините за такие глупые вопросы...
...
Рейтинг: 0 / 0
04.02.2014, 06:53
    #38548007
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите разобраться с MVC
МузаффарAlex Kuznetsov,
а ещё Вы написали вот такую строку это как я понял закрытие потоков...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 
           if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsersModel.class.getName()).log(Level.SEVERE, null, ex);
                }
                rs = null;



а я как бы всегда писал немножко иначе а точнее
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
            try {
                conn.close();
                rs.close();
                ps.close();
            } catch (Exception e) {
                // TODO: Add catch code
                e.printStackTrace();
            }


в чем плох мой вариант?
P.S. и извините за такие глупые вопросы...
Вопросы не глупые, а очень даже правильные.
Давайте разберёмся.

1. Вы не соблюдали порядок освобождения ресурсов. Предполагается, что порядок освобождения ресурсов должен быть обратным по отношению к их получению. Вы же ResultSet получили самым последним, так почему пытаетесь закрыть его вторым?

2. Все три ресурса закрываются в одном блоке try/catch. А что будет, если к примеру происходит исключение при закрытии соединения? Правильно, остальные ресурсы не будут закрыты и освобождены - вот вам и утечка памяти.

3. Отсутствует перехват специфичного для вызываемого метода исключения - плохой стиль программирования...

4. Нет проверки значения объекта на null - опять путь к исключению.

5. Нет присвоения значение null не нужным более объектам - не понятно когда и как сработает сборщик мусора - утечки памяти.

В моём коде будет, в случае необходимости, происходить перехват соответствующих исключений, наряду с обязательным освобождением ресурсов в блоке finaly. Перед каждым вызовом закрытия ресурса проверяется ссылка на объект, т.е. существует он или нет. Далее не нужная более ссылка принимает значение null, т.е. я явно указываю, что память занимаемая ранее объектом больше не нужна и может быть возвращена системе и повторно использована.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / помогите разобраться с MVC / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]