LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Apache Struts (3) - i18n, jsp stránky, kompilace

Vytváříme multijazyčnou aplikaci pomocí resource souborů, probereme jsp stránky a uživatelské značky Struts, aplikaci zkompilujeme a provedeme první deploy

4.3.2005 06:00 | Miroslav Holubec | Články autora | přečteno 15387×

Internacionalizace (i18n)

Internacionalizace Struts spočívá především v souborech lokalizovaných zpráv, jakýkoliv text nebo obrázek má svůj vlastní klíč. V závislosti na nastavení Locales uživatele aplikace (konkrétně nastavení preference jazyků jeho prohlížeče), se načte správný soubor obsahující klíče a jím odpovídající položky. Načítání a zároveň ukládání souborů zpráv do vyrovnávací paměti se provádí při vyžádání první lokalizované hodnoty. Soubory v našem příkladu umístíme do balíku cz.linuxsoft.web.struts.shop.resources, konkrétně zde vytvoříme soubor MessageResources_cs_CZ.properties pro českou verzi, MessageResources_en_US.properties pro americkou angličtinu, apod. Pokud se nenalezne soubor s požadovaným jazykem, použije se standartní soubor zpráv MessageResources.properties. V některém z příštích dílů si ukážeme, jak místo souborů použít data z databáze. Následuje ukázka ze souboru s českou lokalizací, jelikož je celý soubor v čistém ASCII, musí se ostatní znaky převést na opis unikódu utilitou native2ascii.

# -- other errors ---
errors.invalidlogin=Neplatn\u00e9 \u00fadaje
# -- login --
login.title=P\u0159ihla\u0161ovac\u00ed str\u00e1nka
login.username=U\u017eivatel
login.password=Heslo
login.submit=Ode\u0161li
login.invalid=Neplatn\u00e9 p\u0159ihl\u00e1\u0161en\u00ed
#-- welcome --
welcome.title=V\u00edtej
welcome.back=V\u00edtej zp\u011bt
#-- global --
global.user=U\u017eivatel 

Nastavení lokalizace je umístěno ve struts-config.xml v části message-resources. Atribut parameter udává cestu k souborům zpráv a výchozí jméno souboru, atribut null říká, že pokud se nenalezne hodnota s daným klíčem, místo chyby serveru se zobrazí tento klíč.

<message-resources
       parameter="cz.linuxsoft.web.struts.shop.resources.MessageResources"
       null="true"/>

Část View - JSP stránky

Struts v této části modelu MVC především nabízejí uživatelské značky nezávislé na implementaci stránek. Úzce však spolupracují s technologií Java Server Pages, jenž je součástí J2EE. Uživatelské značky lze rozdělit do těchto hlavních oblastí:

  • html: vytváří kód HTML, potřebný k vytvoření vstupních formulářu a dalších HTML značek
  • logic: určují logiku zobrazování stránky, dokáží iterovat a porovnávat hodnoty
  • bean: práce s Java Beans, především jejich vytváření a přístup k jejich členům
  • tiles: rozložení komponent na stránce pomocí šablon
  • nested: řeší spolupráci vnořených značek

index.jsp

První JSP stránkou, kterou vytvoříme, je index.jsp. Pokud chceme začít používat uživatelské značky Struts, je potřeba je do stránky vložit direktivou taglib. Samotný výklad technologie JSP přesahuje rámec článku, zájemce odkazuji na seriál.

<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<%-- přesměrování na standartní akci --%>
<logic:redirect forward="default"/>

Tato stránka pouze přesměruje tok aplikace na standartní akci, která je nadefinována v části global-forwards a action-mappings. Atribut forward specifikuje jméno přesměrování, path říká kam přesměrovat, a redirect určuje, zda budeme přesměrovávat vnitřně v rámci serveru, nebo klientovi (což vede i ke změně URL). Standartní hodnotou je false, tedy vnitřní předání toku na serveru. Akce pak jen předá řízení toku stránce login.jsp v adresáři pages.

<global-forwards>
    <forward name="default"
             path="/do/default"
             redirect="false"/>
</global-forwards>

<action-mappings>
    <action path="/default"
            forward="/pages/login.jsp"
            unknown="true"/>
    <!-- další akce -->
<action-mappings>

login.jsp

Další stránkou je login.jsp. Důkladněji si projdeme jen uživatelské značky, zbylé HTML je jasné.

ZnačkaPopis
<html:xhtml />určuje, že typ dokumentu bude XHTML
<html:html>vloží začátek html stránky (tag html)
<bean:message key="login.title" />zobrazí text s klíčem login.title (viz část o i18n)
<html:errors />zobrazí chyby předávané jsp stránce akcí
<html:form action="/login" method="post">říká jakou akcí budou zpracována data z formuláře
<html:rewrite page="/theme/style.css" />přepíše relativní cestu z kořenového adresáře aplikace na absolutní
<html:link action="/logout">Logout</html:link>vytvoří odkaz na akci logout
<bean:write name="user" property="realName" />vypíše člena realName beany user
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<%@ page contentType="text/html" %>
<%@ page pageEncoding="UTF-8" %>

