objectives - washington and lee universitysprenkle/cs335/slides/04-servlets2.pdf1 objectives...

29
1 Objectives Review Servlets Deployment Configuration Sessions, Cookies Handling multiple requests Apr 29, 2019 Sprenkle - CS335 1 Servlets Review What application do we need to execute servlets? What class do all web servlets extend? What methods do servlets need to override to handle GET and POST requests? How do servlets send an HTML document/response to the client? How do servlets get data from the client? Put it all together: how do you create a dynamic web page, i.e., a web page that processes a request from a form? What tricks did you learn to help you with debugging? Apr 29, 2019 Sprenkle - CS335 2

Upload: others

Post on 10-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

1

Objectives• Review Servlets• Deployment• Configuration• Sessions, Cookies• Handling multiple requests

Apr 29, 2019 Sprenkle - CS335 1

Servlets Review• What application do we need to execute servlets?• What class do all web servlets extend?• What methods do servlets need to override to

handle GET and POST requests?• How do servlets send an HTML document/response

to the client?• How do servlets get data from the client?• Put it all together: how do you create a dynamic

web page, i.e., a web page that processes a request from a form?

• What tricks did you learn to help you with debugging?

Apr 29, 2019 Sprenkle - CS335 2

Page 2: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

2

Example Servlet Flow

Apr 29, 2019 Sprenkle - CS335 3

Server

WebApplication

Server

Client

HTTPRequest, data

Response

HTMLForm

HTMLDocument

WebBrowser

submit

doGet

Servlet Development Discussion• Distributed applications are difficult to debug

and testØMultiple components: Client code? Server code?

• SuggestionsØUse Eclipse to help you find errors in HTMLØCheck response’s HTML source code

• Shows you what was written to output• Location of error

ØUse Eclipse’s debugger

Apr 29, 2019 Sprenkle - CS335 4

ClientWeb App

Server

Page 3: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

3

More on Java-based Web Applications• Structure• Other classes• Initialization, customization• Synchronization

Apr 29, 2019 Sprenkle - CS335 5

Web App Directory Structure•projectname/

ØHTML, CSS, and JSP files

•projectname/WEB-INFØOther resources, e.g., web.xml

•projectname/WEB-INF/classesØ Servlet and utility (data structures, etc)ØWhy we put our servlets in servlets package

•projectname/WEB-INF/libØ Jar files that application depends on

Apr 29, 2019 Sprenkle - CS335 6

• Different from Eclipse code organization

• When Eclipse deploys the web application, it organizes it this way.

Page 4: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

4

Servlet Interface Methods• init(ServletConfig config)

ØWeb app server calls once to initialize the servletØTypically opening DB connection, files

• ServletConfig getServletConfig()ØReturns a reference to a ServletConfig

• void service(ServletRequest, ServletResponse)ØCalled to respond to a client request

• String getServletInfo()ØReturns a String that describes the servlet (name, version, etc.)

• void destroy()ØCalled by the server to terminate a servletØ Should close open files, close DB connections, etc.

Apr 29, 2019 Sprenkle - CS335 7

Servlet Life Cycle in Web Application Server

• Web application server creates one instance of servletØCalls init method of servlet created

• As requests come in, WAS calls service method of appropriate servletØ In turn, servlet calls appropriate doMethod

• When web application server shuts down, calls destroy method of each servlet

Apr 29, 2019 Sprenkle - CS335 8

Web Application Server

SurveyServlet

ParameterServlet

Page 5: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

5

Lab 4: Refactoring SurveyServlet• Currently: Inefficient implementation

ØRead, write survey data file every time request is executed

• In initØAutomatically called by server on start upØOpen file, read/initialize votes

• In destroyØAutomatically called by server ØWrite file

Apr 29, 2019 Sprenkle - CS335 9

Servlet Data• ServletConfig – initialization and startup

parameters for this servletØ Example methods:

• String getInitParameter(String name) • String getServletName()

•ServletContext – servlet container informationØExample methods:

• Object getAttribute(String name)• String getInitParameter(String name)

Apr 29, 2019 Sprenkle - CS335 10

Same method name, different context

Page 6: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

6

ServletContext• One ServletContext per

web application per JVMØ If you have both Lab3 and FirstServlets running on

Tomcat, they will each have their own ServletContext• Share state among multiple clients

Ø Allow multiple users to interact in, e.g., chat rooms, online meeting, reservation systems

• Info about servlet’s environmentØ E.g., server’s name

•log(): method to write to a log file• Context attributes

Ø getAttribute, setAttribute, removeAttribute

