LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> 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 12842×

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ů

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

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

> Poslední diskuze

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

Více ...

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