Top Banner
Mark Dixon 1 09 – Java Servlets
23

Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Jan 02, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 1

09 – Java Servlets

Page 2: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 2

Session Aims & Objectives• Aims

– To cover a range of web-application design techniques

• Objectives,by end of this week’s sessions, you should be able to:

– create a servlet– use a class to gather code common to different

pages

Page 3: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 3

• most application programs – 3 major layers– Top (Presentation) layer:

• human/machine interaction (the user interface)– input from the keyboard / mouse– output in the form of screen displays / sound

– Middle (Application or business logic) layer:• core functionality – gives application program its character• contains business rules -> drive an organisation• e.g. order entry system vs. inventory control system

– Bottom layer• general services needed by other layers• e.g. file, print, communications, and database services

3

Application Layers

Page 4: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 4

2-Tier Architecture• Presentation and Application layer

located on client machine– could be implemented using Applet interacting server

• Known as a ‘fat client’

Tier 1

Server

Presentation layerApplication layer

Client

Database server

Tier 2

Server

Page 5: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 5

3-Tier Architecture• 3-tier architecture,

– only presentation layer on client– application layer on server – Database on server or third machine

• Known as a ‘thin-client’– very little (application) code / processing on client

• e.g. use of Java Servlets (JSP pages)

T ier 1

Presentation layer

Client

T ier 3

Database server

Application layer

T ier 2

Server

Page 6: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 6

Example: AddNum (JSP)<%@page contentType="text/html" pageEncoding="UTF-8"%><%double N1;double N2;String Res = ""; if (request.getParameter("btnAdd") != null){ N1 = Double.parseDouble(request.getParameter("txtN1")); N2 = Double.parseDouble(request.getParameter("txtN2")); Res = Double.toString(N1 + N2); }%><!DOCTYPE html><html> <head><title>Add Numbers</title></head> <body> <form method="post"> <input name="txtN1" type="text" /><br /> <input name="txtN2" type="text" /><br /> <input name="btnAdd" type="submit" value="Add" /> <p><%=Res%></p> </form> </body></html>

AddNum.jsp

Java - functionality

HTML – user interface

Page 7: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 7

JSP pages & Servlets• all JSP pages converted to servlet

• Servlet– Java program running in web server– Special type of Java class (.java file)

• Can get servlet error– caused by error in JSP page (usually missing } ), but difficult to see the connection

Page 8: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 8

AddNum: .html file• Split

– User interface (html)– Functionality (Java)

<!DOCTYPE html><html> <head><title>Add Numbers</title></head> <body> <form method="post" action="AddNum"> <input name="txtN1" type="text" /><br /> <input name="txtN2" type="text" /><br /> <input name="btnAdd" type="submit" value="Add" /> </form> </body></html>

Points to Servlet (AddNum.java)

Page 9: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 9

AddNum: .java fileimport java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

public class AddNum extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { double N1; double N2; String Res = ""; response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { N1 = Double.parseDouble(request.getParameter("txtN1")); N2 = Double.parseDouble(request.getParameter("txtN2")); Res = Double.toString(N1 + N2); out.println("<html>"); out.println("<head>"); out.println("<title>Add Numbers</title>"); out.println("</head>"); out.println("<body>"); out.println(Res); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }

@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }

@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }

@Override public String getServletInfo() { return "Short description"; }}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { double N1; double N2; String Res = ""; response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { N1 = Double.parseDouble(request.getParameter("txtN1")); N2 = Double.parseDouble(request.getParameter("txtN2")); Res = Double.toString(N1 + N2); out.println("<html>"); out.println("<head>"); out.println("<title>Add Numbers</title>"); out.println("</head>"); out.println("<body>"); out.println(Res); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }

Calculationcode

Also, write (all) html

Page 10: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 10

Example: PeopleList.jsp v2<%@page import="java.sql.*"%><%@page contentType="text/html"%><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM Person;");String html = "";String id; while(r.next()){ id = Integer.toString(r.getInt("PersonID")); html += "<a href='Person2.jsp?id=" + id + "'>"; html += r.getString("Surname") + "</a><br />"; } cn.close();%><!DOCTYPE html><html> <head><title></title></head> <body> <%=html%> </body></html>

Connect to db

Page 11: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 11

Example: Person.jsp v2<%@page import="java.sql.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%String id = request.getParameter("id");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM Person WHERE PersonID = " + id + ";");String surname = ""; if(r.next()){ surname = r.getString("Surname"); } cn.close();%><!DOCTYPE html><html> <head><title>Person</title></head> <body> Surname: <input name="txtSurname" type="text" value="<%=surname%>" /> </body></html>

Connect to DB

Page 12: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 12

Person & PeoplList v2

• both JSP page duplicate common code

<%@page import="java.sql.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%String id = request.getParameter("id");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM Person WHERE PersonID = " + id + ";");String surname = ""; if(r.next()){ surname = r.getString("Surname"); } cn.close();%><!DOCTYPE html><html> <head><title>Person</title></head> <body> Surname: <input name="txtSurname" type="text" value="<%=surname%>" /> </body></html>

<%@page import="java.sql.*"%><%@page contentType="text/html"%><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement();ResultSet r = st.executeQuery("SELECT * FROM Person;");String html = "";String id; while(r.next()){ id = Integer.toString(r.getInt("PersonID")); html += "<a href='Person2.jsp?id=" + id + "'>"; html += r.getString("Surname") + "</a><br />"; } cn.close();%><!DOCTYPE html><html> <head><title></title></head> <body> <%=html%> </body></html>

Page 13: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 13

Class People• Contains common code for both pages

Peoplecnstr

OpenSelectClose

Page 14: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 14

Class: People.java 1• Common code

package Main;import java.sql.*;

