Advertisement
Guest User

Untitled

a guest
May 27th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.15 KB | None | 0 0
  1. Sekcija 1: Instalacija Tomcata
  2. ==========================================================
  3.  
  4. Na linuxu - mogućnost uporabe paketnih managera; ne razmatramo ovdje
  5.  
  6. Windowsi/Linux: Skinuti tomcat
  7. http://tomcat.apache.org/download-80.cgi
  8. - konkretno, u sekciji Core skinite ZIP arhivu (apache-tomcat-8.5.15.zip; za linux predlazem .tar.gz jer čuva dozvole nad datotekama)
  9.  
  10. Raspakirati ga negdje; npr:
  11. d:\usr\apache-tomcat-8.5.15
  12. /home/pero/apache-tomcat-8.5.15
  13.  
  14. Taj direktorij označavat ćemo s CATALINA_HOME.
  15.  
  16. Imamo poddirektorije:
  17. CATALINA_HOME/bin
  18. CATALINA_HOME/conf
  19. CATALINA_HOME/logs
  20. CATALINA_HOME/webapps
  21. CATALINA_HOME/...
  22.  
  23. Sljedeći dio je opcionalan:
  24. Napraviti (pazi, prilagodi staze po potrebi tako da odgovaraju stanju na Vašem računalu!!!)
  25. windowsi: CATALINA_HOME\bin\setenv.bat
  26. -------------------
  27. set "JAVA_HOME=c:\Program Files (x86)\Java\jdk1.8.0_45"
  28. set "PATH=%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;%PATH%"
  29. set "CATALINA_HOME=d:\usr\apache-tomcat-8.5.15"
  30. exit /b 0
  31. -------------------
  32.  
  33. linux: CATALINA_HOME/bin/setenv.sh (ovisno o inačici linuxa, prilagoditi JRE_HOME)
  34. -------------------
  35. JRE_HOME=/usr/lib/jvm/java-8-oracle/jre
  36. CATALINA_HOME=/home/pero/apache-tomcat-8.5.15
  37. -------------------
  38.  
  39. Pretpostavimo da smo u konzoli i da je trenutni direktorij CATALINA_HOME.
  40.  
  41. Pokretanje Tomcata:
  42. bin\startup.bat (windowsi)
  43. bin/startup.sh (linux)
  44.  
  45. Gašenje Tomcata:
  46. bin\shutdown.bat (windowsi)
  47. bin/shutdown.sh (linux)
  48.  
  49. Osnovna konfiguracija poslužitelja:
  50.  
  51. CATALINA_HOME/conf/server.xml
  52.  
  53. Pronaći u toj datoteci <Connector port="8080" protocol="HTTP/1.1" ... /> i dodati atribut URIEncoding="UTF-8".
  54.  
  55. Pogledati i CATALINA_HOME/conf/web.xml ==> mime-mapping.
  56.  
  57. 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").
  58.  
  59. Vidi:
  60. http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
  61.  
  62. ==========================================================
  63. Sekcija 2: Rad u Eclipse-u
  64. ==========================================================
  65.  
  66. Važno: Eclipse, izbornik Window -> Preferences:
  67.  
  68. General -> Workspace -> Text File Encoding ==> Other: UTF-8
  69.  
  70. 1) Napraviti novi maven projekt u Eclipse-u (sekcija 0-B: aid, gid; archetype je maven-archetype-webapp).
  71. 2) Odraditi dio opisan u sekcija 0-B
  72. 3) Proučiti strukturu direktorija koja je nastala.
  73.  
  74. ==========================================================
  75. Sekcija 3: Prva web aplikacija
  76. ==========================================================
  77.  
  78. Provjerite da je opisnik web-aplikacije src/main/webapp/WEB-INF/web.xml
  79. ---------------------------------------------------------------------------------------
  80. <?xml version="1.0" encoding="UTF-8"?>
  81.  
  82. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  83. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  84. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  85. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  86. version="3.1"
  87. metadata-complete="true">
  88.  
  89. <display-name>Moja prva aplikacija</display-name>
  90. <description>
  91. Prva aplikacija
  92. </description>
  93.  
  94. </web-app>
  95. ---------------------------------------------------------------------------------------
  96.  
  97. Dodati u web.xml definiciju servleta, prije zatvarajućeg <web-app> taga:
  98.  
  99. ---------------------------------------------------------------------------------------
  100. <servlet>
  101. <servlet-name>servlet1</servlet-name>
  102. <servlet-class>hr.fer.zemris.java.p11.servleti.PrviServlet</servlet-class>
  103. </servlet>
  104. <servlet-mapping>
  105. <servlet-name>servlet1</servlet-name>
  106. <url-pattern>/prvi</url-pattern>
  107. </servlet-mapping>
  108. ---------------------------------------------------------------------------------------
  109.  
  110. 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.
  111. 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.
  112.  
  113. Napraviti sada i sam servlet: hr.fer.zemris.java.p11.servleti.PrviServlet iz HttpServlet-a, i overrideati doGet:
  114.  
  115. PrintWriter writer = resp.getWriter();
  116. writer.println("<h1>Hello, World!</h1>");
  117.  
  118. ==========================================================
  119. Sekcija 3.1: Upogonjavanje naše prve aplikacije
  120. ==========================================================
  121.  
  122. Napravite build (maven package). U direktoriju target dobit ćete webapp1.war. Deploy uvijek radite na isti način:
  123. 1) ako je tomcat pokrenut, ugasite ga
  124. 2) iskopirajte webapp1.war u tomcatov webapps direktorij
  125. 3) ako imate greske u kodu, obrisite sve datoteke iz tomcatovog logs direktorija
  126. 4) pokrenite tomcat
  127. 5) ako ima gresaka, ugasite tomcat pa pogledajte log datoteke - tamo ce biti ispisan exception koji se dogodio
  128.  
  129. Pokušajte sada dohvatiti naš prvi servlet; staza je:
  130.  
  131. http://localhost:8080/webapp1/prvi
  132.  
  133. ==========================================================
  134. Sekcija 3.2: Sitno podešavanje
  135. ==========================================================
  136.  
  137. 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:
  138.  
  139. http://localhost:8080/webapp1
  140.  
  141. (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.
  142.  
  143. ==========================================================
  144. Sekcija 4: Tehnologija JSP
  145. ==========================================================
  146.  
  147. Dodati u Eclipse-u novu datoteku: src/main/webapp/datum.jsp
  148. ---------------------------------------------------------------------------------------
  149. <%@ page import="java.util.Date,java.util.Calendar" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  150. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  151. <!-- Primjer bloka u kojem možemo deklarirati funkcije -->
  152. <%!
  153. private void zapisiDatum(javax.servlet.jsp.JspWriter out, Date now) throws java.io.IOException {
  154. out.print(now);
  155. }
  156. %>
  157. <html>
  158. <body>
  159. <p>Pozdrav! Sada je:
  160. <%
  161. Date now = new Date();
  162. out.println(now);
  163. %>
  164. a to možemo napisati i ovako: <%= now %> i ovako <% zapisiDatum(out, now); %>.</p>
  165. <p>
  166. <% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {%>
  167. Good Morning
  168. <% } else { %>
  169. Good Afternoon
  170. <% } %>
  171. </p>
  172. <p>Ispis preko taga: <c:out value="abc" />, ispis preko EL-izraza: ${"abc"}.</p>
  173. <p><c:forEach var="brojac" begin="1" end="5">${brojac},</c:forEach></p>
  174. </body>
  175. </html>
  176. ---------------------------------------------------------------------------------------
  177.  
  178. EL-izrazi, poput ${brojac}, postojanje varijable tog imena traže u nizu mapa (kažemo "dosega"), prema sljedećem redosljedu:
  179. 1) page scope ("privremeni atributi koji se čuvaju u mapi same stranice")
  180. 2) request scope ("privremeni atributi koji se čuvaju u zahtjevu koji se trenutno obrađuje")
  181. 3) session scope ("permanentni atributi koji se čuvaju u korisnikovoj sjedničkoj mapi")
  182. 4) application scope ("atributi koji se čuvaju na razini čitave web-aplikacije")
  183.  
  184. Želimo li zabraniti interpretiranje EL-izraza u stranici, koristimo:
  185. <%@ page isELIgnored ="true" %>
  186.  
  187. Više o EL-u:
  188. http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
  189.  
  190. Možemo dohvaćati i parametre poslane kroz URL, npr. ${param.username} ili ekvivalentno ${param["username"]}.
  191.  
  192. 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.
  193. 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).
  194. <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:
  195.  
  196. <c:out value="<b>abc</b>" />
  197. <c:out value="<b>abc</b>" escapeXml="false" />
  198.  
  199. 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.
  200.  
  201. Evo još jednog primjera.
  202.  
  203. ---------------------------------------------------------------------------------------
  204. package hr.fer.zemris.web.demo;
  205.  
  206. public class StringInfo {
  207.  
  208. private String text;
  209.  
  210. public StringInfo() {
  211. }
  212.  
  213. public String getText() {
  214. return text;
  215. }
  216.  
  217. public void setText(String text) {
  218. this.text = text;
  219. }
  220.  
  221. public int getLength() {
  222. return text==null ? 0 : text.length();
  223. }
  224.  
  225. public String getCharAt(long index) {
  226. if(text==null || index<0 || index>=text.length()) return "";
  227. return String.valueOf(text.charAt((int)index));
  228. }
  229.  
  230. public StringInfo getReversed() {
  231. StringInfo rev = new StringInfo();
  232. if(text==null || text.isEmpty()) {
  233. rev.setText(text);
  234. } else {
  235. char[] arr = text.toCharArray();
  236. char[] arr2 = new char[arr.length];
  237. for(int i = 0; i < arr.length; i++) {
  238. arr2[arr.length-1-i] = arr[i];
  239. }
  240. rev.setText(new String(arr2));
  241. }
  242. return rev;
  243. }
  244. }
  245. ---------------------------------------------------------------------------------------
  246.  
  247. ---------------------------------------------------------------------------------------
  248. package hr.fer.zemris.web.demo;
  249.  
  250. // Ovo je Java-bean
  251. public class User {
  252.  
  253. private String lastName;
  254. private String firstName;
  255.  
  256. public User() {
  257. }
  258.  
  259. public User(String lastName, String firstName) {
  260. super();
  261. this.lastName = lastName;
  262. this.firstName = firstName;
  263. }
  264.  
  265. public String getLastName() {
  266. return lastName;
  267. }
  268.  
  269. public void setLastName(String lastName) {
  270. this.lastName = lastName;
  271. }
  272.  
  273. public String getFirstName() {
  274. return firstName;
  275. }
  276.  
  277. public void setFirstName(String firstName) {
  278. this.firstName = firstName;
  279. }
  280. }
  281. ---------------------------------------------------------------------------------------
  282.  
  283. ---------------------------------------------------------------------------------------
  284. package hr.fer.zemris.web.demo;
  285.  
  286. import java.io.IOException;
  287. import java.util.ArrayList;
  288. import java.util.HashMap;
  289. import java.util.List;
  290. import java.util.Map;
  291.  
  292. import javax.servlet.ServletException;
  293. import javax.servlet.annotation.WebServlet;
  294. import javax.servlet.http.HttpServlet;
  295. import javax.servlet.http.HttpServletRequest;
  296. import javax.servlet.http.HttpServletResponse;
  297.  
  298. @WebServlet(name="d1", urlPatterns={"/d1"})
  299. public class DemoServlet extends HttpServlet {
  300.  
  301. private static final long serialVersionUID = 1L;
  302.  
  303. @Override
  304. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  305. throws ServletException, IOException {
  306.  
  307. List<User> userList = new ArrayList<>();
  308. userList.add(new User("Žunić", "Žunko"));
  309. userList.add(new User("Šabić", "Šanko"));
  310. userList.add(new User("Ćinić", "Ćinko"));
  311.  
  312. req.setAttribute("userList", userList);
  313.  
  314. Map<String, User> map = new HashMap<String, User>();
  315. map.put("Odlikaš", userList.get(0));
  316. map.put("Tak-tak", userList.get(1));
  317. map.put("Ajme-meni", userList.get(2));
  318. req.setAttribute("primjerci", map);
  319.  
  320. req.getRequestDispatcher("/WEB-INF/pages/demo.jsp").forward(req, resp);
  321. }
  322.  
  323. }
  324. ---------------------------------------------------------------------------------------
  325.  
  326. ---------------------------------------------------------------------------------------
  327. <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  328. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  329.  
  330. <jsp:useBean id="si" class="hr.fer.zemris.web.demo.StringInfo" scope="request" />
  331. <jsp:setProperty property="text" name="si" value="Perica" />
  332. Radim s tekstom: <jsp:getProperty property="text" name="si"/> odnosno ${si.text}<br/>
  333. Duljina je: <jsp:getProperty property="length" name="si"/><br/>
  334. Prvi znak je: ${si.getCharAt(1)}<br/>
  335. Prvi znak reverznog niza je: ${si.reversed.getCharAt(1)}<br/>
  336.  
  337. <ol>
  338. <c:forEach var="u" items="${userList}">
  339. <li>${u.lastName}, ${u.firstName}</li>
  340. </c:forEach>
  341. </ol>
  342.  
  343. <ol>
  344. <c:forEach var="e" items="${primjerci}">
  345. <li>${e.key} ==&gt; ${e.value.lastName}, ${e.value.firstName}</li>
  346. </c:forEach>
  347. </ol>
  348.  
  349. Tko je Odlikaš? ${primjerci["Odlikaš"].lastName}
  350. ---------------------------------------------------------------------------------------
  351.  
  352. ==========================================================
  353. Sekcija 5: Anotacije, Filtri, Listeneri
  354. ==========================================================
  355.  
  356. Od Servlet specifikacije 3 više nije nužno sve navoditi u web.xml; moguće je koristiti i anotacije direktno u izvornom kodu.
  357. Primjer anotiranog servleta:
  358.  
  359. ---------------------------------------------------------------------------------------
  360. package hr.fer.zemris.java.p11.servleti;
  361.  
  362. import java.io.IOException;
  363.  
  364. import javax.servlet.ServletException;
  365. import javax.servlet.annotation.WebServlet;
  366. import javax.servlet.http.HttpServlet;
  367. import javax.servlet.http.HttpServletRequest;
  368. import javax.servlet.http.HttpServletResponse;
  369.  
  370. @WebServlet(name="S2",urlPatterns={"/dr","/drugi"})
  371. public class DrugiServlet extends HttpServlet {
  372.  
  373. private static final long serialVersionUID = 1L;
  374.  
  375. @Override
  376. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  377. throws ServletException, IOException {
  378. resp.setCharacterEncoding("UTF-8");
  379. resp.getWriter().print("<h1>Hello, World, drugi pokušaj!</h1>");
  380. }
  381.  
  382. }
  383. ---------------------------------------------------------------------------------------
  384.  
  385. Primjer anotiranog filtra:
  386.  
  387. ---------------------------------------------------------------------------------------
  388. package hr.fer.zemris.java.p11.servleti;
  389.  
  390. import java.io.IOException;
  391.  
  392. import javax.servlet.Filter;
  393. import javax.servlet.FilterChain;
  394. import javax.servlet.FilterConfig;
  395. import javax.servlet.ServletException;
  396. import javax.servlet.ServletRequest;
  397. import javax.servlet.ServletResponse;
  398. import javax.servlet.annotation.WebFilter;
  399.  
  400. @WebFilter("/dr")
  401. public class PrimjerFiltera implements Filter {
  402.  
  403. @Override
  404. public void init(FilterConfig filterConfig) throws ServletException {
  405. }
  406.  
  407. @Override
  408. public void doFilter(ServletRequest request, ServletResponse response,
  409. FilterChain chain) throws IOException, ServletException {
  410. System.out.println("Ušao sam u filter!");
  411. request.setCharacterEncoding("UTF-8");
  412. chain.doFilter(request, response);
  413. System.out.println("Izašao sam iz filtera!");
  414. }
  415.  
  416. @Override
  417. public void destroy() {
  418. }
  419.  
  420. }
  421. ---------------------------------------------------------------------------------------
  422.  
  423. Primjer anotiranog listenera:
  424.  
  425. ---------------------------------------------------------------------------------------
  426. package hr.fer.zemris.java.p11.servleti;
  427.  
  428. import javax.servlet.ServletContextEvent;
  429. import javax.servlet.ServletContextListener;
  430. import javax.servlet.annotation.WebListener;
  431.  
  432. @WebListener
  433. public class Informacije implements ServletContextListener {
  434.  
  435. @Override
  436. public void contextInitialized(ServletContextEvent sce) {
  437. System.out.println("Dojava da je aplikacija pokrenuta!");
  438. }
  439.  
  440. @Override
  441. public void contextDestroyed(ServletContextEvent sce) {
  442. System.out.println("Dojava da se aplikacija gasi!");
  443. }
  444.  
  445. }
  446. ---------------------------------------------------------------------------------------
  447.  
  448. ==========================================================
  449. Sekcija 6: Sigurnost
  450. ==========================================================
  451.  
  452. U tomcat/conf/tomcat-users.xml dodati:
  453.  
  454. <role rolename="administrator"/>
  455. <user username="a" password="123" roles="administrator"/>
  456.  
  457. Napraviti sigurni servlet:
  458.  
  459. ---------------------------------------------------------------------------------------
  460. package hr.fer.zemris.java.p11.servleti;
  461.  
  462. import java.io.IOException;
  463. import java.io.PrintWriter;
  464.  
  465. import javax.servlet.ServletException;
  466. import javax.servlet.http.HttpServlet;
  467. import javax.servlet.http.HttpServletRequest;
  468. import javax.servlet.http.HttpServletResponse;
  469.  
  470. public class SigurniServlet extends HttpServlet {
  471.  
  472. private static final long serialVersionUID = 1L;
  473.  
  474. @Override
  475. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  476. throws ServletException, IOException {
  477. PrintWriter writer = resp.getWriter();
  478. writer.println("<h1>Sigurnost na djelu!</h1>");
  479. writer.println("<p>Bok "+req.getRemoteUser()+"</b>");
  480. writer.println("<p>request.isUserInRole(\"ADM\")? "+req.isUserInRole("ADM")+"</b>");
  481. }
  482. }
  483. ---------------------------------------------------------------------------------------
  484.  
  485. Napravite WEB-INF/pages/prijava.jsp
  486. ---------------------------------------------------------------------------------------
  487. <form method="post" action="j_security_check">
  488. Ime: <input type="text" name="j_username"><br>
  489. Zaporka: <input type="text" name="j_password"><br>
  490. <input type="submit">
  491. </form>
  492. ---------------------------------------------------------------------------------------
  493.  
  494. Napravite WEB-INF/pages/pogreska.jsp
  495. ---------------------------------------------------------------------------------------
  496. Dogodila se pogreška.
  497. ---------------------------------------------------------------------------------------
  498.  
  499. Podesite web.xml
  500. ---------------------------------------------------------------------------------------
  501. <?xml version="1.0" encoding="UTF-8"?>
  502.  
  503. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  504. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  505. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  506. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  507. version="3.1"
  508. metadata-complete="false">
  509.  
  510. <display-name>Moja prva aplikacija</display-name>
  511. <description>
  512. Prva aplikacija
  513. </description>
  514.  
  515. <servlet>
  516. <servlet-name>servlet1</servlet-name>
  517. <servlet-class>hr.fer.zemris.java.p11.servleti.PrviServlet</servlet-class>
  518. </servlet>
  519. <servlet>
  520. <servlet-name>servlet3</servlet-name>
  521. <servlet-class>hr.fer.zemris.java.p11.servleti.SigurniServlet</servlet-class>
  522. <security-role-ref>
  523. <description>Može samo administrator</description>
  524. <role-name>ADM</role-name>
  525. <role-link>administrator</role-link>
  526. </security-role-ref>
  527. </servlet>
  528. <servlet-mapping>
  529. <servlet-name>servlet1</servlet-name>
  530. <url-pattern>/prvi</url-pattern>
  531. </servlet-mapping>
  532. <servlet-mapping>
  533. <servlet-name>servlet1</servlet-name>
  534. <url-pattern>/index.html</url-pattern>
  535. </servlet-mapping>
  536. <servlet-mapping>
  537. <servlet-name>servlet3</servlet-name>
  538. <url-pattern>/sig</url-pattern>
  539. </servlet-mapping>
  540.  
  541. <session-config>
  542. <session-timeout>15</session-timeout>
  543. </session-config>
  544.  
  545. <security-constraint>
  546. <web-resource-collection>
  547. <web-resource-name>Stranice za administraciju</web-resource-name>
  548. <url-pattern>/sig</url-pattern>
  549. <http-method>GET</http-method>
  550. <http-method>POST</http-method>
  551. </web-resource-collection>
  552. <auth-constraint>
  553. <role-name>administrator</role-name>
  554. </auth-constraint>
  555. </security-constraint>
  556.  
  557. <login-config>
  558. <auth-method>FORM</auth-method>
  559. <form-login-config>
  560. <form-login-page>/WEB-INF/pages/prijava.jsp</form-login-page>
  561. <form-error-page>/WEB-INF/pages/pogreska.jsp</form-error-page>
  562. </form-login-config>
  563. </login-config>
  564.  
  565. <security-role>
  566. <description>Administrator sustava</description>
  567. <role-name>administrator</role-name>
  568. </security-role>
  569.  
  570. </web-app>
  571. ---------------------------------------------------------------------------------------
  572.  
  573. Napomene:
  574.  
  575. 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
  576. 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
  577. deklaraciji pojedinih servleta mogu navesti takva mapiranja uporabom taga <security-role-ref> (vidi gore primjer).
  578.  
  579. ==========================================================
  580. Sekcija 7: Web i MVC
  581. ==========================================================
  582.  
  583. 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.
  584. Za prosljeđivanje koristiti req.getRequestDispatcher("/WEB-INF/pages/pogled.jsp").forward(req, resp);
  585. 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.
  586.  
  587. ==========================================================
  588. Sekcija 8: Dodatak
  589. ==========================================================
  590.  
  591. Directives
  592. Directive elements have a syntax of the form <%@ directive...%>.
  593.  
  594. Scripting Elements
  595.  
  596. EL expressions can be used in JSP standard and custom actions and template data. EL expressions use the syntax ${expr} and #{expr};
  597. For example:
  598. <mytag attr1="${bean.property}".../>
  599. ${map[entry]}
  600. <lib:myAction>${3+counter}</lib:myAction>
  601.  
  602. Chapter JSP.2, “Expression Language” provides more details on the EL.
  603. There are three language-based types of scripting elements: declarations,
  604. scriptlets, and expressions. Declarations follow the syntax <%! ... %>. Scriptlets
  605. follow the syntax <% ... %>. Expressions follow the syntax <%= ... %>.
  606.  
  607.  
  608. -------------------------------------------------------
  609. <% response.setContentType("....");
  610. whatever... %><?xml version=”1.0” ?>
  611. <%@ page buffer=”8kb” %>
  612. The rest of the document goes here
  613. -------------------------------------------------------
  614.  
  615. Implicitni objekti koji stoje na raspolaganju:
  616. * request: javax.servlet.ServletRequest ili podtip (npr. javax.servlet.HttpServletRequest)
  617. * response: javax.servlet.ServletResponse ili podtip (npr. javax.servlet.HttpServletResponse)
  618. * pageContext: javax.servlet.jsp.PageContext
  619. * session: javax.servlet.http.HttpSession
  620. * application: javax.servlet.ServletContext (getServletConfig().getContext())
  621. * out: javax.servlet.jsp.JspWriter, omata response.getWriter()
  622. * config: javax.servlet.ServletConfig
  623. * page: java.lang.Object (za JSP skriptu koja koristi jezik Javu je "page" sinonim za "this")
  624.  
  625. Ako je JSP stranica proglasena Error stranicom, još ima na raspolaganju objekt:
  626. * exception: java.lang.Throwable
  627.  
  628. Unutar JSP-a autorima je zabranjeno da ispisuju direktno na response.getWriter() ili response.getOutputStream().
  629.  
  630. Scope-ovi:
  631. * "page": vidljivo samo unutar te stranice; cim se posalje odgovore, reference se gube; objekti se pohranjuju u pageContext objekt
  632. * "request": vidljivo od trenutka stvaranja pa do kraja lanca obrade zahtjeva (ako jsp nesto npr. forwarda dalje); pohranjuje se u request objekt
  633. * "session": vidljivo od svih stranica koje sudjeluju u istoj sjednici; reference na pohranjene objekte se otpustaju kad sjednica zavrsi; pohranjuju se u session objekt
  634. * "application": vidljivo na razini web aplikacije; objekti se pohranjuju u application objektu (koji je zapravo ServletContext dobiven pri konfiguraciji servlet objekta)
  635.  
  636. Uključivanje sadržaja u JSP stranicu - dva načina:
  637. 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)
  638. 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