(varianta pdf)

SwRTc – supliment proiect

Tehnologia Java Server Pages (JSP)

 

JSP.1. Descrierea

 

 

In aceasta lucrare vor fi acoperite (partial) urmatoarele probleme:

- instalarea, compilarea si invocarea JSP-urilor Java

- exemple de servlet-uri si JSP-uri

 

JSP.2. Exemplu simplu de JSP

 

JSP.2.1. Structura de directoare si continuturile fisierelor (structura instalarii JSP-ului)

 

Structura de directoare pentru un JSP simplu (plasat in subdirectorul testJSP al directorului webapps)

 

 

 

 

 

Directorul WEB-INF este necesar, dar el poate sa nu contina nimic. In cazul in care directorul WEB-INF nu contine un fisier web.xml, un astfel de fisier este generat automat de TOMCAT.

 

Mesajele afisate la startup in acest caz sunt:

 

Jan 8, 2006 3:09:32 PM org.apache.catalina.core.StandardHostDeployer install

INFO: Installing web application at context path /testJSP from URL file:C:\jakarta-tomcat-5.0.25\webapps\testJSP

Jan 8, 2006 3:09:32 PM org.apache.catalina.startup.ContextConfig applicationConfig

INFO: Missing application web.xml, using defaults only StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testJSP]

 

Continutul fisierului index.html

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<html>

  <head>   <title>Index pentru testJSP</title>  </head>

  <body>

    <p><h1>Index pentru testJSP</h1>

    <form action = jsppropriuzis.jsp method = get>

        <label><p>Your name:

        <input type="text" size="20" name="name" value="anonymous">

        <p><input type = "submit" value = "Say Hello"/>

        </label></p>

    </form>

    <p>Acest fisier poate fi accesat la adresa:

       <a href="http://localhost:8080/testJSP/">http://localhost:8080/testJSP/</a>

  </body>

</html>

 

Continutul fisierului jsppropriuzis.jsp

 

1

2

3

4

5

6

7

<html>

  <head>   <title>JSP simplu</title>  </head>

  <body bgcolor="white">

    <%-- Acesta este un comentariu JSP --%>

    <h1> Hello <%=request.getParameter("name") %>! </h1>

  </body>

</html>

 

 

In momentul interpretarii JSP-ului jsppropriuzis.jsp containerul servlet/JSP al TOMCAT:

 

- mai intai va genera automat un servlet, numit jsppropriuzis_jsp.java,

 

- apoi va compila automat acest servlet, obtinandu-se fisierul clasa al servlet-ului, numit jsppropriuzis_jsp.class,

 

- in final va executa acest servlet.

 

 

Continutul fisierului jsppropriuzis_jsp.java

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

package org.apache.jsp;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

 

public final class jsppropriuzis_jsp extends org.apache.jasper.runtime.HttpJspBase

                          implements org.apache.jasper.runtime.JspSourceDependent {

  private static java.util.Vector _jspx_dependants;

 

  public java.util.List getDependants() {

    return _jspx_dependants;

  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)

        throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;

    PageContext pageContext = null;

    HttpSession session = null;

    ServletContext application = null;

    ServletConfig config = null;

    JspWriter out = null;

    Object page = this;

    JspWriter _jspx_out = null;

    PageContext _jspx_page_context = null;

 

    try {

      _jspxFactory = JspFactory.getDefaultFactory();

      response.setContentType("text/html");

      pageContext = _jspxFactory.getPageContext(this, request, response,

                     null, true, 8192, true);

      _jspx_page_context = pageContext;

      application = pageContext.getServletContext();

      config = pageContext.getServletConfig();

      session = pageContext.getSession();

      out = pageContext.getOut();

      _jspx_out = out;

 

      out.write("<html>\r\n");

      out.write("  <head>\r\n");

      out.write("   <title>JSP simplu</title>\r\n");

      out.write("  </head>\r\n");

      out.write("  <body bgcolor=\"white\">\r\n");

      out.write("    ");

      out.write("\r\n");

      out.write("\r\n");

      out.write("    <h1> Hello ");

      out.print(request.getParameter("name") );

      out.write("! </h1>\r\n");

      out.write("\r\n");

      out.write("  </body>\r\n");

      out.write("</html>\r\n");

    } catch (Throwable t) {

      if (!(t instanceof SkipPageException)){

        out = _jspx_out;

        if (out != null && out.getBufferSize() != 0)

          out.clearBuffer();

        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);

      }

    } finally {

      if (_jspxFactory !=null) _jspxFactory.releasePageContext(_jspx_page_context);

    }

  }

}

 

Structura de directoare pentru servlet-ul generat de containerul JSP in momentul interpretarii JSP-ului jsppropriuzis.jsp

 

 

JSP.2.2. Utilizarea JSP-ului

 

Fisierul index.html incarcat local in browser

 

 

 

 

