Перейти к содержанию

Java


Yujin

Рекомендуемые сообщения

Matrix

 

Нужна инфа про апплеты и сервлеты... и вообще... объясните кто нибудь на пальцах логику этой самой Явы... ну совсем не идет стерва...

Добавлено:

В яндекс не отсылать :-) нарыл уже все что смог, нужно что нибудь посущественней...

Ссылка на комментарий
Поделиться на другие сайты

Matrix

нужно сделать апплет, (Borland JBuilder 5, 7), который бы в полях редактирования при загрузке либо по нажатию кнопки, в ТекстЕдитах, показывал параметры окружения, т.е. IP адрес обратившегося к апплету пользователя, ЮзерАгент, и т.д...

 

Мне нужно создать небольшую, довольно простенькую на первый взгляд систему так сказать слежения, или сбора статистики обращения пользователей к некому сайту. На котором в каждой HTML страничке, встроен Applet, который в свою очередь смотрит все параметры пользователя, такие как адрес, реферы, хедеры, и прочие юзерагенты... У меня это легко реализовалось путем создания Servlet. Но здесь как раз нужен Applet. Вот на этом и заступорился. Не получается тоже самое сделать в Апплете... Может сделать две части, т.е. сервлет слушает, апплет передает параметры о новом подключении сервлету и в свою очередь отвечает апплету о подключенном пользователе... но как это реализовать... вот проблема, опыта в построении Интерент приложений так сказать на низком уровне :-) у меня небыло... да и Логика языка Java, немного отличается от C++ ИМХО... да и в принципе построением приложений... так что... буду рад любым предложениям и советами...

ЗЫ И если можно, то подскажите ссылочки или примеры, где реализованно подобное...

 

Regards Yujin.

 

В страницах на сайте встроен апплет, который получает в себя все сведения о пользователе, обратившемуся к страницам на этом сайте, после чего, сбрасывает все эти сведения в БД.. MySQL или InterBase. Администратор в свою очередь (тоже видимо Апплетом делать... хотя можно как раз здесь и Сервлет прикрутить) просматривает все текущие подключения/обращения к страницам/серверу :-))) т.е. в результате всех этих плясок, должно получится нечто похожее на сбор и анализ статистики обращений к тем или иным страничкам на сервере... вот такая крякозябла... Честно сказать с Явой и в частности с JBuilderом я столкнулся вот как раз месяц назад... средствами C++ Builder и Delphi здесь необойдешься... вот и извращаюсь...

Может чего дельного посоветуете???

А то даже я на сигареты Ява Легкая перешел :-))))

 

Бросаю свои сырцы... это все, что я наковырял... может посоветуете или подскажите что дальше....

 

package viewstat;

 

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

import java.net.InetAddress;

import java.net.URL;

import javax.swing.*;

 

/**

* Нужно отобразить:

* 1. IP Address + показывает

* 2. Remote Host -

* 3. Remote User -

* 4. User Agent -

* 5. Remote Port -

* 6. HTTP Referer -

* 7. HTTP Headers -

* 8. //----------

*/

 

public class StatApp extends Applet

{

String IPAddress;

boolean isStandalone = false;

JTextField tfIPAddress = new JTextField();

JTextField tfRemoteHost = new JTextField();

JButton btnShow = new JButton();

/**Get a parameter value*/

public String getParameter(String key, String def)

{

return isStandalone ? System.getProperty(key, def) :

(getParameter(key) != null ? getParameter(key) : def);

}

 

/**Construct the applet*/

public StatApp()

{

}

/**Initialize the applet*/

public void init()

{

try

{

IPAddress = InetAddress.getLocalHost().getHostAddress();

jbInit();

}

catch(Exception e)

{

IPAddress = "IP не может быть прочитан!";

e.printStackTrace();

}

}

/**Component initialization*/

private void jbInit() throws Exception

{

tfIPAddress.setBounds(new Rectangle(8, 6, 153, 21));

this.setLayout(null);

tfRemoteHost.setBounds(new Rectangle(8, 32, 154, 21));

btnShow.setText("Показать");

btnShow.setBounds(new Rectangle(74, 60, 88, 27));

btnShow.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

btnShow_actionPerformed(e);

}

});

