Jump to content

    
Sign in to follow this  
theBMV

HTML embedded

Recommended Posts

Здравствуйте, уважаемые!

Разрабатываю на данный момент устройство, которое должно иметь возможность настройки через HTML-страницу

по типу роутера, ADSL модема, точки доступа.

Познания в HTML на уровне "a href" а уж в скриптах совсем не шарю.

В принципе, имея TEW-434APB смог разобраться что к чему, посмотрев через Chrome,

но стоит ли соваться в это дело или искать знающего человека?

Пока беспокоят вопросы из разряда "каким образом происходит передача данных форм?"

 

Железка LPC1768+DP83848I+uIP

Share this post


Link to post
Share on other sites

Как и везде, железка работает в роли WEB сервера. Из браузера посылается по HTTP запрос к железка, железка согласно GET или POST данных запроса формирует HTTP ответ и отсылает запрашивающему. Обычно это странички в формате HTML. Скрипты на стороне браузера не обязательно.

 

Мне доводилось лет 7 тому назад делать полноценный WEB сервер формирующий HTML странички на C++, сейчас это можно перенести и на МК, но в тех МК с коими работаю слишком мало ресурсов, надо все переписывать.

 

Вот такие библиотеки писал:

#pragma once
#include <atlhtml.h>
#include "Page.h"

class WebPage : public CPage
{
protected:
    DECLARE_SERIAL(WebPage);
public:
    WebPage();
    WebPage( CString title );
    WebPage(const WebPage &page );
    ~WebPage(void);

public:
    void operator=( const WebPage &src );
    void operator<<( CString code );

    virtual void Get( CByteArray *pBody );

    enum Alight{ Left = 1, Center, Right };

    void Alight( unsigned short alight );

    void Text(CString text, short fontsize = 3, bool bold = false, bool newline = false );
    void Reference(CString ref, CString text, bool bold = false, bool newline = false );
    void Reference(CString ref, CString text, CString title , bool newline = false );
    void ReferenceImage(CString ref, CString image );
    void P(void);
    void EndP(void);
    void Tab( short count = 1 );
    void Line(void);
    void InsertHtmlCode(CString code);
    void Form(CString action );
    void EndForm( CString value, CString name );
    void Frameset( short arrangement, short size );
    void Frame( CString name, CString src, bool scrolling = false );
    void EndFrameset(void);
private:
    bool m_frameset;
public:
    void Edit(CString name, CString value = "", short size = 13, short type = 0);
    void ComboBox(CString name, short size = 1 );
    void ComboBoxItem(CString text, int value);
    void EndComboBox(void);
    void NewLine( short count = 1 );
    void CheckBox( CString strName, bool status = 0, bool newline = true );
    void EndFormEx( char* str, ... );
    CString GetHtmlCode(void);
    void Button(CString strRef, CString strText);
    void SetPage(CString strBody);
    void SetBgColor( COLORREF color );

};

 

#include "WebPage.h"
#include "SitePage.cpp"

class WebSite :
    public CUser
{
public:
    WebSite(void);
    WebSite( const WebSite& src );
    ~WebSite(void);

    virtual bool Get( CString strUrl );
    virtual bool Post( CString strBody, CString strAction );

private:

    CList< CSitePage<WebPage> >m_listSitePages;
    CList< HTML::MenuItem > m_listTopMenuItems;

    HTML::Element Sample( HTML::Element element );

protected:
    HTML::Array GetTopMenu( CString strNamePage );
    virtual unsigned int GetTopMenuItemCount();
    void AddTopMenuItem( CString strText, CString strRef );

    HTML::Array GetLeftMenu( CString strNamePage );

    COLORREF m_TopMenuColor;
    COLORREF m_LeftMenuColor;
    COLORREF m_PageColor;
    COLORREF m_BgPageColor;



    int m_SiteMode;
    enum Mode{ User = 0, Operator, Moderator, Administrator };

    void AddContent( HTML::Array array, CString strPath, CString strTitle );
public:
    virtual void Create(CString strPath);
};

Share this post


