powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / помогите разобраться с MVC
25 сообщений из 50, страница 1 из 2
помогите разобраться с MVC
    #38546086
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые форумчане!
помогите разобраться с 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
помогите разобраться с MVC
    #38546100
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38546238
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174 http://www.datadisk.co.uk/html_docs/jsp/jsp_mvc_tutorial.htm
спасибо полезная статья, но можете сделать из моего примера MVC если Вам не трудно?
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38546290
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
сделай наоборот, сначала демки по ссылкам и в сети
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38546293
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
я пытаюсь разобраться на них но все равно рано или поздно придется самому кодит вот по этому такие вопросы...
на сколько я понял что
должен создать некий сервлет который обращается к БД и считать данные... и конечно создаю некий arraylist и записываю полученные данные на него правильно думаю?
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38546295
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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

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

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

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

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

Какие именно моменты прокомментировать?
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38547690
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите разобраться с MVC
    #38547699
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,

если можно весь UsersModel.java
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38547728
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар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
помогите разобраться с MVC
    #38547765
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите разобраться с MVC
    #38547767
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите разобраться с MVC
    #38547774
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,

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

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

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

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

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

на счет форума я согласен с Вами но не все люди и будут отвечать как Вы к сожалению... :(
...
Рейтинг: 0 / 0
помогите разобраться с MVC
    #38547989
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите разобраться с MVC
    #38548007
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар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
25 сообщений из 50, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / помогите разобраться с MVC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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