this.add(tfIPAddress, null);

this.add(tfRemoteHost, null);

this.add(btnShow, null);

}

/**Get Applet information*/

public String getAppletInfo()

{

return "Applet Information";

}

/**Get parameter info*/

public String[][] getParameterInfo()

{

return null;

}

 

void btnShow_actionPerformed(ActionEvent e)

{

tfIPAddress.setText(IPAddress);

}

}

 

ЗЫ Заготовки, и прочие шаблоны - Borland JBuilder 5 Ent.

 

В догонку:

----------

Прбывал делать компонентами IPWorks... но кроме имени машины ничего выдрать существенного не удалось... может просто не правильно выдергиваю :(

ipworks.http

ipworks.ipinfo

ipworks.ipport

вот в общемто вот эти 3 компонента использовал...

 

Remote Host и Remote User - с точки зрения сервера

RemoteHost - имя машины, с которой открывается страничка с апплетом.

RemoteUser - имя пользователя, от которого произошла сессия

UserAgent - понятно, это какой браузер у пользователя

RemotePort - порт на котором крутится сервер (80 или 8080), значит это тот порт к которому подключается клиент

а что касаемо HTTP Headers я могу использовать в апплете класс

javax.servlet.http.*; ???

я пробывал это делать, но что то не выходит :(

Может по другому как....

А интересуют заголовки, передаваемые от сервера к клиенту.

 

 

ЛЮБАЯ форма Oracle Forms 9i работающая на сервере приложений управляется аплетом (довольно сложным). Проблемы и сомнения. Есть желание написать нечто подобное полностью на Java с перераспределением обязанностей сервера и клиента. Ошибится в начале пути совсем не хочется, поэтому и переспрашиваю. Если есть возможность подсказать ссылку на пример кода с использованием applet->HTTP->Servlet было бы здорово

 

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

Ссылка на комментарий
Поделиться на другие сайты

Yujin

буду рад любым предложениям и советами..

=)))

мне вот взволновал один вопрос, а где все вышеописанное применяется? для кого? в какой организации??? просто интересно, где это в астрахани так мутят

* Нужно отобразить:

* 1. IP Address + показывает

* 2. Remote Host -

* 3. Remote User -

* 4. User Agent -

* 5. Remote Port -

* 6. HTTP Referer -

* 7. HTTP Headers -

что-то мне подсказывает =)), что все это можно сделать другими средствами без джавы, аплетов и сервлетов, и спокойно писать все эти данные в БД

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

Ссылка на комментарий
Поделиться на другие сайты

jnc

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

* 1. IP Address + показывает

* 2. Remote Host -

* 3. Remote User -

* 4. User Agent -

* 5. Remote Port -

* 6. HTTP Referer -

* 7. HTTP Headers -

и больше ничего

хотя судя по постингу - это совсем не лаба

Ссылка на комментарий
Поделиться на другие сайты

Крайне резонно замечание Smile - а зачем тут Java? Только что если задача на самом деле крупнее, а ты пока только первую её часть пытаешься делать...

 

Сам я на яве хоть и прогал, но подобным не приходилось заниматься...

 

Если надо, то идеология явы оч проста. Написанный код полукомпилируется (т.е. компилируется в комманды некоего абстрактного процессора), на машине на которой запускается апплет должна быть JVM (Java Virtual Machine) - она преобразовывает команды явы в команды конкретного проца (ну и системы в целом). Это первая фишечка. А вторая в том, что ява "полностью защищённый язык" (по словам создателей оной). Т.е. программист не может получить доступ к физическому адресу в памяти или доступ к диску (если пишется аплет, по крайней мере). Я конечно описал самые основы, но если тебя что-то более конкретное в идеологии явы интересовало, то пиши...

Ссылка на комментарий
Поделиться на другие сайты

Smile

 

