Upload
casey-mcmahon
View
15
Download
3
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
Mark Dixon 1
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
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
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
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
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
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
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)
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
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
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
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>
Mark Dixon 13
Class People• Contains common code for both pages
Peoplecnstr
OpenSelectClose
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(); } }
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(); } }}
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