Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
nerezus
Дата 7.12.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



У меня на сон уходит меньше 5 часов в день, напряженка, поэтому, думаю, обучение будет медленно.
Но с конфигами через FileReader разобрался.
логирование не нашел еще(искал мало), но, думаю, на крайний случай свой напишу )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Stampede
Дата 7.12.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(nerezus @  6.12.2006,  14:10 Найти цитируемый пост)
У меня на сон уходит меньше 5 часов в день, напряженка, поэтому, думаю, обучение будет медленно.


Ты Java по методу Илоны Давыдовой собрался учить? smile

По заданию: то, что с FileReader'ом разобрался, это хорошо. Только если ты внимательно читал условие, читать на самом деле пока ничего не надо. Я предлагал пока зделать заглушку будущего объекта Configuration с жестко прописанными параметрами. Потому что в дальнейшем этот объект будет инициализироваться из файла XML. А для парсения XML в Java не нужно предварительно зачитывать весь файл в память.

PM WWW   Вверх
nerezus
Дата 8.12.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

Ты Java по методу Илоны Давыдовой собрался учить?
 А что за метод?  smile 
Просто у меня напряженка в реале =)


Код

package ru.hunger;

import java.util.logging.*;
import java.io.IOException;


public class Hunger{
    private static Hunger _instance = new Hunger();
    private Configuration config;
    private Logger logger;
    private FileHandler fh;

    protected Hunger() {
        config = new Configuration();
        logger = Logger.getLogger("ru.hunger.hunger");
        try {
            fh = new FileHandler("hunger.txt");
        } catch (IOException e) {
            System.out.println("Cannot open logfile");
            e.printStackTrace();
        }
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
    }

    public static Hunger getInstance() {
        return _instance;
    }

    public String getConfigItem(String str) {
        return config.getItem(str);
    }
    
    public void log(String str) {
        logger.info(str);
    }
}



Код

package ru.hunger;

public class TestHunger {
    public static void main(String[] args) {
        Hunger hunger = Hunger.getInstance();
        System.out.println(hunger.getConfigItem("preved"));
        hunger.log("hello");
    }
}


Код

package ru.hunger;

public class Configuration {

    public String getItem(String itemName) {
        return itemName;   // заглушка
    }
}




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Stampede
Дата 8.12.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(nerezus @  8.12.2006,  10:26 Найти цитируемый пост)
 А что за метод?

Да был такой лохотрон в начале 90-х - аудиокассеты для обучения английскому во сне smile

То, что с временем туго - это, конечно, не очень здорово. Понимаешь, я пытаюсь напривлять твою разработку в стиле agile programming (шустрое программмирование) - слышал, наверное, про такую методологию. Ну и вот, а если на каждое задание будет уходить по нескольку дней, то эффект будет маленько смазанным. То есть на самом деле разницы большой нет, но вот психологически будет по-другому восприниматься.

Но понятно, что жизнь есть жизнь и получается так, как получается. Ладно, давай к заданию.

В принципе все очень неплохо, но есть ряд недочетов, которые лучше устранить. Перечисляю в призвольном порядке:

1. Имя переменной _instance противоречит конвенции и из-за этого несколько "режет глаз". Подробнее о соглашении об именах - вот здесь: http://java.sun.com/docs/codeconv/html/Cod...s.doc8.html#367

2. Логгер у тебя конфигурится программно. В том числе оказывается, что имя логфайла зашито в коде. Между тем один из основных мотивов создания логового фреймворка состоял в том, чтобы вынести конфигурацию логирования во внешний редактируемый файл.

Как это делается в штатном логгере - я, честно говоря, совершенно без понятия, так что на-ко вот скачай книжку и разберись. Заодно почитаешь там про log4j, и может быть его и выберешь. Вообще, логирование в Java - это вещь достаточно запутанная и капризная. Почему - станет ясно, когда начнешь подключать сторонние библиотеки и пытаться настраивать их вывод. В общем, сделай внешнюю конфигурацию. Книжку выкладываю вот сюда: Logging In Java with the JDK 1.4 Logging API and Apache log4j.

3. Тестовых классов у нас еще будет много, поэтому лучше для них создать отдельный пакет, например ru.hunger.test, и перенести туда TestHunger.

4. Классическая реализация синглтона требует приватного дефолтного конструктора, а иначе появляется возможность унаследовать от твоего класса, и вот уже у тебя в программе больше одного объекта данного типа.

5. Когда ты начнешь плотнее работать с приложением, у тебя окажется не одно рабочее окружение, а несколько. Соответственно, нужно будет как-то указывать, откуда брать конфиг. Поэтому для класса Hunger нужно как-то предусмотреть возможность задания рабочей директории. Поскольку от конфига зависит вся дальнейшая раскрутка, имеет смысл завести метод с такой сигнатурой:
Код