мне вот взволновал один вопрос, а где все вышеописанное применяется? для кого? в какой организации??? просто интересно, где это в астрахани так мутят

 

Мутят мутят... еще не так я бы сказал мутят :-))))

 

что-то мне подсказывает =)), что все это можно сделать другими средствами без джавы, аплетов и сервлетов, и спокойно писать все эти данные в БД

 

В том то и дело.. я же писал что стандартными средствами т.е. C++ Builder & Delphi здесь не прокатит... и ИнтерБаз не поможет :-))) именно и нужно на Яве... этож не я придумал себе сам такую задачу...выж понимаете... еслиб не возникало вопроса я бы и флейм не разводил... верно?

 

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

 

Ты абсолютно прав!!! И я с тобой согласен... но тот кто поставил эту задачу... вот вынь да вылож... смори выше...

 

jnc

 

да это, наверно, просто лаба какая-нить по информатике.. :-))

 

Ага... еще скажи задание школьное... на самостоятельной работе :-)))

 

Smile

 

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

 

это у меня выдерается как раз сервлетом... но опять таки нужно через апплет... мля.. ведь именно ремоты юзеры и прочие параметры это чисто серверные части, я вот кручу и думаю, как такое апплетом замутить... некоторые подсказали, кто в яве шарит, что такие заморочки в принципе апплетом не выдернешь... я с этим тоже полностью согласен, но...млин... начальство говорит что можно :-)))))))))

 

Marik

Только что если задача на самом деле крупнее, а ты пока только первую её часть пытаешься делать...

 

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

 

Если надо, то идеология явы оч проста.

 

Это то все понятно в теории, что там куда компилируется и что для этого нужно... но есть конкретная задача, есть ее пути решения хоть и очень размывчатые... вот ее и надо решать... а все остальное написано очень хорошо практически везде....

Чего меня больше всего убивает в этом деле, то что если есть какая дока и инфа в нете, то она вся одинаковая на всех сайтах, если и есть, то на английском... на котором я бы сказал свободно не читаю :-)

Книги в нашей астрахани мля я посмотрел.... ужас... американских этих говноедов литература самая отстойная, воды налито полно, а толком ничего не рассмотренно...

вот сижу и голову ломаю :(

Ссылка на комментарий
Поделиться на другие сайты

mr.Faster

 

Сервер Апачка под ФриБздю...

и вебалайзер, немного не то :-)))

За лекбез - спасибо :)

Ссылка на комментарий
Поделиться на другие сайты

Yujin

Может чего дельного посоветуете???А то даже я на сигареты Ява Легкая перешел :-))))
Дельный совет - перейди на другие сигареты! :D:D:D Лана, шучу...Вопрос возник - ты в апплет не можешь получить информацию? В чём ошибка? (просто мне лень ставить себе JBilder - глядишь, без оного разберёмся) :rolleyes:
Ссылка на комментарий
Поделиться на другие сайты

RifleMan

 

дурацкий наверное вопрос...ты книжки читать не пробовал?

 

дурацкий наверное ответ...ты выше читать не пробовал???

на счет книжек я высказался... :-)

 

Marik

 

Дельный совет - перейди на другие сигареты!

 

:-)) хороший совет :-))) ща на NEXT'е сижу :-))) кста...такой тоже язык есть...страый только :-))))))))))

 

Вопрос возник - ты в апплет не можешь получить информацию? В чём ошибка?

 

в том то и дело...что не могу... в сервлет могу, а в апплет нет... используемый пакет java.net.servlet и его исполнения HttpServletRequest & HttpServletResponse которые подходят для сервлета, для апплета есесно не подходят... а ошибка...ошибка в том, что в апплете просто не могу я использовать пакеты, которые используются для сервлета.... если их подключать, и вызывать в апплете, то все компилится нормально...но не работает... вот в принципе.... наверно не очень понятно я изьясняюсь :) сам уже путаюсь...с этой явой мля....

 

глядишь, без оного разберёмся

 

хорошоб...я искренне в это надеюсь :-)

Ссылка на комментарий
Поделиться на другие сайты

