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

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ů

18.6.2018 0:43 /František Kučera

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.


Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

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

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

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