Link to post
Share on other sites
Как и везде, железка работает в роли WEB сервера. Из браузера посылается по HTTP запрос к железка, железка согласно GET или POST данных запроса формирует HTTP ответ и отсылает запрашивающему. Обычно это странички в формате HTML. Скрипты на стороне браузера не обязательно.

 

Мне доводилось лет 7 тому назад делать полноценный WEB сервер формирующий HTML странички на C++, сейчас это можно перенести и на МК, но в тех МК с коими работаю слишком мало ресурсов, надо все переписывать.

Не, у меня уже есть готовый web сервер на uIP, который как-то работает, есть даже файловая система. Мне нужно понять, смогу ли я сам без обширных знаний в этой области сделать сервак (ну тоесть странички), нужны ли мне знания о скриптах и каким образом передаются данные из формы в МК?

Share this post


Link to post
Share on other sites

Вам надо смотреть документацию к своему серверу, в каком виде вашему серверу необходимо подавать данные и код. Возможно там нечто подобное скриптов PHP. Тут я ничем помочь не могу, занимаюсь значительно более низкоуровневым проектированием/программированием.

 

Странно. Вот информация из Ви-Ки: uIP (micro IP) — это открытый TCP/IP-стек/модуль, разработан для микроконтроллеров с 8- и 16-битной архитектурой. Не вижу где тут WEB сервер?

 

Вам надо усвоить такую архитектуру на стороне WEB сервера:

 

IP -> TCP -> HTTP -> HTML StaticContent или HTML DinamicCоntentGenerator -> HTTP -> TCP -> IP

 

Как понимаю, у вас сейчас тупик на уровне HTTP

Share this post


Link to post
Share on other sites
Вам надо смотреть документацию к своему серверу, в каком виде вашему серверу необходимо подавать данные и код. Возможно там нечто подобное скриптов PHP. Тут я ничем помочь не могу, занимаюсь значительно более низкоуровневым проектированием/программированием.

 

Странно. Вот информация из Ви-Ки: uIP (micro IP) — это открытый TCP/IP-стек/модуль, разработан для микроконтроллеров с 8- и 16-битной архитектурой. Не вижу где тут WEB сервер?

 

Вам надо усвоить такую архитектуру на стороне WEB сервера:

 

IP -> TCP -> HTTP -> HTML StaticContent или HTML DinamicCоntentGenerator -> HTTP -> TCP -> IP

 

Как понимаю, у вас сейчас тупик на уровне HTTP

 

Нет, вместе с uIP поставляется web сервер. Даже есть пример по его реализации - пара страничек и CGI.

То есть у меня есть всё: IP->TCP->HTTP есть там даже CGI. Только наполнения нет.

Share this post


Link to post
Share on other sites
Нет, вместе с uIP поставляется web сервер. Даже есть пример по его реализации - пара страничек и CGI.

То есть у меня есть всё: IP->TCP->HTTP есть там даже CGI. Только наполнения нет.

Наполнение надо хранить либо в памяти как статику, либо динамически генерировать.

У меня был так же и упрощенный вариант динамического контента который очень хорошо подходит для МК. В памяти хранятся статические HTML страницы. При запросе той или иной страницы по HTTP, содержимое пропускается через HTML парсер, если в статическом содержимом парсером обнаруживается специальная метка с идентификатором, согласно идентификатора вместо метки подставляется динамический код (например текст с динамической информацией) и далее по HTTP отправляется по назначению. Для экономии ресурсов процессора, чтоб не парсить все запрашиваемые HTML, именовал странички по разному, там где 100% статическое содержимое, давал расширение файла .htm, там где встречаются метки для парсинга, давал расширение .html .

 

проще хранить HTML как статику, а параметры настройки отдавать в JSON (такой вариант и проще отладить на ПК).

Это когда браузер гарантированно поддерживает JavaScript. Мне довелось начинать осваивать клиент-серверные технологии на примерах WAP приложений. Это такой формат для браузеров сотовых телефонов начала века, где JavaScript не прижилось.

 

#include "atltime.h"
#include "Page.h"