public void init(String workDir)

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

6. Рассмотрим метод getConfigItem(). Это хорошо, что параметров конфига у нас пока мало. А когда будет много, мы что же, будем дублировать все методы из класса Configuration? Нет, нам этого не надо. Лучше просто отдавать объект Configuration - и пусть кому надо смотрят в нем что хотят.

7. Метод log() нам тоже не нужен. Этак мы сами себя подстрекаем использовать один общий логгер на всю прогу. А идея-то с логгерами в том, чтобы можно было, в частности, управлять уровнями логирования на уровне иерархий классов. Так что логгеры у нас в каждом классе будут свои.

8. Ввиду предыдщих двух пунктов, не очень правильно заставлять класс-раскрутчик (TestHunger) выпытывать подробности конфигурации. Раскрутчик должен сделать всего две вещи: получить ссылку на синглтон Hunger и проинициализировать его значением пути к рабочей директории. Путь имеет смысл брать из аргументов запуска программы. Если путь не указан, то берется текущая директория. А выводом параметров конфига должен заниматься сам класс Configuration, по указке Hunger.

9. Да, классу Configuration тоже не помешает знать путь к рабочей директории. Удобно будет задавать его через параметр конструктора.

В общем, предлагаю переделать с учетом замечаний.

PM WWW   Вверх
nerezus
Дата 8.12.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Угу, спасибо =)
Только я наверно это только завтра смогу сделать =\
По крайней мере в воскресенье надеюсь уделить часов 12 джаве =)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
nerezus
Дата 10.12.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Вот в общем написал, но чую, что плохо.
Пока почитаю про коллекции )
Еще примерно какие области надо знать в первую очередь? Коллекции, потоки, сеть(http, сокеты), файлы....

Код

package ru.hunger.test;

import ru.hunger.Hunger;

public class TestHunger {
    public static void main(String[] args) {
        Hunger hunger = Hunger.getInstance();
        hunger.init("", "hunger.xml");
        System.out.println(hunger.config.getItem("preved"));
    }
}



Код

package ru.hunger;

public class Configuration {
    public String workingDirectory;

    public String getItem(String itemName) {
        return itemName;   // заглушка
    }

    public void setWorkingDirectory(String workingDirectory) {
        this.workingDirectory = workingDirectory;
    }
}



Код

package ru.hunger;

import java.util.logging.*;
import java.io.IOException;


public class Hunger{
    private static Hunger instance = new Hunger();
    public Configuration config;
    private Logger logger;
    private FileHandler fh;
    private String filename;
    private String workingDirectory;

    private Hunger() {
        config = new Configuration();
    }

    public static Hunger getInstance() {
        return instance;
    }

    public void init(String workingDirectory, String filename) {
        config.setWorkingDirectory(workingDirectory);
        this.workingDirectory = workingDirectory;
        this.filename = filename;
        logger = Logger.getLogger("ru.hunger.hunger");
        try {
            fh = new FileHandler(filename);
        } catch (IOException e) {
            System.out.println("Cannot open logfile");
            e.printStackTrace();
        }
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
    }
}




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Stampede
Дата 15.12.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



nerezus, так не пойдет. Или мы делаем проект, или не делаем. Из девяти замечаний, которые я привел, ты отреагировал только на пункты 1, 3, 4, 5, 7, да и то не в лучшем виде.

Зачем сделал публичной переменную config? Там просто геттер нужен. Где метод в Configuration, который возвращает текстовое описание конфига? Можно для этой цели переопределить toString(). Почему по-прежнему явно инициализируешь логгер? Зачем из TestHunger пытаешься вывести значение конфиг параметра? А если будет десять параметров? А если двадцать тестовых классов (хинт: со временем и тех, и других может оказаться намного больше).

И потом, что это за второй параметр в init()? Передаешь в него вроде файл конфига, а используешь для вывода логов. Неряшливость, невнимательность.

В общем, если хочешь продолжать, то давай работать, если нет - нет.

С логгером если не можешь разобраться, то сделай хотя бы так: подключи либу log4j и положи в корень классов файл log4j.properties с таким содержанием:

Код

log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


Переменная логгера определяется в одну строчку:

Код

Logger logger = Logger.getLogger(YourClass.class);


Жду новостей.
PM WWW   Вверх
Omut
Дата 28.12.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2005

Репутация: нет
Всего: нет



