jEE work

10/22/2009

Free Marker

Filed under: Java Web — Edi @ 8:00 pm

Stiu ca alegerea multora este Velocity, dar dupa o zi de documentare si nervi, nu am reusit sa fac functionala o pagina :) . Asa ca am ales a doua alternativa care este mai “tanara” dar mai buna. Va prezint in continuare o aplicatie web care foloseste Free Marker. Un “Hello world!” cred ca e suficient pt inceput. Gasiti aici si documentatia pentru lucruri mai avansate ;) .

Mai intai terbuie sa luati sursele pentru Free Marker. Spre deosebire de Velocity acesta are un singur jar.
Faceti un proiect web simplu. Creati un servlet, eu l-am denumit “FMServlet”. Codul acestiua ar terbui sa fie cam asa:

package fm;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FMServlet extends HttpServlet {

    private Configuration cfg;
    public void init() {
        cfg = new Configuration();
        //specificati locul de unse se vor incarca template-urile
        cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/template");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       //Construiti un model
        Map root = new HashMap();
        root.put("message", "Hello World!");

        // Puneti mana protected template
        Template t = cfg.getTemplate("test.ftl");

        //Pregatiti raspunsul
        response.setContentType("text/html; charset=" + t.getEncoding());
        Writer out = response.getWriter();

        // Uniti medelul cu template-ul, si apoi il scrieti in response
        try {
            t.process(root, out);
        } catch (TemplateException e) {
            throw new ServletException(
                    "Error while processing FreeMarker template", e);
        }
    }
}

Continutul templatului este umratorul:

<html>
<head>
<title>Primul exemplu de template cu FreeMarker</title>
</head>
<body>
Servletul va transmite: ${message}
</body>
</html>

Din pagina index.jsp apelz servletul care imi intoarce templatul impreuna cu datele.

Cam atat de simplu este. Evident o sa pun si niste poze cu structura aplicatiei pentru a avea un context in care stau aceste 2 fisiere:
Structura aplicatiei:

Structura

A se observa locatia templatului

Locatia servletului

Faptul ca am inclus jarul freemarker

Spor la cod.

10/20/2009

Taguri imbricate

Filed under: Java Web — Edi @ 2:00 am

Incerc sa fac un mic exemplu despre tagurile imbricate. Ideea de baza este sa facem un tag parinte care are ca atribut o culoare, apoi un tag interior care are ca atribut o dimensiune de la 1 la 6 si de asemenea poate fi suprascris atributul culoare, in caz contrar este luat de la tagul parinte. Pentru exemplul asta voi folosi netbeans 6.7.1 si voi porni de la o aplicatie web simpla, fara nici un framework.

Dupa crearea aplicatiei, trebuie sa creati un TLD, netbeans ne ajuta mult, pasii sunt urmatorii: Ctrl+N pentu un nou fisier, apoi din categoria Web alegeti Tag Library Descriptor, alegeti numele si gata. Vericicati sa fi in interiorul lui WEB-INF, altfel nu va fi recunoscut in pagini!. Sa ii spunem MyTLD.

Acum cream 2 tag handler-uri:Facem un pachet in folderul de surse numit “tags” sin in acel pachet o sa punem handler-urile noastre. Deci Ctrl+N, din categoria web alegem Tag Handler, dupa ce alegeti numele, trebuie sa alegeti si fisierul TLD in care vreti sa il puneti, alegeti MyTLD, la acelas pas adaugati si 1 atribut care este de tipul string si se numeste color, atributul este obligatoriu, si trebuie bifat ca atare. Si astfel am terminat primul tag Handler, eu l-am denumit PapaTag. Similar faceti si un SonTag, dar care va avea atributul color optional, si inca un atribut size optional.

Si acum sursele:
PapaTag.java

package tags;
import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class PapaTag extends SimpleTagSupport {
    private String color;
    @Override
    public void doTag() throws JspException {
        try {
            JspWriter out = getJspContext().getOut();
            //setez culoarea data ca parametru
            out.print("");
            try {
                JspFragment f = getJspBody();
                if (f != null) {
                    f.invoke(out);
                }
                //dupa textul din tag
                out.print("");
            } catch (java.io.IOException ex) {
                ex.printStackTrace();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    public String getColor(){
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}

SonTag.java

package tags;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class SonTag extends SimpleTagSupport {
    private String color;
    private String size;
    @Override
    public void doTag() throws JspException {
        JspWriter out = getJspContext().getOut();
        try {
            // optin parintele daca exista
            PapaTag pt = (PapaTag) findAncestorWithClass(this, PapaTag.class);
            if(pt!=null){ // daca nu am culoarea setata o iau de la parinte
                if(color==null){
                    color = pt.getColor();
                }
            }
            if(size==null){ //daca nu am dimensiunea specificata fac una default
                size = "1";
            }
            //setez culoarea si mensiunea
            out.print("");
            JspFragment f = getJspBody();
            if (f != null) {
                f.invoke(out);
            }
            //inchit tagurile
            out.print("");
        } catch (java.io.IOException ex) {
            throw new JspException("Error in SonTag tag", ex);
        }
    }

    public void setColor(String color) {
        this.color = color;
    }
    public void setSize(String size) {
        this.size = size;
    }
}

Fisierul web.xml nu trebuie modificat si fisierul MyTLD.tld este completat de netBeans.
Pagina index.jsp este urmaoarea:

index.jpg

Si asta este structura proiectului din NetBeans:

tree

10/04/2009

Indrumari pentru captcha in jee

Filed under: Java Web — Edi @ 8:38 am

http://www.owasp.org/index.php/JCaptcha_servlet_example

si utilizati si jarul asta : commons-collections-2.1.jar

Theme: Rubric. Bloguieşte pe WordPress.com.

Follow

Get every new post delivered to your Inbox.