public class People{private Connection cn;private Statement st;private ResultSet r;

public void Open(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", ""); } catch (Exception e){ //e.printStackTrace(); } }

public void Select(String sql){ try{ st = cn.createStatement(); r = st.executeQuery(sql); } catch (Exception e){ //e.printStackTrace(); } }

public boolean Next(){ boolean found = false; try{ found = r.next(); } catch (Exception e){ //e.printStackTrace(); } return found; }

public String get(String id){ String s = ""; try{ s = r.getString(id); } catch (Exception e){ //e.printStackTrace(); } return s; }

public void Close(){ try{ cn.close(); } catch (Exception e){ //e.printStackTrace(); } }}

package Main;import java.sql.*;

public class People{private Connection cn;private Statement st;private ResultSet r;

public void Open(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", ""); } catch (Exception e){ //e.printStackTrace(); } }

public void Select(String sql){ try{ st = cn.createStatement(); r = st.executeQuery(sql); } catch (Exception e){ //e.printStackTrace(); } }

Page 15: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 15

Class: People.java 2• Common code

package Main;import java.sql.*;

public class People{private Connection cn;private Statement st;private ResultSet r;

public void Open(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", ""); } catch (Exception e){ //e.printStackTrace(); } }

public void Select(String sql){ try{ st = cn.createStatement(); r = st.executeQuery(sql); } catch (Exception e){ //e.printStackTrace(); } }

public boolean Next(){ boolean found = false; try{ found = r.next(); } catch (Exception e){ //e.printStackTrace(); } return found; }

public String get(String id){ String s = ""; try{ s = r.getString(id); } catch (Exception e){ //e.printStackTrace(); } return s; }

public void Close(){ try{ cn.close(); } catch (Exception e){ //e.printStackTrace(); } }}

public boolean Next(){ boolean found = false; try{ found = r.next(); } catch (Exception e){ //e.printStackTrace(); } return found; }

public String get(String id){ String s = ""; try{ s = r.getString(id); } catch (Exception e){ //e.printStackTrace(); } return s; }

public void Close(){ try{ cn.close(); } catch (Exception e){ //e.printStackTrace(); } }}

Page 16: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 16

PersonList.jsp

• Class complex

• Pages simpler

<%@page import="Main.*" %><%@page contentType="text/html" pageEncoding="UTF-8"%><%!People p = new People();%><%String html = ""; p.Open(); p.Select("SELECT * FROM Person;"); while(p.Next()){ html += p.get("Surname") + "<br />"; } p.Close();%>

<!DOCTYPE html><html> <head><title>People</title></head> <body> <%=html%> </body></html>

Import Package

Use methods

Create Instance

Page 17: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 17

Example: Person v3 (Specification)

• User requirement:Display person’s details from database online

– Change surname and save to database

Page 18: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 18

• modify data in one or more rows,matching specified condition(s)

• General SQL format:UPDATE Table

SET ColumnName1 = Value1, ColumnName2 = Value2, …WHERE ColumnNameA = ValueAAND ColumnNameB = ValueB …

Example: UPDATE Book

SET price = '45.00', title = 'Core Web' , price = ’50.00’ WHERE isbn = '0130897930' 18

SQL UPDATE Statement

Page 19: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 19

SQL INSERT & DELETE• INSERT – adds new record

• DELETE – deletes specified records

Page 20: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 20

Example: Person.jsp v3<%@page import="java.sql.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%String id = request.getParameter("id");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement(); if(request.getParameter("btnSave") != null){ String surname = request.getParameter("txtSurname"); String sql = "UPDATE Person" + " SET surname = '" + surname + "'" + " WHERE PersonID = " + id + ";"; st.executeUpdate(sql); }ResultSet r = st.executeQuery("SELECT * FROM Person WHERE PersonID = " + id + ";");String surname = ""; if(r.next()){ surname = r.getString("Surname"); } cn.close();%><!DOCTYPE html><html> <head><title>Person</title></head> <body> <form action="" method="post"> Surname: <input name="txtSurname" type="text" value="<%=surname%>" /><br> <input name="btnSave" type="submit" value="Save" /> </form> </body></html>

Save button works now

Page 21: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 21

Example: Person.jsp v3<%@page import="java.sql.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%String id = request.getParameter("id");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection("jdbc:odbc:PeopleDB", "", "");Statement st = cn.createStatement(); if(request.getParameter("btnSave") != null){ String surname = request.getParameter("txtSurname"); String sql = "UPDATE Person" + " SET surname = '" + surname + "'" + " WHERE PersonID = " + id + ";"; st.executeUpdate(sql); }ResultSet r = st.executeQuery("SELECT * FROM Person WHERE PersonID = " + id + ";");String surname = ""; if(r.next()){ surname = r.getString("Surname"); } cn.close();%><!DOCTYPE html><html> <head><title>Person</title></head> <body> <form action="" method="post"> Surname: <input name="txtSurname" type="text" value="<%=surname%>" /><br> <input name="btnSave" type="submit" value="Save" /> </form> </body></html>

if(request.getParameter("btnSave") != null){ String surname = request.getParameter("txtSurname"); String sql = "UPDATE Person" + " SET surname = '" + surname + "'" + " WHERE PersonID = " + id + ";"; st.executeUpdate(sql); }

Page 22: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 22

Tutorial Exercise: Person2• Task 1: Get the Person (v2) example from

the lecture working (using the People class).

Page 23: Mark Dixon 1 09 – Java Servlets. Mark Dixon 2 Session Aims & Objectives Aims –To cover a range of web-application design techniques Objectives, by end.

Mark Dixon 23

Tutorial Exercise: Person3• Task 1: Get the Person (v3) example from

the lecture working.• Task 2: Modify your code, so that a line of

text is displayed confirming that data has been saved.

• Task 3: Modify the list page, so that an add button is included, which allows a new record to be added.

• Task 4: Modify the person page, so that a delete button is included, which allows the current record to be deleted.