эт конечно на издёвку похоже, но что-нить в хелпе-то должно быть по этим HttpServletRequest. Для меня расскажи, что они именно делают? (что реализуют, какие есть методы)

Соответственно исходя из этого и нужно искать аналоги в апплетах. (а может и не в апплетах, а в других пакетах). Ну... эт я так... пока не поставил компулятор, ничего конкретнее скорее всего и не смогу сказать...

Ссылка на комментарий
Поделиться на другие сайты

Marik

 

Взаимодействие с клиентом

Когда сервлет принимает сигнал от клиента, он получает два объекта:

 

Объект ServletRequest, который устанавливает связь от клиента к серверу.

Объект ServletResponse, который устанавливает связь от сервлета обратно к клиенту.

ServletRequest и ServletResponse интерфейсы пакета javax.servlet.

 

Интерфейс ServletRequest предоставляет сервлету доступ к: Такой информации как имена параметров предоставляемых клиентом, протокол (схема) используемый клиентом, и имена удаленного хоста, который выполнил запрос и сервера, который его получил

Входной поток, ServletInputStream. Сервлеты используют входной поток для получения данных от клиентов, которые используют протоколы уровня приложений, такие как методы HTTP POST и PUT.

Интерфейсы, наследующие интерфейс ServletRequest позволяют сервлетам получать более специфичные данные протокола. Например, интерфейс HttpServletRequest содержит методы для получения специальной информации HTTP заголовков.

 

Интерфейс ServletResponse предоставляет сервлету методы, для отправки сообщений клиенту. Он: Позволяет сервлету установить длину содержимого и тип MIME ответа.

Устанавливает выходной поток, ServletOutputStream, и Writer через который сервлет может отправить данные ответа.

Интерфейсы, наследующие интерфейс ServletResponse предоставляют сервлетам более специфичные возможности. Например, интерфейс HttpServletResponse содержит методы позволяющие сервлету манипулировать специальной информации HTTP заголовков.

 