Tак, тема уже не зафиксирована smile . Люди! Спасите сериал! Может batigoal всё же "поработает" учеником smile . Stampede, Вы не против?
PM MAIL   Вверх
tux
Дата 28.12.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Omut, а сам? Нет желания поучаствовать? Если согласен, верну тему на место. Хотя... Смотря, что скажет Stampede.
PM MAIL Skype GTalk Jabber YIM   Вверх
nerezus
Дата 29.12.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Я тоже за то, что batigoal поработает, т.к. у еня сложилось предвзятое мнение к джаве в вебе...
Я конечно извиняюсь за потраченное время, но.... короче еще раз извиняюсь =(


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
batigoal
Дата 29.12.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(nerezus @  29.12.2006,  08:22 Найти цитируемый пост)
Я тоже за то, что batigoal поработает

У меня назрело решение об альтернативном проекте, так что я теперь "вне игры" smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Omut
Дата 29.12.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2005

Репутация: нет
Всего: нет



Цитата(batigoal @  29.12.2006,  11:45 Найти цитируемый пост)
Цитата(nerezus @  29.12.2006,  08:22 )
Я тоже за то, что batigoal поработает


У меня назрело решение об альтернативном проекте, так что я теперь "вне игры"  


Блин!!!!!
PM MAIL   Вверх
Hidrag
Дата 30.12.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 2
Всего: 25



А могу я себя выставить в роли ученика?
..правда есть уже небольшой опыт (ссылка в подписи - все на JSP/Servlet сделано) но многое еще не осовоил, например куки, JavaBeen... да многое наверное...

Добавлено @ 01:02 
nerezus, почему сложилось такое мнение?


--------------------
user posted image
PM WWW ICQ   Вверх
Stampede
Дата 31.12.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(nerezus @  28.12.2006,  21:22 Найти цитируемый пост)
т.к. у еня сложилось предвзятое мнение к джаве в вебе...


nerezus, а ведь мы с тобой к вебу еще даже не притронулись. Похоже, тебя отпугнула именно Java как таковая. Что я могу на это сказать... Да, в изучении Java существует некоторый начальный порог, но если его пройти, дальше все становится не так грустно. Так что может быть когда-нибудь еще вернешься.

Цитата(Hidrag @  29.12.2006,  15:01 Найти цитируемый пост)
А могу я себя выставить в роли ученика?
..правда есть уже небольшой опыт (ссылка в подписи - все на JSP/Servlet сделано) но многое еще не осовоил, например куки, JavaBeen... да многое наверное...


Ну что ж, давай попробуем. Исходные данные сопоставимы. То, что есть опыт с JSP - вообще отлично: значит шишки уже набиты smile

Поэтому первым делом: расскажи, чего хочешь от сайта. В частности, зачем предусмотрена регистрация? Что будет доступно юзерам и недоступно прочим?
PM WWW   Вверх
Hidrag
Дата 31.12.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 2
Всего: 25



Хочется развить сайт в такой некий опен-сорс ресурс, типа в вкладке проектов будут описания начатых проектов, если посетитель не зареген то он может скачать только бинарникили вообще ничего, если зареген то и исходник, и например обновить файлы проекта (например что то дописал)  - пока только это в голову пришло... 

Да и хостинг там сильно ограничен всего 10 мб и отсутствует возможность средствами сервлета создавать и редактировать файлы, а так бы админку сделал бы для наполнения содержимым, правда есть доступ к БД, можно сделать админку типа, написал текст для главной странице он залился в базу, потом при вызове этой страницы данные из базы считались и вывелись... Еще на хостинге нельзя почтовиком пользоваться, придется функцию "Восстановления пароля" сделать такой чтобы данные о таком запросе вбивались в базу а админ потом уже сам проверял и отсылал в ручную...

Еще была идея сделать гостевую... но не как обычно в виде мини форума, а в виде аплета. Аплет как паинт, т.е посетитель рисует на нем мышкой, жмет - сохранить и этот рисунок отображается на странице, естественно регулировать количество этих "художеств"...

Так что этот сайт скорее полигон, на данном этапе, чем конечная цель. Если из него что то вырастет то будет гут, нет, так тоже не обижусь так как опыт при его создании очень важен.

Одна из задач такая - для пользователя со статусом админа показывать юзеров. Одно из решений это считать данные из базы в колекшн а потом значения из колекшена выводить в JSP в цикле... может есть более красивое решение? Типа считать данные  в некий датасет, кинуть на страницу таблицу где источником данных взять этот датасэт (влияние долгого программирования на Delphi)?

воть... smile

Всех с наступающим! smile Думаю минимум числа до 3-4 буду "занят" smile а потом можно будет заняться всем этим...


--------------------
user posted image
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0913 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.