16
Mark Dixon 1 11 – Java Servlets

11 – Java Servlets

Embed Size (px)

DESCRIPTION

11 – Java Servlets. 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. most application programs – 3 major layers - PowerPoint PPT Presentation

Citation preview

Page 1: 11 – Java Servlets

Mark Dixon 1

11 – Java Servlets

Page 2: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

Mark Dixon 8

AddNum: Servlet (.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 (.java)

Page 9: 11 – Java Servlets

Mark Dixon 9

AddNum: Servlet (.java file)import 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 html

Page 10: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

Mark Dixon 13

Class People• Contains common code for both pages

Peoplecnstr

OpenSelectClose

Page 14: 11 – Java Servlets

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: 11 – Java Servlets

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: 11 – Java Servlets

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