В апплете можно использовать похожий класс java.net.HttpURLConnection и еще пара классов входящих в пакет java.net.* :(

Реквесты и Респонсы не прикручиваются... незнаю...может я через анус делаю... но не работает...

Ссылка на комментарий
Поделиться на другие сайты

На всякий случай, привожу свой сорс сервлета, вполне работающего:

 

package aversservlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import javax.swing.event.*;

/**
* Tittle:       нескажу
* Description:  нескажу
* Copyright:    Copyright (c) 1998-2003 ExecApp.
* Company:      ExeCute Applications
* @author       Yujin Tatarintsev
* @version      1.0
*/

public class AversServlet extends HttpServlet
{
 private static final String CONTENT_TYPE = "text/html; charset=windows-1251";
 /**Initialize global variables*/
 public void init() throws ServletException
 {
 }
 /**Process the HTTP Get request*/
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {
   response.setContentType(CONTENT_TYPE);
   PrintWriter out = response.getWriter();
   out.println("<html>");
   out.println("<head><title>AversServlet</title></head>");
   out.println("<body>");
   out.println("<p>Сервлет возвращает метод GET. Ответ:</p>");
   out.println("</body></html>");

   out.println();
out.println("Параметры инициализации сервлета:");
Enumeration e = getInitParameterNames();
while (e.hasMoreElements())
       {
    String key = (String)e.nextElement();
    String value = getInitParameter(key);
    out.println("   " + key + " = " + value);
}
out.println();

out.println("Контекстные параметры инициализации:");
ServletContext context = getServletContext();
Enumeration enum = context.getInitParameterNames();
while (enum.hasMoreElements())
       {
    String key = (String)enum.nextElement();
           Object value = context.getInitParameter(key);
           out.println("   " + key + " = " + value);
}
out.println();

out.println("Аттрибуты контекста:");
enum = context.getAttributeNames();
while (enum.hasMoreElements())
       {
    String key = (String)enum.nextElement();
           Object value = context.getAttribute(key);
           out.println("   " + key + " = " + value);
}
out.println();

       out.println("Атрибуты запроса:");
       e = request.getAttributeNames();
       while (e.hasMoreElements())
       {
           String key = (String)e.nextElement();
           Object value = request.getAttribute(key);
           out.println("   " + key + " = " + value);
       }
       out.println();
       out.println("Имя сервлета: " + getServletName());
       out.println("Протокол: " + request.getProtocol());
       out.println("Схема: " + request.getScheme());
       out.println("Имя Сервера: " + request.getServerName());
       out.println("Порт Сервера: " + request.getServerPort());
       out.println("Информация о Сервере: " + context.getServerInfo());
       out.println("Удаленный Адрес: " + request.getRemoteAddr());
       out.println("Удаленный Хост: " + request.getRemoteHost());
       out.println("Кодировка Символов: " + request.getCharacterEncoding());
       out.println("Длина Контента: " + request.getContentLength());
       out.println("Тип Контента: "+ request.getContentType());
       out.println("Место Нахождения: "+ request.getLocale());
       out.println("Буфер Ответа по Умолчанию: "+ response.getBufferSize());
       out.println();
       out.println("Имена Параметров в Этом Запросе:");
       e = request.getParameterNames();
       while (e.hasMoreElements())
       {
           String key = (String)e.nextElement();
           String[] values = request.getParameterValues(key);
           out.print("   " + key + " = ");
           for(int i = 0; i < values.length; i++)
           {
               out.print(values[i] + " ");
           }
           out.println();
       }
       out.println();
       out.println("Заголовки в этом Запросе:");
       e = request.getHeaderNames();
       while (e.hasMoreElements())
       {
           String key = (String)e.nextElement();
           String value = request.getHeader(key);
           out.println("   " + key + ": " + value);
       }
       out.println();
       out.println("Кукисы в этом Запросе:");
       Cookie[] cookies = request.getCookies();
       for (int i = 0; i < cookies.length; i++)
       {
           Cookie cookie = cookies[i];
           out.println("   " + cookie.getName() + " = " + cookie.getValue());
       }
       out.println();

       out.println("Защищенный Запрос: " + request.isSecure());
       out.println("Тип Аутентификации: " + request.getAuthType());
       out.println("Метод HTTP: " + request.getMethod());
       out.println("Удаленный Пользователь: " + request.getRemoteUser());
       out.println("Запрашиваемый URI: " + request.getRequestURI());
       out.println("Путь к Контексту: " + request.getContextPath());
       out.println("Путь к Сервлету: " + request.getServletPath());
       out.println("Информация о Пути: " + request.getPathInfo());
out.println("Транспортный Путь: " + request.getPathTranslated());
       out.println("Строка Запроса: " + request.getQueryString());

       out.println();
       HttpSession session = request.getSession();
       out.println("ID Запрашиваемой Сессии: " +
                   request.getRequestedSessionId());
       out.println("ID Текущей Сессии: " + session.getId());
out.println("Время Запущенной Сессии: " + session.getCreationTime());
       out.println("Время Последнего Обращения к Сессии: " +
                   session.getLastAccessedTime());
       out.println("Максимальный Интервал Не активной Сессии в Секундах: " +
                   session.getMaxInactiveInterval());
       out.println();
       out.println("Значения Сессии: ");
       Enumeration names = session.getAttributeNames();
       while (names.hasMoreElements())
       {
           String name = (String) names.nextElement();
           out.println("   " + name + " = " + session.getAttribute(name));
       }
     }
 /**Clean up resources*/
 public void destroy()
 {
 }
}

 

Компилятор - Borland JBuilder 5.0 Ent.

Добавлено:

мля...а че, тек CODE русские буквы непонимать?????

Ссылка на комментарий
Поделиться на другие сайты

Народ, кто нить в нашей астрахни встречал книгу Философия Java 3-е издание Брюса Эккеля???

Ссылка на комментарий
Поделиться на другие сайты

AversServlet

ааа=)))

ты че в Аверсе работаешь??? =))))

если да, тогда привет Палинке, хотя наверное ты ее врядли знаешь, скорее ее папу =))))))

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...