class WapPage : public CPage
{
public:
    WapPage(void);
    WapPage( unsigned long userID );
    WapPage( const WapPage &page );
    ~WapPage(void);
    virtual void Get( CByteArray *pBody );

private:
    unsigned long m_UserID;
public:
    void AddCard( CStringW id, CStringW title );
    void AddTimerCard(CStringW id, CStringW title, int time, CStringW url );

public:
    void operator=( const WapPage &src );
    void AddReference( CStringW path, CStringW text, int aligns = Left, bool small_ = true );
    void AddReferenceEx( CStringW path, CStringW text, int aligns = Left, bool small_ = true );
    void ReferenceCenterLine(CStringW path, CStringW text );

    enum Aligns{ Left, Right, Center };
    void NewLine(void);
    void Text(CStringW text, int aligns = Left, bool small_ = true );
    void TextEx(CStringW text, int aligns = Left, bool small_ = true );
public:
    void Image(CStringW path, CStringW text, int aligns = Left);
    void Select(CStringW name, CStringW title, std::map<CStringW,CStringW>& mapValues, CStringW strDefaultValue, short aligns = Center );
    void InputEx(CStringW name, short maxlength, CStringW value, short aligns = Center);
    void Input(CStringW name, short maxlength, CStringW value, short aligns = Center);
    void Space();
    void InsertCode(CStringW strCode);
    void Tb(void);
    void EndTb(void);
    void Tr(void);
    void EndTr(void);
    void Table(int columns);
    void EndTable(void);
    void Save( short aligns = Center );
};

Share this post


Link to post
Share on other sites
Из браузера посылается по HTTP запрос к железка, железка согласно GET или POST данных запроса формирует HTTP ответ и отсылает запрашивающему.

От сервера идет страничка НТML, в ней форма, а в форме метод - название скрипта который нужно запустить

на стороне сервера, что бы обработать введенные данные, а в этом скрипте Вы вызываете фнкцию, которая

читает введенные данные, эта функция должна быть в составе сервера, очень часто передаваемые данные

оформлены в виде друх массивчиков

Edited by dch

Share this post


Link to post
Share on other sites

Ничего не имею против, но лично мне эта технология никогда не нравилась, очень большая зависимость от ПО на стороне клиента.

 

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

Share this post


Link to post
Share on other sites

какой-то из методов (не помню точно GET или POST) передает введенные в форму данные в виде параметров в адресной строке, например: http://www.mysite.net/?id=1&param=2

здесь после вопросика идут два параметра (по элементам формы) id и param. отдельные параметры разделяются амперсендом. то есть можно на серверной стороне парсить URL и извлекать все отправленные пользователем данные - по-моему, довольно просто, особенно если наименования параметров наперед известны.

Share this post


Link to post
Share on other sites

Во во! Я заглянул в код точки доступа и там JavaScript'ом прописаны getelementbyid. в этом я разобрался, но, мне не хочется влезать в java. думаю как раз таки отделаться как предлагает ARV. Спасибо всем, буду мучать

Share this post


Link to post
Share on other sites

Данные надо передавать общепринято POST запросом, например на странице два окна ввода и кнопка

 

<form action="demo_form.asp">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>

 

Тег <input> поддерживается всеми браузерами и передает данные POST запросом.

Share this post


Link to post
Share on other sites
Это когда браузер гарантированно поддерживает JavaScript
а какие сейчас его не поддерживают ? я таких не знаю. Лет 10 назад может и было так, сейчас все изменилось
Edited by zöner

Share this post


Link to post
Share on other sites
Как Opera Mini обрабатывает JavaScript?

 

Необходимо обратить внимание, где выполняется JavaScipt – на сервере, перед загрузкой или после загрузки страницы. Серверы используют движок рендеринга Opera 9.5, что означает полную поддержку JavaScript (стандарт ECMAScript 4) на стороне сервера.

 

Однако, на клиентской стороне поддержка ограничена возможностями телефона, в следствии этого Opera Mini предоставляет небольшой набор средств java script:

 

Ограниченную поддержку событий модели DOM

Отсутствие фонового выполнения скриптов

Очень ограниченный механизм AJAX

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this