Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.
-
Upload
ashlynn-fowler -
Category
Documents
-
view
234 -
download
2
Transcript of Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.
![Page 1: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/1.jpg)
Margus Hanni, Nortal AS
Servlet, JSP
30.03.2015
![Page 2: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/2.jpg)
Millest räägime
JAVA
Web ContainerServlet
JSP
![Page 3: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/3.jpg)
Hello World
#include <stdio.h> int main() { printf("Hello World\n"); return 0; }
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } }
<? echo '<p>Hello World</p>'; ?> <%= new String("Hello!") %>
1 2
3 4
![Page 4: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/4.jpg)
JAVA
JAVA?
![Page 5: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/5.jpg)
JAVA - primary goals
Five primary goals in the creation of the Java language:1. It should use the object-oriented programming methodology.
2. It should allow the same program to be executed on multiple operating systems.
3. It should contain built-in support for using computer networks.
4. It should be designed to execute code from remote sources securely.
5. It should be easy to use by selecting what was considered the good parts of other object-oriented languages.
http://www.freejavaguide.com/history.html
![Page 6: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/6.jpg)
JAVA EE (Enterprise Edition)
Kogum vahendeid (API) erinevate lahenduste loomiseks:
Veebi rakendused
Veebi teenused
Sõnumivahetus
Andmebaasid
…
http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
![Page 7: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/7.jpg)
API - application programming interface
Is a set of routines, protocols and tools for building software applications.
Specifies „ground rules“
Specifies how software components should interact with each ohter
A good API makes it easier to develop a program by providing all the building blocks. A programmer then puts the blocks together
http://en.wikipedia.org/wiki/Application_programming_interface
![Page 8: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/8.jpg)
JAVA EE
Kogum vahendeid erinevate lahenduste loomiseks:
Veebi rakendused
Veebi teenused
Sõnumivahetus
Andmebaasis
…
http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
Web ContainerServletJSP
![Page 9: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/9.jpg)
Web Container
Manages componentlife cycles
Routes requests toapplications
Accepts requests, sends responses
http://tutorials.jenkov.com/java-servlets/overview.html
![Page 10: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/10.jpg)
Web Containers
Apache Tomcat
JBoss
WebLogic
Jetty
Glassfish
Websphere
…
![Page 11: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/11.jpg)
Web Containers
Multiple applicationsinside one container
http://tutorials.jenkov.com/java-servlets/overview.html
![Page 12: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/12.jpg)
Application structure
![Page 13: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/13.jpg)
Application structure
Java source files
![Page 14: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/14.jpg)
Application structure
Document root
![Page 15: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/15.jpg)
Application structure
16
Static content
![Page 16: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/16.jpg)
Application structure
Configuration,executable code
![Page 17: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/17.jpg)
Application structure
Deployment descriptor
![Page 18: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/18.jpg)
Application structure
Compiled classes
![Page 19: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/19.jpg)
Application structure
Dependencies (JAR-s)
![Page 20: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/20.jpg)
Application structure
Java Server Pages
![Page 21: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/21.jpg)
Deployment descriptor (web.xml)Instructs the container how to deal with this application<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0">
<welcome-file-list><welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
![Page 22: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/22.jpg)
Deployment descriptor (web.xml)In Servlet API version 3.0 most components of web.xml are replaced by annotations that go directly to Java source code.
We will see examples later
![Page 23: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/23.jpg)
Servlets
On JAVA klass, mis töötleb sissetulevat päringut ning tagastab vastuse
Enamasti kasutatakse HTTP päringu töötlemiseks ja tulemuse saatmiseks
Servletid töötavad veebikonteineris, mis hoolitseb nende elutsükli ning päringute suunamise eest
javax.servlet.http.HttpServlet – abstraktne klass, mis sisaldab meetodeid doXXX HTTP päringute töötlemiseks
![Page 24: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/24.jpg)
Servlet examplepublic class HelloServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter writer = resp.getWriter(); writer.println("<html><head><title>Hello</title></head><body>"); writer.println("<p>Hello World!</p>"); writer.println("<p>Current time: " + new Date() + "</p>"); writer.println("</body></html>"); }}
Mis on tulemuseks?
![Page 25: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/25.jpg)
Servleti töö
![Page 26: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/26.jpg)
HttpServlet methods
For each HTTP method there is corresponding HttpServlet method
doPostdoGetdoPut
…
![Page 27: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/27.jpg)
Servlet Mapping
Before Servlet 3.0 in web.xml<servlet>
<servlet-name>hello</servlet-name><servlet-class>example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern>
</servlet-mapping>
Example
![Page 28: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/28.jpg)
Servlet Mapping
In Servlet 3.0 via annotation
@WebServlet("/hello")public class HelloServlet extends HttpServlet {...
![Page 29: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/29.jpg)
Servlet life cycle
http://tutorials.jenkov.com/java-servlets/servlet-life-cycle.html
![Page 30: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/30.jpg)
Üldine servleti elutsükkel
Kui veebikonteineris puudub Servleti instants
Laetakse Servleti klass
Luuakse isend
Initsialiseeritakse (init meetod)
Iga päringu jaoks kutsutakse välja service meetod.
Servleti kustutamisel kutsutakse välja destroy meetod
Kus on päringumeetodid?
![Page 31: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/31.jpg)
Sessions
HTTP is a stateless protocol, but we often need the server to remember us between requests.
There are some ways: Cookies URL rewriting
![Page 32: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/32.jpg)
Java HttpSession
HttpSession is a common interface for accessing session context
Actual implementation is provided by a Web Container
![Page 33: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/33.jpg)
Java HttpSession
http://java.sun.com/developer/onlineTraining/JSPIntro/contents.html
![Page 34: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/34.jpg)
HttpSession example
HttpSession session = req.getSession();int visit;if (session.isNew()) {
visit = 0;} else {
visit = (Integer) session.getAttribute("visit");}session.setAttribute("visit", ++visit);
![Page 35: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/35.jpg)
HttpSession example
HttpSession session = req.getSession();int visit;if (session.isNew()) {
visit = 0;} else {
visit = (Integer) session.getAttribute("visit");}session.setAttribute("visit", ++visit);
Either create a new session or get existing
![Page 36: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/36.jpg)
HttpSession example
HttpSession session = req.getSession();int visit;if (session.isNew()) {
visit = 0;} else {
visit = (Integer) session.getAttribute("visit");}session.setAttribute("visit", ++visit);
Check if the session is fresh or not
![Page 37: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/37.jpg)
HttpSession example
HttpSession session = req.getSession();int visit;if (session.isNew()) {
visit = 0;} else {
visit = (Integer) session.getAttribute("visit");}session.setAttribute("visit", ++visit);
Retrieve attribute
![Page 38: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/38.jpg)
HttpSession example
HttpSession session = req.getSession();int visit;if (session.isNew()) {
visit = 0;} else {
visit = (Integer) session.getAttribute("visit");}session.setAttribute("visit", ++visit);
Update attribute
![Page 39: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/39.jpg)
HttpServletRequest - Attribute
Contains request informationAlso can be used to store attributes
request.setAttribute(“key", value);request.getAttribute(“key”);
![Page 40: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/40.jpg)
HttpServletRequest: Parameter
request.getParameterNames();Enumeration<String>
String value = request.getParameter("name");
![Page 41: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/41.jpg)
HttpServletRequest: Parameter vs Attribute
Object value = request.getAttribute(“key”);
String value = request.getParameter("name");
![Page 42: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/42.jpg)
HttpServletRequest: meta data
request.getMethod();“GET”, “POST”, …
request.getRemoteAddr();Remote client’s IP
request.getServletPath();“/path/to/servlet”
…
![Page 43: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/43.jpg)
HttpServletRequest: headers
request.getHeaderNames();Enumeration<String>
request.getHeader("User-Agent");
“Mozilla/5.0 (X11; Linux x86_64) …”
![Page 44: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/44.jpg)
Request Headers
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encoding gzip, deflateAccept-Language et,et-ee;q=0.8,en-us;q=0.5,en;q=0.3Connection keep-alive
CookieJSESSIONID=C687CC4E2B25B8A27DAB4A5F30980583; __utma=111872281.1173964669.1316410792.1318315398.1338294258.52; oracle.uix=0^^GMT+3:00^p
Host localhost:8080
User-AgentMozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
![Page 45: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/45.jpg)
Request Headers: www.neti.ee
![Page 46: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/46.jpg)
Cookie
Small piece of information (some ID, parameter, preference etc..)
Stored in browser
Usually sent by a server
Client sends only name-value pairJSESSIONID = C687CC4E2B25B8A27DAB4A5F3098058
language=en
Cookie parameters:Name
Value
Expires
Path
Domain
Security (can be sent over ssh only)
HttpOnly
![Page 47: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/47.jpg)
HttpServletRequest: cookies
Cookie[] cookies = request.getCookies();
cookie.getName();cookie.getValue();cookie.setValue(“new value”);
![Page 48: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/48.jpg)
Cookie: www.postimees.ee
![Page 49: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/49.jpg)
HttpServletResponse
Allows to set response information
response.setHeader("Content-Type", "text/html");
response.addCookie(new Cookie("name", "value"));
![Page 50: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/50.jpg)
Response Headers
Content-Language etContent-Type text/html;charset=UTF-8Date Mon, 11 Mar 2013 06:48:54 GMTServer Apache-Coyote/1.1Transfer-Encoding chunked
![Page 51: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/51.jpg)
Response Headers: www.neti.ee
![Page 52: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/52.jpg)
Request <–> Response: www.neti.ee
![Page 53: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/53.jpg)
HttpServletResponse: content
response.getWriter().println("...");
Write text
response.getOutputStream().write(...);
Write binary
![Page 54: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/54.jpg)
Problem with servlets
Writing HTML in Java is hideousPrintWriter writer = resp.getWriter();writer.println("<html><head><title>Hello</title></head><body>");writer.println("<p>Hello World!</p>");writer.println("<p>Current time: " + new Date() + "</p>");writer.println("</body></html>");
![Page 55: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/55.jpg)
Java Server Pages (JSP)
Write HTMLstandard markup language
Add dynamic scripting elements
Add Java code
![Page 56: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/56.jpg)
JSP example
war/WEB-INF/jsp/hello.jsp
<%@page import="java.util.Date"%>
<html><head><title>Hello</title></head><body>
<p>Hello World!</p><p>Current time: <%= new Date() %></p>
</body></html>
![Page 57: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/57.jpg)
JSP mapping
In web.xml<servlet>
<servlet-name>hello2</servlet-name><jsp-file>/WEB-INF/jsp/hello.jsp</jsp-file>
</servlet>
<servlet-mapping><servlet-name>hello2</servlet-name><url-pattern>/hello2</url-pattern>
</servlet-mapping>
![Page 58: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/58.jpg)
JSP life cycle
http://www.jeggu.com/2010/10/jsp-life-cycle.htmlhttp://www.tutorialspoint.com/jsp/jsp_life_cycle.htm
![Page 59: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/59.jpg)
package org.apache.jsp.WEB_002dINF.jsp.document;
import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import java.util.Date;
public final class testdokument_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {
private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; }
public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); }
public void _jspDestroy() { }
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null;
try { response.setContentType("text/html; charset=UTF-8"); 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("\r\n"); out.write("\r\n"); out.write("<p>Current time: "); out.print( new Date() ); out.write("</p>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }}
![Page 60: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/60.jpg)
Dynamic content
Expression<p>Current time: <%= new Date() %></p>
Scriptlet<p>Current time: <% out.println(new Date()); %></p>
![Page 61: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/61.jpg)
Dynamic content
Declaration<%!
private Date currentDate(){return new Date();
} %>
<p>Current time: <%= currentDate() %></p>
![Page 62: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/62.jpg)
JSP Eeldefineeritud muutujad
request- HttpServletRequest
response – HttpServletResponse
out – Writer
session – HttpSession
application – ServletContext
pageContext – PageContext
![Page 63: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/63.jpg)
JSP Märgendid
jsp:include Veebipäring antakse ajutiselt üle teisele JSP lehele.
jsp:forward Veebpäring antakse jäädavalt üle teisele JSP lehele.
jsp:getProperty Loeb JavaBeani muutuja väärtuse.
jsp:setProperty Määrab JavaBeani muutuja väärtuse.
jsp:useBean Loob uue või taaskasutab JSP lehele kättesaadavat JavaBeani.
![Page 64: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/64.jpg)
Expression Language (EL)
Easy way to access JavaBeans in different scopes
Rea summa: ${rida.summa * rida.kogus}
![Page 65: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/65.jpg)
Basic Operators in ELOperator Description
. Access a bean property or Map entry
[] Access an array or List element
( ) Group a subexpression to change the evaluation order
+ Addition
- Subtraction or negation of a value
* Multiplication
/ or div Division
% or mod Modulo (remainder)
== or eq Test for equality
!= or ne Test for inequality
< or lt Test for less than
> or gt Test for greater than
<= or le Test for less than or equal
>= or gt Test for greater than or equal
&& or and Test for logical AND
|| or or Test for logical OR
! or not Unary Boolean complement
empty Test for empty variable values
http://www.tutorialspoint.com/jsp/jsp_expression_language.htm
![Page 66: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/66.jpg)
Scopes
Many objects allow you to store attributes
ServletRequest.setAttribute
HttpSession.setAttribute
ServletContext.setAttribute
![Page 67: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/67.jpg)
Andmete skoobid
ServletContext – veebikontekst, üks ühe rakenduse ja JVM-i kohta
Sessioon – üks iga kasutajasessiooni kohta (erinev lehitseja = erinev sessioon)
Request – konkreetse päringu skoop
Andmete kirjutamiseks/lugemiseks on meetodid setAttribute/getAttribute
![Page 68: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/68.jpg)
Scopes
http://java.sun.com/developer/onlineTraining/JSPIntro/contents.html
![Page 69: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/69.jpg)
Scopes
<% application.setAttribute("subject", "Web information systems");session.setAttribute("topic", "Servlets");request.setAttribute("lector", "Roman");pageContext.setAttribute("lector", "Roman");%>
Subject: ${subject}Topic: ${topic}Lector: ${lector}
Väljund: Subject: Web information systems Topic: Servlets Lector: Roman
![Page 70: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/70.jpg)
Scopes
<% application.setAttribute("subject", "Web information systems");session.setAttribute("topic", "Servlets");request.setAttribute("lector", "Roman");pageContext.setAttribute("lector", "Roman");pageContext.setAttribute("subject", "Meie uus teema");application.setAttribute("subject", "Meie järgmine teema");%>
Subject: ${subject}Topic: ${topic}Lector: ${lector}
Mis on väljundiks?
![Page 71: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/71.jpg)
Scopes
<% application.setAttribute("subject", "Web information systems");session.setAttribute("topic", "Servlets");request.setAttribute("lector", "Roman");pageContext.setAttribute("lector", "Roman");pageContext.setAttribute("subject", "Meie uus teema");application.setAttribute("subject", "Meie järgmine teema");%>
Subject: ${subject}Topic: ${topic}Lector: ${lector}
Subject: Meie uus teema Topic: Servlets Lector: Roman
![Page 72: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/72.jpg)
Scopes
<% application.setAttribute("subject", "Web information systems");session.setAttribute("topic", "Servlets");request.setAttribute("lector", "Roman");pageContext.setAttribute("lector", "Roman");%>
Subject: ${subject}Topic: ${topic}Lector: ${lector}
Less visible
![Page 73: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/73.jpg)
JavaBeans
public class Person implements Serializable {
private String name;
public Person() {}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}}
Implements Serializable
Public default constructor
getX and setX methods for each property X
![Page 74: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/74.jpg)
JavaBeans in EL
Person person = new Person();person.setName("Roman");request.setAttribute("person", person);
<p>Person: ${person.name}</p>
![Page 75: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/75.jpg)
Java Standard Tag Library (JSTL)Set of standard tools for JSP<%List<String> lectors = Arrays.asList("Siim", "Roman", "Margus");pageContext.setAttribute("lectors", lectors);%>
<c:set var="guestLector" value="Margus" />
<c:forEach var="lector" items="${lectors}">Name: ${lector}<c:if test="${lector eq guestLector}“>(guest)</c:if><br />
</c:forEach>
![Page 76: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/76.jpg)
Problem with JSP
Writing Java in JSP is hideous
<p>Current time: <%= currentDate() %></p>
Example
![Page 77: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/77.jpg)
Servlet + JSP
JSP on puhtam
Kihid on eraldatud
Korduvkasutatavus
Kuid kas saab paremini?
![Page 78: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/78.jpg)
Model-View-Controller (MVC)
http://java.sun.com/blueprints/patterns/MVC-detailed.html
![Page 79: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/79.jpg)
Servlet controller, JSP view
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("currentDate", new Date());
req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req, resp);}
Model data
Controller gets invoked
![Page 80: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/80.jpg)
Servlet controller, JSP view
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("currentDate", new Date());
req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req, resp);}
Select and invoke view
Controller gets invoked
![Page 81: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/81.jpg)
Servlet controller, JSP view
WEB-INF/jsp/hello.jsp
<html>...
<body><p>Current time: $
{currentDate}</p></body>
</html>View uses thedata from model
![Page 82: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/82.jpg)
Filters
Allows you to do something before, after or instead of servlet invocation.
http://docs.oracle.com/javaee/5/tutorial/doc/bnagb.html
Filter chain
![Page 83: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/83.jpg)
Filter example
public class LoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long start = System.currentTimeMillis();
chain.doFilter(request, response);
long end = System.currentTimeMillis(); System.out.println("Time spent: " + (end - start)); }}
![Page 84: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/84.jpg)
Filter example
public class LoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
long start = System.currentTimeMillis();
chain.doFilter(request, response);
long end = System.currentTimeMillis(); System.out.println("Time spent: " + (end - start)); }}
Invoke next filter inchain or the servletif this was the last filter
![Page 85: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/85.jpg)
Filter declaration
Before Servlet 3.0 in web.xml
<filter><filter-name>loggingFilter</filter-name><filter-class>example.LoggingFilter</filter-
class></filter>
<filter-mapping><filter-name>hello</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
![Page 86: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/86.jpg)
Filter declaration
In Servlet 3.0 via annotation
@WebFilter("/*")public class LoggingFilter implements Filter {...
![Page 87: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/87.jpg)
Life cycle event listeners
javax.servlet.ServletContextListenerjavax.servlet.ServletContextAttributeListenerjavax.servlet.ServletRequestListenerjavax.servlet.ServletRequestAttributeListenerjavax.servlet.http.HttpSessionListenerjavax.servlet.http.HttpSessionAttributeListener
![Page 88: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/88.jpg)
Listener example
public class LoggingRequestListener implements ServletRequestListener {
@Overridepublic void requestInitialized(ServletRequestEvent event) { System.out.println("Received request from " + event.getServletRequest().getRemoteAddr());}
@Override public void requestDestroyed(ServletRequestEvent event) {}
}
![Page 89: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/89.jpg)
Listener declaration
Before Servlet 3.0 in web.xml
<listener><listener-class>example.LoggingRequestListener</listener-class>
</listener>
![Page 90: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/90.jpg)
Listener declaration
In Servlet 3.0 via annotation
@WebListenerpublic class LoggingRequestListener implements ServletRequestListener {...
![Page 91: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/91.jpg)
Should I bother?
• There are a lot of fancy Java web frameworks that simplify application building.
• Should I still learn these basic technologies, will I ever use them?
![Page 92: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/92.jpg)
Should I bother?
• You are still going to deploy your application to a web container.
• Most traditional frameworks use JSP as the view technology.
![Page 93: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/93.jpg)
Should I bother?
http://en.wikipedia.org/wiki/Java_servlet
![Page 94: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/94.jpg)
What about servlets?
• Most frameworks are based on the Servlet API• You will probably still encounter things like
HttpSession, HttpServletRequest etc inside your code.
• You might want to write filters and listeners.• You probably won’t write much servlets. But
sometimes they can still be handy for simple tasks.
• AngularJS and REST (Representational State Transfer)
![Page 95: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP.](https://reader035.fdocuments.us/reader035/viewer/2022062407/56649e025503460f94aed9a8/html5/thumbnails/95.jpg)
Sources of wisdom
Tutorialhttp://docs.oracle.com/javaee/7/tutorial/http://www.coreservlets.com/java-8-tutorial/
APIhttp://docs.oracle.com/javaee/7/api/