Apr 29, 2019 Sprenkle - CS335 11

web.xml File• Describes how to deploy the web application• XML file

ØUsed for dataØMarked up with elementsØ Same rules as XHTML: close most recently opened

tag, attributes in quotes• DTD: Document Type Definition

ØDefine elements that can be in a particular XML document

Ø Includes specification of attributes, nestingApr 29, 2019 Sprenkle - CS335 12

<tag attr="value">Content

</tag>

Page 7: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

7

Annotations• In Servlets 3.x, we can easily configure a web

application using annotationsØDon’t need to directly update web.xmlØProvide defaults, can be overridden in web.xml

• Example:

ØMeans the URL pattern “/SurveyServlet” maps to this servlet (servlets.SurveyServlet)

Apr 29, 2019 Sprenkle - CS335 13

@WebServlet("/SurveyServlet")public class SurveyServlet extends HttpServlet {

Apr 29, 2019 Sprenkle - CS335 14

Add initparameters

Page 8: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

8

Another Annotation Example

Apr 29, 2019 Sprenkle - CS335 15

@WebServlet(urlPatterns = { "/SurveyServlet" }, initParams = { @WebInitParam(name = "surveyFile",

value = "survey.dat")})

public class SurveyServlet extends HttpServlet {

Default valuesCan override these in the web.xml

Why would we want to be able to override these values in a separate (text) file?

Why web.xml overriding?• Can modify behavior of application without

modifying the Java code and recompilingØMay not have access to source code

Apr 29, 2019 Sprenkle - CS335 16

Page 9: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

9

web.xml File• Top-level: <webapp>•<servlet> element describes a servlet•<servlet-mapping> element maps URLs to

servletsØMay want to have shorthands, aliasesØRestrict users’ direct access to servlets

Apr 29, 2019 Sprenkle - CS335 17

web.xml File: Subelements of <servlet>

Apr 29, 2019 Sprenkle - CS335 18

<servlet-name> canonical name of the deployed servlet

<servlet-class> fully qualified class name of the servlet

<init-param> optional parameter containing a name-value pair that is passed to the servlet on initialization. Contains elements, <param-name> and <param-value>, which contain the name and value, respectively, to be passed to the servlet.

Page 10: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

10

Example of Configuring web.xml• Configure SurveyServlet to use a given file• Add the following to web.xml file:

• Note that <init-param> is a child of <servlet>, which means your web.xml file would look like what?

Apr 29, 2019 Sprenkle - CS335 19

<init-param><param-name>surveyFile</paramname><param-value>survey.dat</param-value>

</init-param>

Note about init-params in web.xml• If you set init-param in web.xml, you need to annotate the servlet with its name

• You can have multiple configurations for the same [servlet] classØUsing the name lets the application server know that

the annotations and the web.xml configurations are both part of the same configuration

Apr 29, 2019 Sprenkle - CS335 21

Page 11: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

11

Using Init Parameter• Configure SurveyServlet to use a given file

Ø Either in annotation or web.xml

• Modify init method to call HttpServlet’sgetInitParameter method

Apr 29, 2019 Sprenkle - CS335 22

// calls HttpServlet method, i.e., this’s methodfilename = getInitParameter("surveyFile");

// open file …

MAINTAINING STATE ACROSS REQUESTS

Apr 29, 2019 Sprenkle - CS335 23

Page 12: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

12

Maintaining State• If you have multiple pages, how can you save or

accumulate data?Ø Example scenario: buying a book

Apr 29, 2019 Sprenkle - CS335 24

LoginForm

WhichBook

CreditCard Verify

Server Server Server Server

D1D1

D1, D2D1, D2

D1, D2, D3

D1, D2, D3

D1, D2, D3, D4

Maintaining State• If you have multiple pages, how can you save or

accumulate data?ØHidden fields (type=hidden)ØCookiesØ Sessions

Apr 29, 2019 Sprenkle - CS335 25

LoginForm

WhichBook

CreditCard Verify

Server Server Server Server

D1D1

D1, D2D1, D2

D1, D2, D3

D1, D2, D3

D1, D2, D3, D4

Page 13: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

13

Hidden Fields

• Data is coming from client• Users can see the hidden fields

ØView HTML Source• Users can change the data

➨ Useful in limited situations

Apr 29, 2019 Sprenkle - CS335 26

<input type="hidden" name="userid" value="superfly"/>

COOKIES

Apr 29, 2019 Sprenkle - CS335 27

Page 14: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

14

Cookies• Cookies are initially sent from the webapp to the

client to store application-specific information on the client

• Part of an HTTP header in response to a clientØ Every HTTP transaction includes HTTP headersØNot part of the HTML content

• Client includes cookies in HTTP headers in subsequent requestsØProvides way to do behavior tracking

Apr 29, 2019 Sprenkle - CS335 28

Process with Cookies

• CookiesØ Associated with server nameØ Part of HTTP Headers

• Example: Amazon.comØ Cookie stores your name, login informationØ Example: Not Sara?

Apr 29, 2019 Sprenkle - CS335 29

Client Web AppServer

Web Browser

HTTP Request, Cookies

Response: Cookies HTML Document

Cookies

Page 15: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

15

Cookies in Java

• Cookies have a name and value • Create a Cookie object using its constructor

ØPart of javax.servlet.http.Cookie• Example: store a user’s preferred language on

the clientØApp only has to ask for this information once

Apr 29, 2019 Sprenkle - CS335 30

String cookie_name = "pref_language";String cookie_value = "English";Cookie new_cookie = new Cookie(cookie_name, cookie_value);

Sending the Cookie to the Client• HTTP header is sent first• Cookie(s) must be added to the response object

before you start writing to the client• Call addCookie() on HttpServletResponse

object before you call the getWriter() method• Inside of doGet or doPost method:

Apr 29, 2019 Sprenkle - CS335 31

Cookie c = new Cookie( "pref_language", "English" );c.setMaxAge(60*60*24*365); // max age of cookieresponse.addCookie(c);…output = response.getWriter();

Page 16: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

16

HttpServletResponse Method•void addCookie(Cookie)

ØAdd a Cookie to the header in the response to the client

ØThe cookie will be stored on the client, depending on the max-life and if the client allows cookies

Apr 29, 2019 Sprenkle - CS335 32

Cookies: Maximum Ages

• The maximum age of the cookie is how long the cookie can live on the client, in seconds

• When a cookie reaches its maximum age, client deletes it

• -1 means persists until browser exits

Apr 29, 2019 Sprenkle - CS335 33

c.setMaxAge(60*60*24*365); // max age of cookie

Page 17: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

17

Retrieving Cookies

• Call getCookies on HttpServletRequestobjectØReturns an array of Cookie objectsØRepresents all cookies that server previously sent to the

client

• For example, inside of doPost

Apr 29, 2019 Sprenkle - CS335 34

Cookie[] cookies = request.getCookies();

Voiding Cookies• May want to delete cookies when user logs out

Ø Especially for sensitive information

Apr 29, 2019 Sprenkle - CS335 35

// void cookie and send back to the useruserid_cookie.setMaxAge(0);response.addCookie(userid_cookie);

Page 18: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

18

Why Are They “Cookies”?• Http Cookie, Source: Wikipedia

Ø The term "cookie" derives from "magic cookie", which is a packet of data a program receives and sends out again unchanged.

• Magic Cookie, Source: Wikipedia Ø The name "cookie" comes from a comparison to an

unopened fortune cookie, because of the hidden information inside.

Apr 29, 2019 Sprenkle - CS335 36

What are challenges with using cookies?

Apr 29, 2019 Sprenkle - CS335 37

Page 19: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

19

What are challenges with using cookies?• They are saved on the client machine

ØClients can delete or modify them

• Increase the sizes of your network packetsØ Send cookies on each request

Apr 29, 2019 Sprenkle - CS335 38

Client Web AppServer

Web Browser

HTTP Request, Cookies

Response: Cookies HTML Document

Cookies

SESSION STATE

Apr 29, 2019 Sprenkle - CS335 39

Page 20: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

20

Session• One user’s visit to an application• Can be made up of many requests• Server maintains a session with a particular

clientØCan maintain state within that session

• Duration of a session:Ø If no requests from client for specified period of time

(the timeout), user’s session endsØ Timeout: typically 30 minutes

Apr 29, 2019 Sprenkle - CS335 40

Web Application

Server

Benefits of Using Session State• Simpler for developer• Reduces network traffic

ØDon’t need to keep passing data between client and server

Apr 29, 2019 Sprenkle - CS335 41

Server

WebApplication

Server

User A’s Session State

User B’s Session State

User C’s Session State

Page 21: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

21

Session State in Java•HttpSession stores session data• Data is known as session attributes

ØHave names and values• Store, access, and remove attributes:

Ø Like a HashMapØvoid setAttribute(String name, Object value)• Values no longer need to be strings• Cookies and Parameters had to be strings

ØObject getAttribute(String name)Øvoid removeAttribute(String name)

Apr 29, 2019 Sprenkle - CS335 42

Example Session Variables• User gives application data• Application stores data in session variable

Ø session.setAttribute("username", username);• Application can use later in session, without user having

to give information againØ String username = (String)

session.getAttribute("username");• More examples:

Ø Server computes information once, caches in sessionØ Shopping carts

Apr 29, 2019 Sprenkle - CS335 43

name value

Page 22: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

22

Getting a Session•HttpServletRequest’sgetSession(boolean create) methodØReturns the current HttpSession objectØBoolean parameter specifies if a new session should

be created if one does not already exist

Apr 29, 2019 Sprenkle - CS335 44

Other Useful Session Methods• setMaxInactiveInterval(), getCreationTime(), getLastAccessedTime()Ø If want shorter than server’s timeout

• invalidate()Ø Invalidates session, unbinds objects bound to it

Apr 29, 2019 Sprenkle - CS335 45

Page 23: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

23

Lab 4: Add Session Variable• LoginServlet will add a session variable with

name “authenticated”

Apr 29, 2019 Sprenkle - CS335 46

Eclipse Development Hints• Safe bet: restart server whenever change to a

servletØCan modify Server’s configuration

• Under Publishing

• Typical programmingØWrite a few lines of code/make small changesØRun, testØRepeat

Apr 29, 2019 Sprenkle - CS335 47

Page 24: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

24

HANDLING MULTIPLE REQUESTS

Apr 29, 2019 Sprenkle - CS335 48

Multiple Clients• Web server handles multiple requests at a time

by executing multiple threads

• Approximately 1 thread/request

⇒Need to make sure that threads overlap in ways that do not break the application

Apr 29, 2019 Sprenkle - CS335 49

Page 25: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

25

Example Scenario• Original SurveyServlet stores the results

of the survey in a file on the server• When >1 client connects to the server at one

time, server handles both clients concurrentlyØ >1 can execute SurveyServletØ >1 thread can read/modify file at one timeØCan lead to inconsistent data!

Apr 29, 2019 Sprenkle - CS335 50

SurveyServlet Implementation

• Operations can overlap

Apr 29, 2019 Sprenkle - CS335 51

SurveyServlet?animal=dog

SurveyServlet?animal=cat

Web Application Server

file

// read file// update local array// write file// print results

// read file// update local array// write file// print results

Page 26: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

26

Bad Interleaving

Apr 29, 2019 Sprenkle - CS335 52

// read file// update local array// read file// update local array// write file// print results// write file// print results

What happens in this case?

Loses blue’s vote

SurveyServlet?animal=dog

SurveyServlet?animal=cat

Web Application Server

file

Critical Section• Sections of code that have to happen

uninterrupted or atomicallyØOnly one thread can execute at a time

• What is the critical section in this code?

Apr 29, 2019 Sprenkle - CS335 53

// read file// update local array// write file// print results

Page 27: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

27

Critical Section• Sections of code that have to happen

uninterrupted or atomicallyØOnly one thread can execute at a time

• What is the critical section in this code?Ø The shared file must be read and written atomically

• Writes cause trouble

Apr 29, 2019 Sprenkle - CS335 54

// read file// update local array// write file// print results

210 in 335• Even if only one Java statement in critical

section, synchronize it!• One high-level Programming Language

statement probably translates into multiple VM language statementsØPrevent interruption at low level

Apr 29, 2019 Sprenkle - CS335 55

count++; Retrieve countAdd 1 to countStore count

High-level: Virtual Machine level:

Page 28: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

28

Synchronization Mechanisms• Synchronized classes• Synchronized methods• Synchronized statements

• Expense associated with each of theseØBut without it, get wrong or inconsistent answers!

• Alternative: database can handle synchronization on data for you

Apr 29, 2019 Sprenkle - CS335 56

Project Next Steps• Deadline: Tuesday at midnight• Static Mockups

ØDiscuss use casesØDiscuss any issues that aren’t clear/different visions

• Revise RequirementsØBased on feedback

• Set up project source code

Apr 29, 2019 Sprenkle - CS335 57

Page 29: Objectives - Washington and Lee Universitysprenkle/cs335/slides/04-servlets2.pdf1 Objectives •Review Servlets •Deployment •Configuration •Sessions, Cookies •Handling multiple

29

TODO• Lab 4: Servlet Configuration and Session State

ØCreate a GitHub account and email to meØ Init, destroy methodsØConfiguration parametersØ Session state

• Tomorrow: Static Mockups• Read/Summarize Quality Attributes paper by

Wed, midnightØ See Sakai description for details about contents

Apr 29, 2019 Sprenkle - CS335 58