Fisierul index.html incarcat in browser de pe server (utilizand URL-ul http://localhost:8080/testJSP/)

 

 

 

 

Dupa apelul GET catre JSP (obtinut prin apasarea butonului “Say Hello”)

 

 

 

 

Continutul html al browserului (obtinut cu View Source) pentru pagina sursa jsppropriuzis.jsp

 

 

 

1

2

3

4

5

6

7

8

<html>

  <head>

   <title>JSP simplu</title>

  </head>

  <body bgcolor="white">

    <h1> Hello anonymous! </h1>

  </body>

</html>

 

Distributia testJSP.zip (arhiva care contine instalarea JSP-ului).

 

 

 

 

JSP.3. Exemplu simplu de servlet

 

 

Pentru o comparatie intre JSP-uri si servlet-uri, urmatorul exemplu simplu de servlet realizeaza aceeasi functionalitate ca exemplul simplu de JSP anterior.

 

JSP.3.1. Structura de directoare si continuturile fisierelor (structura instalarii servlet-ului)

 

Structura de directoare pentru un servlet simplu (plasat in subdirectorul testservlet al directorului webapps)

 

 

Continutul fisierului index.html

 

1

2

3

4

5

6

7

8

9

10

11

12

<html>

  <head>   <title>Index pentru testservlet</title>  </head>

  <body>

    <p><h1>Index pentru testservlet</h1>

       <a href="http://localhost:8080/testservlet/FormularAccesLaServlet.html">

              <b>Formularul de acces la servlet</b></a>

 

       <p>Acest fisier poate fi accesat la adresa:

            <a href="http://localhost:8080/testservlet/">

             http://localhost:8080/testservlet/</a>

  </body>

</html>

 

 

 

Continutul fisierului FormularAccesLaServlet.html

 

1

2

3

4

5

6

7

8

9

10

11

12

<html>

  <head>   <title>Formular de acces la servlet</title>  </head>

  <body>

    <p><h1>Formular de acces la servlet</h1>

    <form action = "servlet/numeleservletului" method = "get"

        <label><p>Your name:

        <input type="text" size="20" name="name" value="anonymous">

        <p><input type = "submit" value = "Say Hello"/>

        </label></p>

    </form>

  </body>

</html>

 

Continutul subdirectorului WEB-INF

 

 

 

Continutul fisierului web.xml

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?xml version="1.0" encoding="ISO-8859-1"?>

 

<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

 

<web-app>

 

  <!--  Descriere generala a aplicatiei Web  -->

    <display-name>Exemplu simplu</display-name>

    <description>

        Exemplu simplu

    </description>

 

  <!--  Definitii (asocierea numelor cu clasele Java) -->

    <servlet>

        <servlet-name>numeleservletului</servlet-name>

        <servlet-class>ServletulPropriuzis</servlet-class>

    </servlet>

 

  <!--  Translatii (asocierea numelor cu schemele de invocare) -->

    <servlet-mapping>

        <servlet-name>numeleservletului</servlet-name>

        <url-pattern>/servlet/numeleservletului</url-pattern>

    </servlet-mapping>

 

</web-app>

 

Continutul subdirectorului classes

 

 

Continutul fisierului ServletulPropriuzis.java

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import java.io.*;

import java.text.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public class ServletulPropriuzis extends HttpServlet {

 

    public void doGet(HttpServletRequest cerereHTTP,

            HttpServletResponse raspunsHTTP) throws IOException, ServletException {

 

        String name = (String) cerereHTTP.getParameter("name");

 

        raspunsHTTP.setContentType("text/html");

 

        PrintWriter outHTTP = raspunsHTTP.getWriter();

 

        outHTTP.println("<html>");

        outHTTP.println("<head>");

        outHTTP.println("<title> Hello " + name + "! </title>");

        outHTTP.println("</head>");

        outHTTP.println("<body bgcolor=\"white\">");

        outHTTP.println("<h1> Hello " + name + "! </h1>");

        outHTTP.println("</body>");

        outHTTP.println("</html>");

    }

}

 

Fisierul sursa al servlet-ului, numit ServletulPropriuzis.java, trebuie compilat (de exemplu utilizand script-ul javac_all.bat, prin executia caruia sunt compilate toate sursele Java din directorul curent) obtinandu-se fisierul clasa al servlet-ului, numit ServletulPropriuzis.class.

 

In momentul cererii GET servlet-ul ServletulPropriuzis va fi executat.

 

JSP.3.2. Utilizarea servlet-ului

 

Fisierul index.html incarcat in browser de pe server (utilizand URL-ul http://localhost:8080/testservlet/)

 

 

 

Dupa incarcarea formularului de acces la servlet (FormularAccesLaServlet.html)

 

 

 

 

Dupa apelul GET catre servlet (obtinut prin apasarea butonului “Say Hello”)

 

 

Continutul html al browserului (obtinut cu View Source)

 

1

2

3

4

5

6

7

8

<html>

<head>

<title> Hello anonymous! </title>

</head>

<body bgcolor="white">

<h1> Hello anonymous! </h1>

</body>

</html>

 

Distributia testservlet.zip (arhiva care contine instalarea servlet-ului).

 

 

In laborator:

 

Sa se instaleze si execute exemplele simple anterioare si sa se compare complexitatea crearii si instalarii fiecareia dintre cele doua solutii, JSP-ul si servlet-ul.