margus hanni, nortal as servlet, jsp 30.03.2015. millest räägime java web container servlet jsp

95
Margus Hanni, Nortal AS Servlet, JSP 30.03.2015

Upload: ashlynn-fowler

Post on 25-Dec-2015

241 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

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

JAVA

JAVA?

Page 5: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

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

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

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

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

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

Application structure

Page 13: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Java source files

Page 14: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Document root

Page 15: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

16

Static content

Page 16: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Configuration,executable code

Page 17: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Deployment descriptor

Page 18: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Compiled classes

Page 19: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Dependencies (JAR-s)

Page 20: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Application structure

Java Server Pages

Page 21: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

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

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

Servleti töö

Page 26: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

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

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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Request Headers: www.neti.ee

Page 46: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

Cookie: www.postimees.ee

Page 49: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

Response Headers: www.neti.ee

Page 52: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

Request <–> Response: www.neti.ee

Page 53: Margus Hanni, Nortal AS Servlet, JSP 30.03.2015. Millest räägime JAVA Web Container Servlet JSP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sources of wisdom

Tutorialhttp://docs.oracle.com/javaee/7/tutorial/http://www.coreservlets.com/java-8-tutorial/

APIhttp://docs.oracle.com/javaee/7/api/