Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sekcija 1: Instalacija Tomcata
- ==========================================================
- Na linuxu - mogućnost uporabe paketnih managera; ne razmatramo ovdje
- Windowsi/Linux: Skinuti tomcat
- http://tomcat.apache.org/download-80.cgi
- - konkretno, u sekciji Core skinite ZIP arhivu (apache-tomcat-8.5.15.zip; za linux predlazem .tar.gz jer čuva dozvole nad datotekama)
- Raspakirati ga negdje; npr:
- d:\usr\apache-tomcat-8.5.15
- /home/pero/apache-tomcat-8.5.15
- Taj direktorij označavat ćemo s CATALINA_HOME.
- Imamo poddirektorije:
- CATALINA_HOME/bin
- CATALINA_HOME/conf
- CATALINA_HOME/logs
- CATALINA_HOME/webapps
- CATALINA_HOME/...
- Sljedeći dio je opcionalan:
- Napraviti (pazi, prilagodi staze po potrebi tako da odgovaraju stanju na Vašem računalu!!!)
- windowsi: CATALINA_HOME\bin\setenv.bat
- -------------------
- set "JAVA_HOME=c:\Program Files (x86)\Java\jdk1.8.0_45"
- set "PATH=%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;%PATH%"
- set "CATALINA_HOME=d:\usr\apache-tomcat-8.5.15"
- exit /b 0
- -------------------
- linux: CATALINA_HOME/bin/setenv.sh (ovisno o inačici linuxa, prilagoditi JRE_HOME)
- -------------------
- JRE_HOME=/usr/lib/jvm/java-8-oracle/jre
- CATALINA_HOME=/home/pero/apache-tomcat-8.5.15
- -------------------
- Pretpostavimo da smo u konzoli i da je trenutni direktorij CATALINA_HOME.
- Pokretanje Tomcata:
- bin\startup.bat (windowsi)
- bin/startup.sh (linux)
- Gašenje Tomcata:
- bin\shutdown.bat (windowsi)
- bin/shutdown.sh (linux)
- Osnovna konfiguracija poslužitelja:
- CATALINA_HOME/conf/server.xml
- Pronaći u toj datoteci <Connector port="8080" protocol="HTTP/1.1" ... /> i dodati atribut URIEncoding="UTF-8".
- Pogledati i CATALINA_HOME/conf/web.xml ==> mime-mapping.
- Tomcat po defaultu parametre koji se nalaze u adresi zahtjeva GET dekodira koristeći ISO-8859-1. Zbog toga je potrebno u connector dodati URIEncoding="UTF-8" kako bi to promijenili. Kako se dekodira tijelo zahtjeva (primjerice, kod POST-a), moguće je eksplicitno podesiti uporabom HttpServletRequest.setCharacterEncoding("UTF-8").
- Vidi:
- http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
- ==========================================================
- Sekcija 2: Rad u Eclipse-u
- ==========================================================
- Važno: Eclipse, izbornik Window -> Preferences:
- General -> Workspace -> Text File Encoding ==> Other: UTF-8
- 1) Napraviti novi maven projekt u Eclipse-u (sekcija 0-B: aid, gid; archetype je maven-archetype-webapp).
- 2) Odraditi dio opisan u sekcija 0-B
- 3) Proučiti strukturu direktorija koja je nastala.
- ==========================================================
- Sekcija 3: Prva web aplikacija
- ==========================================================
- Provjerite da je opisnik web-aplikacije src/main/webapp/WEB-INF/web.xml
- ---------------------------------------------------------------------------------------
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="true">
- <display-name>Moja prva aplikacija</display-name>
- <description>
- Prva aplikacija
- </description>
- </web-app>
- ---------------------------------------------------------------------------------------
- Dodati u web.xml definiciju servleta, prije zatvarajućeg <web-app> taga:
- ---------------------------------------------------------------------------------------
- <servlet>
- <servlet-name>servlet1</servlet-name>
- <servlet-class>hr.fer.zemris.java.p11.servleti.PrviServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>servlet1</servlet-name>
- <url-pattern>/prvi</url-pattern>
- </servlet-mapping>
- ---------------------------------------------------------------------------------------
- Uočite, dodajemo deklaraciju servleta te mapping servleta (koja ga staza aktivira). Jedan servlet moguće je mapirati na više staza. Zato se u deklaraciji servleta definira njegov identifikator i potom se piše jedan ili više servlet-mapping tagova kojima se isti mapira na različite staze.
- U mapiranju je moguće (ograničeno) koristiti i zamjenski znak *; primjerice, <url-pattern>/akcije/*</url-pattern> će bilo koji URL koji počinje s "/akcije/" u kontekstu web-aplikacije mapirati na zadani servlet.
- Napraviti sada i sam servlet: hr.fer.zemris.java.p11.servleti.PrviServlet iz HttpServlet-a, i overrideati doGet:
- PrintWriter writer = resp.getWriter();
- writer.println("<h1>Hello, World!</h1>");
- ==========================================================
- Sekcija 3.1: Upogonjavanje naše prve aplikacije
- ==========================================================
- Napravite build (maven package). U direktoriju target dobit ćete webapp1.war. Deploy uvijek radite na isti način:
- 1) ako je tomcat pokrenut, ugasite ga
- 2) iskopirajte webapp1.war u tomcatov webapps direktorij
- 3) ako imate greske u kodu, obrisite sve datoteke iz tomcatovog logs direktorija
- 4) pokrenite tomcat
- 5) ako ima gresaka, ugasite tomcat pa pogledajte log datoteke - tamo ce biti ispisan exception koji se dogodio
- Pokušajte sada dohvatiti naš prvi servlet; staza je:
- http://localhost:8080/webapp1/prvi
- ==========================================================
- Sekcija 3.2: Sitno podešavanje
- ==========================================================
- Dodajte u web.xml mapping kojim se i staza /index.html povezuje s našim prvim servletom. Time će se on pozivati ako korisnik zada i URL:
- http://localhost:8080/webapp1
- (naime, provjerite da je u CATALINA_HOME/conf/web.xml kao jedan od welcome-file-ova naveden i index.html pa kad mi ne zatražimo ništa, tomcat pokuša nalijepiti index.html i to onda pokrene ovog servleta.
- ==========================================================
- Sekcija 4: Tehnologija JSP
- ==========================================================
- Dodati u Eclipse-u novu datoteku: src/main/webapp/datum.jsp
- ---------------------------------------------------------------------------------------
- <%@ page import="java.util.Date,java.util.Calendar" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <!-- Primjer bloka u kojem možemo deklarirati funkcije -->
- <%!
- private void zapisiDatum(javax.servlet.jsp.JspWriter out, Date now) throws java.io.IOException {
- out.print(now);
- }
- %>
- <html>
- <body>
- <p>Pozdrav! Sada je:
- <%
- Date now = new Date();
- out.println(now);
- %>
- a to možemo napisati i ovako: <%= now %> i ovako <% zapisiDatum(out, now); %>.</p>
- <p>
- <% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {%>
- Good Morning
- <% } else { %>
- Good Afternoon
- <% } %>
- </p>
- <p>Ispis preko taga: <c:out value="abc" />, ispis preko EL-izraza: ${"abc"}.</p>
- <p><c:forEach var="brojac" begin="1" end="5">${brojac},</c:forEach></p>
- </body>
- </html>
- ---------------------------------------------------------------------------------------
- EL-izrazi, poput ${brojac}, postojanje varijable tog imena traže u nizu mapa (kažemo "dosega"), prema sljedećem redosljedu:
- 1) page scope ("privremeni atributi koji se čuvaju u mapi same stranice")
- 2) request scope ("privremeni atributi koji se čuvaju u zahtjevu koji se trenutno obrađuje")
- 3) session scope ("permanentni atributi koji se čuvaju u korisnikovoj sjedničkoj mapi")
- 4) application scope ("atributi koji se čuvaju na razini čitave web-aplikacije")
- Želimo li zabraniti interpretiranje EL-izraza u stranici, koristimo:
- <%@ page isELIgnored ="true" %>
- Više o EL-u:
- http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
- Možemo dohvaćati i parametre poslane kroz URL, npr. ${param.username} ili ekvivalentno ${param["username"]}.
- Direktiva contentType konfigurira writer koji ćemo dobiti kada prvi puta nešto treba zapisati prema klijentu. Direktiva pageEncoding govori u kojoj jekondoj stranici napisan izvorni kod ove JSP stranice.
- JSTL je implementacija standardnih tagova (vidi <c:out> u primjeru) koju definira Sun/Oracle. Međutim, Tomcat ne dolazi s potrebnim jarovima; zato će biti kopirani u WEB-INF/lib direktorij (provjerite nakon "mvn package" u target/webapp1/WEB-INF/lib).
- <c:out> po defaultu escape-a tekst koji ispisuje (rješava se problem koji nastaje ako tekst sadrži znakove poput <, &, > i slično). To se može isključiti ovako:
- <c:out value="<b>abc</b>" />
- <c:out value="<b>abc</b>" escapeXml="false" />
- Procesiranje anotacija radi ako u web.xml nije zadan atribut metadata-complete="true"; dakle, ako ga nema iako je prisutan ali je metadata-complete="false", servlet containter je dužan pretražiti sve razrede za eventualnim anotacijama i njih koristiti za konfiguraciju kao nadopuna datoteke web.xml.
- Evo još jednog primjera.
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.web.demo;
- public class StringInfo {
- private String text;
- public StringInfo() {
- }
- public String getText() {
- return text;
- }
- public void setText(String text) {
- this.text = text;
- }
- public int getLength() {
- return text==null ? 0 : text.length();
- }
- public String getCharAt(long index) {
- if(text==null || index<0 || index>=text.length()) return "";
- return String.valueOf(text.charAt((int)index));
- }
- public StringInfo getReversed() {
- StringInfo rev = new StringInfo();
- if(text==null || text.isEmpty()) {
- rev.setText(text);
- } else {
- char[] arr = text.toCharArray();
- char[] arr2 = new char[arr.length];
- for(int i = 0; i < arr.length; i++) {
- arr2[arr.length-1-i] = arr[i];
- }
- rev.setText(new String(arr2));
- }
- return rev;
- }
- }
- ---------------------------------------------------------------------------------------
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.web.demo;
- // Ovo je Java-bean
- public class User {
- private String lastName;
- private String firstName;
- public User() {
- }
- public User(String lastName, String firstName) {
- super();
- this.lastName = lastName;
- this.firstName = firstName;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- public String getFirstName() {
- return firstName;
- }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
- }
- ---------------------------------------------------------------------------------------
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.web.demo;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet(name="d1", urlPatterns={"/d1"})
- public class DemoServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- List<User> userList = new ArrayList<>();
- userList.add(new User("Žunić", "Žunko"));
- userList.add(new User("Šabić", "Šanko"));
- userList.add(new User("Ćinić", "Ćinko"));
- req.setAttribute("userList", userList);
- Map<String, User> map = new HashMap<String, User>();
- map.put("Odlikaš", userList.get(0));
- map.put("Tak-tak", userList.get(1));
- map.put("Ajme-meni", userList.get(2));
- req.setAttribute("primjerci", map);
- req.getRequestDispatcher("/WEB-INF/pages/demo.jsp").forward(req, resp);
- }
- }
- ---------------------------------------------------------------------------------------
- ---------------------------------------------------------------------------------------
- <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <jsp:useBean id="si" class="hr.fer.zemris.web.demo.StringInfo" scope="request" />
- <jsp:setProperty property="text" name="si" value="Perica" />
- Radim s tekstom: <jsp:getProperty property="text" name="si"/> odnosno ${si.text}<br/>
- Duljina je: <jsp:getProperty property="length" name="si"/><br/>
- Prvi znak je: ${si.getCharAt(1)}<br/>
- Prvi znak reverznog niza je: ${si.reversed.getCharAt(1)}<br/>
- <ol>
- <c:forEach var="u" items="${userList}">
- <li>${u.lastName}, ${u.firstName}</li>
- </c:forEach>
- </ol>
- <ol>
- <c:forEach var="e" items="${primjerci}">
- <li>${e.key} ==> ${e.value.lastName}, ${e.value.firstName}</li>
- </c:forEach>
- </ol>
- Tko je Odlikaš? ${primjerci["Odlikaš"].lastName}
- ---------------------------------------------------------------------------------------
- ==========================================================
- Sekcija 5: Anotacije, Filtri, Listeneri
- ==========================================================
- Od Servlet specifikacije 3 više nije nužno sve navoditi u web.xml; moguće je koristiti i anotacije direktno u izvornom kodu.
- Primjer anotiranog servleta:
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.java.p11.servleti;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet(name="S2",urlPatterns={"/dr","/drugi"})
- public class DrugiServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- resp.setCharacterEncoding("UTF-8");
- resp.getWriter().print("<h1>Hello, World, drugi pokušaj!</h1>");
- }
- }
- ---------------------------------------------------------------------------------------
- Primjer anotiranog filtra:
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.java.p11.servleti;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.annotation.WebFilter;
- @WebFilter("/dr")
- public class PrimjerFiltera implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- System.out.println("Ušao sam u filter!");
- request.setCharacterEncoding("UTF-8");
- chain.doFilter(request, response);
- System.out.println("Izašao sam iz filtera!");
- }
- @Override
- public void destroy() {
- }
- }
- ---------------------------------------------------------------------------------------
- Primjer anotiranog listenera:
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.java.p11.servleti;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import javax.servlet.annotation.WebListener;
- @WebListener
- public class Informacije implements ServletContextListener {
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- System.out.println("Dojava da je aplikacija pokrenuta!");
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- System.out.println("Dojava da se aplikacija gasi!");
- }
- }
- ---------------------------------------------------------------------------------------
- ==========================================================
- Sekcija 6: Sigurnost
- ==========================================================
- U tomcat/conf/tomcat-users.xml dodati:
- <role rolename="administrator"/>
- <user username="a" password="123" roles="administrator"/>
- Napraviti sigurni servlet:
- ---------------------------------------------------------------------------------------
- package hr.fer.zemris.java.p11.servleti;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class SigurniServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- PrintWriter writer = resp.getWriter();
- writer.println("<h1>Sigurnost na djelu!</h1>");
- writer.println("<p>Bok "+req.getRemoteUser()+"</b>");
- writer.println("<p>request.isUserInRole(\"ADM\")? "+req.isUserInRole("ADM")+"</b>");
- }
- }
- ---------------------------------------------------------------------------------------
- Napravite WEB-INF/pages/prijava.jsp
- ---------------------------------------------------------------------------------------
- <form method="post" action="j_security_check">
- Ime: <input type="text" name="j_username"><br>
- Zaporka: <input type="text" name="j_password"><br>
- <input type="submit">
- </form>
- ---------------------------------------------------------------------------------------
- Napravite WEB-INF/pages/pogreska.jsp
- ---------------------------------------------------------------------------------------
- Dogodila se pogreška.
- ---------------------------------------------------------------------------------------
- Podesite web.xml
- ---------------------------------------------------------------------------------------
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="false">
- <display-name>Moja prva aplikacija</display-name>
- <description>
- Prva aplikacija
- </description>
- <servlet>
- <servlet-name>servlet1</servlet-name>
- <servlet-class>hr.fer.zemris.java.p11.servleti.PrviServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>servlet3</servlet-name>
- <servlet-class>hr.fer.zemris.java.p11.servleti.SigurniServlet</servlet-class>
- <security-role-ref>
- <description>Može samo administrator</description>
- <role-name>ADM</role-name>
- <role-link>administrator</role-link>
- </security-role-ref>
- </servlet>
- <servlet-mapping>
- <servlet-name>servlet1</servlet-name>
- <url-pattern>/prvi</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>servlet1</servlet-name>
- <url-pattern>/index.html</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>servlet3</servlet-name>
- <url-pattern>/sig</url-pattern>
- </servlet-mapping>
- <session-config>
- <session-timeout>15</session-timeout>
- </session-config>
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Stranice za administraciju</web-resource-name>
- <url-pattern>/sig</url-pattern>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
- </web-resource-collection>
- <auth-constraint>
- <role-name>administrator</role-name>
- </auth-constraint>
- </security-constraint>
- <login-config>
- <auth-method>FORM</auth-method>
- <form-login-config>
- <form-login-page>/WEB-INF/pages/prijava.jsp</form-login-page>
- <form-error-page>/WEB-INF/pages/pogreska.jsp</form-error-page>
- </form-login-config>
- </login-config>
- <security-role>
- <description>Administrator sustava</description>
- <role-name>administrator</role-name>
- </security-role>
- </web-app>
- ---------------------------------------------------------------------------------------
- Napomene:
- web.xml mora deklarirati koje sve uloge koristi (vidi <security-role> pri kraju web.xml datoteke). Moguc je scenarij i u kojem servlet koristi nepostojece (virtualne) uloge a koje zelimo namapirati
- na konkretne postojece uloge. Primjerice, recimo da servlet zeli koristiti ulogu "ADM" pa koristi upit tipa req.isUserInRole("ADM"), a mi zelimo da "ADM" alias za ulogu "administrator"; tada se u
- deklaraciji pojedinih servleta mogu navesti takva mapiranja uporabom taga <security-role-ref> (vidi gore primjer).
- ==========================================================
- Sekcija 7: Web i MVC
- ==========================================================
- Napraviti primjer u kojem servlet računa sve što treba i rezultat zakvači u atribute zahtjeva te napravi forward na JSP; taj JSP onda nacrta rezultat korisniku.
- Za prosljeđivanje koristiti req.getRequestDispatcher("/WEB-INF/pages/pogled.jsp").forward(req, resp);
- Riješite to na primjeru servleta koji ispisuje kvadrate zadanog raspona brojeva; raspon se predaje preko parametara "a" i "b"; defaultne vrijednosti su 0 i 20.
- ==========================================================
- Sekcija 8: Dodatak
- ==========================================================
- Directives
- Directive elements have a syntax of the form <%@ directive...%>.
- Scripting Elements
- EL expressions can be used in JSP standard and custom actions and template data. EL expressions use the syntax ${expr} and #{expr};
- For example:
- <mytag attr1="${bean.property}".../>
- ${map[entry]}
- <lib:myAction>${3+counter}</lib:myAction>
- Chapter JSP.2, “Expression Language” provides more details on the EL.
- There are three language-based types of scripting elements: declarations,
- scriptlets, and expressions. Declarations follow the syntax <%! ... %>. Scriptlets
- follow the syntax <% ... %>. Expressions follow the syntax <%= ... %>.
- -------------------------------------------------------
- <% response.setContentType("....");
- whatever... %><?xml version=”1.0” ?>
- <%@ page buffer=”8kb” %>
- The rest of the document goes here
- -------------------------------------------------------
- Implicitni objekti koji stoje na raspolaganju:
- * request: javax.servlet.ServletRequest ili podtip (npr. javax.servlet.HttpServletRequest)
- * response: javax.servlet.ServletResponse ili podtip (npr. javax.servlet.HttpServletResponse)
- * pageContext: javax.servlet.jsp.PageContext
- * session: javax.servlet.http.HttpSession
- * application: javax.servlet.ServletContext (getServletConfig().getContext())
- * out: javax.servlet.jsp.JspWriter, omata response.getWriter()
- * config: javax.servlet.ServletConfig
- * page: java.lang.Object (za JSP skriptu koja koristi jezik Javu je "page" sinonim za "this")
- Ako je JSP stranica proglasena Error stranicom, još ima na raspolaganju objekt:
- * exception: java.lang.Throwable
- Unutar JSP-a autorima je zabranjeno da ispisuju direktno na response.getWriter() ili response.getOutputStream().
- Scope-ovi:
- * "page": vidljivo samo unutar te stranice; cim se posalje odgovore, reference se gube; objekti se pohranjuju u pageContext objekt
- * "request": vidljivo od trenutka stvaranja pa do kraja lanca obrade zahtjeva (ako jsp nesto npr. forwarda dalje); pohranjuje se u request objekt
- * "session": vidljivo od svih stranica koje sudjeluju u istoj sjednici; reference na pohranjene objekte se otpustaju kad sjednica zavrsi; pohranjuju se u session objekt
- * "application": vidljivo na razini web aplikacije; objekti se pohranjuju u application objektu (koji je zapravo ServletContext dobiven pri konfiguraciji servlet objekta)
- Uključivanje sadržaja u JSP stranicu - dva načina:
- 1) <%@ include file="xyz" %> uključuje xyz kao #include<xyz> u C-u (uključi tijelo od xyz u trenutnu stranicu i onda sve skupa kompajlira)
- 2) <jsp:include page="xyz" /> u trenutku izvođenja izvrši stranicu xyz i ovno što je ona generirala zalijepi na ovo mjesto
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement