In aceasta lucrare vor fi acoperite
(partial) urmatoarele probleme:
- instalarea, compilarea si invocarea
JSP-urilor Java
- exemple de servlet-uri si JSP-uri
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:
INFO:
Installing web application at context
path /testJSP from URL file:C:\jakarta-tomcat-5.0.25\webapps\testJSP 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
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).
Pentru o comparatie intre
JSP-uri si servlet-uri, urmatorul
exemplu simplu de servlet realizeaza
aceeasi functionalitate ca exemplul simplu de JSP anterior.
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.
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.