<%-- definice knihoven Struts --%>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:xhtml />
<html:html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title><bean:message key="login.title" /></title>
      <link rel="stylesheet" type="text/css"
            href="<html:rewrite page="/theme/style.css" />">
  </head>
    <body>
        <h1><bean:message key="login.title" /></h1>
        <div class="errors">
        <html:errors />
        <br /><br />
        </div>
        <html:form action="/login" method="post">
        <table>
            <tr><td><bean:message key="login.username" /></td><td>:</td>
	    <td><html:text property="username" value="" /></td></tr>
            <tr><td><bean:message key="login.password" /></td>
	    <td>:</td><td><html:password property="password" value="" /></td></tr>
        </table>
        <p><html:submit><bean:message key="login.submit" /></html:submit></p>
        </html:form>
    </body>
</html:html>

welcome.jsp

Poslední stránkou je welcome.jsp. Jejím jediným úkolem je zobrazení uživatelského menu a uvítací zprávy.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<%@ page contentType="text/html" %>
<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:xhtml />
<html:html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title><bean:message key="welcome.title" /></title>
      <link rel="stylesheet" type="text/css"
            href="<html:rewrite page="/theme/style.css" />">
  </head>
    <body>
        <div class="errors">
            <html:errors />
        </div>
        <div class="menu">
        <table>
            <td><html:link action="/logout">Logout</html:link></td>
            <td class="username"><bean:message key="global.user" />: 
	    <bean:write name="user" property="realName" /></td>
        </table>
        </div>
        <div class="body">
            <bean:message key="welcome.back" />
        </div>
    </body>
</html:html>

Nastavení Ant, kompilace

Apache Ant je software, jenž nám usnadňuje práci s kompilací java projektů. Zájemce o bližší popis odkazuji na seriál Nebojte se mravence. Pokud jste dosud postupovali podle tohoto návodu, tj. upravovali aplikaci struts-blank, tak v adresáři WEB-INF/src naleznete soubor build.xml. V něm je potřeba především upravit cestu ke knihovně servletu aplikačního serveru a poté doplnit proměnou ${servlet.jar} do seznamu CLASSPATH projektu. Po úpravě tedy build.xml vypadá následovně.

<project name="shop" basedir="../" default="all">

    <!-- Local system paths -->
    <property name="servlet.jar"
    value="/usr/local/share/jboss-4.0.1/server/default/lib/javax.servlet.jar"/>
    <property name="distpath.project" value="../../deploy"/>


    <!-- Project settings -->
    <property name="project.title" value="LinuxSoft Shop"/>
    <property name="project.distname" value="shop"/>
    <property name="project.version" value="1.0"/>


    <!-- Path settings -->
    <property name="doc.path" value="./doc/api"/>
    <property name="doc.src" value="./src/java"/>


    <!-- classpath for Struts 1.1 -->
    <path id="compile.classpath">
        <pathelement path ="lib/commons-beanutils.jar"/>
        <pathelement path ="lib/commons-digester.jar"/>
        <pathelement path ="lib/struts.jar"/>
        <pathelement path ="classes"/>
        <pathelement path ="${servlet.jar}"/>
        <pathelement path ="${classpath}"/>
    </path>


    <!-- Check timestamp on files -->
    <target name="prepare">
        <tstamp/>
    </target>


    <!-- Copy any resource or configuration files -->
    <target name="resources">
        <copy todir="classes" includeEmptyDirs="no">
            <fileset dir="src/java">
            <patternset>
                <include name="**/*.conf"/>
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
            </patternset>
            </fileset>
        </copy>
    </target>


    <!-- Normal build of application -->
    <target name="compile" depends="prepare,resources">
        <javac srcdir="src" destdir="classes">
            <classpath refid="compile.classpath"/>
        </javac>
    </target>


    <!-- Remove classes directory for clean build -->
    <target name="clean"
      description="Prepare for clean build">
      <delete dir="classes"/>
      <mkdir  dir="classes"/>
    </target>


    <!-- Build entire project -->
    <target name="project" depends="clean,prepare,compile,javadoc"/>


    <!-- Create binary distribution -->
    <target name="dist"
        description="Create binary distribution">

      <mkdir
        dir="${distpath.project}"/>
      <jar
        jarfile="${distpath.project}/${project.distname}.jar"
        basedir="./classes"/>
      <copy
        file="${distpath.project}/${project.distname}.jar"
        todir="${distpath.project}"/>

      <war
        basedir="../"
        warfile="${distpath.project}/${project.distname}.war"
        webxml="web.xml">
        <exclude name="${distpath.project}/${project.distname}.war"/>
       </war>

    </target>


    <!-- Build project and create distribution-->
    <target name="all" depends="project,dist"/>

</project>

Poté již jen stačí spustit příkazem ant compile dist samotnou kompilaci a vytvoření archivu WAR.

Nasazení aplikace na serveru

WAR soubor (z adresáře deploy) nakopírujte do adresáře /usr/local/share/jboss-4.0.1/server/default/, server se o zbytek postará sám. Po spuštění serveru otestujte funkčnost aplikace na adrese http://localhost:8080/shop

Příště

Podrobněji probereme formuláře, ActionForm, DynaActionForm, jejich validaci metodou a vestavěným validátorem.

Ke stažení

Současná podoba aplikace

Verze pro tisk

pridej.cz

 

DISKUZE

test na webu 4.3.2005 08:43 Miroslav Holubec
L Re: test na webu 18.5.2005 14:36 Jiří Král
Problém 14.3.2005 20:11 pks
  L Re: Problém 22.3.2005 09:11 Miroslav Holubec
    L Re: Problém 8.4.2005 12:05 Miroslav Holubec




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze