Transcript Lect. notes
ISOM
MIS 3150 Module 3
3-Tier Webapps using JSP/JDBC
Arijit Sengupta
Structure of this semester
ISOM
MIS415
1. Design
0. Intro
Database
Fundamentals
Conceptual
Modeling
Relational
Model
2. Querying
Query
Languages
Advanced
SQL
3. Applications
4. Advanced
Topics
Java DB
Applications –
JDBC/JSP
XML
Databases
Data
Mining
Normalization
Newbie
Users
Designers
Developers
Professionals
Today’s Buzzwords
ISOM
• 3-Tier applications
Client – WebServer – ApplicationServer
• Basics of JDBC
• Basics of JSP Containers - Tomcat
• Web Applications using JSP
3 Tier Architecture
ISOM
URL
JSP page
request
HTTP request
JSP container
compiles to
a servlet
HTTP response
response
HTTP page
Browser
JavaBean
properties,
call methods Library
Web server
DB
JDBC
ISOM
A platform-independent library of classes
allowing database access from any Java
application
Take advantages of Polymorphism
• JDBC is a set of interfaces
– Driver, Connection, Statement, ResultSet, etc.
• Database vendors (not programmers) will
implement these interfaces.
• If we switch from one database to another, we just
need to load different driver (plug and play)!
– YOU DON'T NEED TO MODIFY THE REST OF
YOUR PROGRAM!
JDBC
ISOM
DriverManager
Connection
Statement
ResultSet
Driver
Database
JDBC
ISOM
DriverManager
Connection
Statement
ResultSet
Driver
Database
JDBC (Contd.)
ISOM
• Register a JDBC driver
Driver d = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver (d);
or
DriverManager.registerDriver (new
oracle.jdbc.driver.OracleDriver());
• Or, use the Java reflection abilities
Class.forName(
"oracle.jdbc.driver.OracleDriver");
calling Class.forName() will create an instance of a driver
and register it with the DriverManager automatically
This is better since we can use a constant:
String DRIVER =
"oracle.jdbc.driver.OracleDriver";
Class.forName(DRIVER);
• For mysql, use: com.mysql.jdbc.driver
JDBC
ISOM
DriverManager
Connection
Statement
ResultSet
Driver
Database
JDBC (Contd.)
ISOM
• Make a connection
String URL =
"jdbc:oracle:thin:@unixapps1.wright.edu:
1521:ORA2"; // For Oracle
String URL =
”jdbc:mysql://localhost/employees"; //
For MySQL
Connection conn =
DriverManager.getConnection(URL,
USERNAME, PASSWORD);
JDBC
ISOM
DriverManager
Connection
Statement
ResultSet
Driver
Database
JDBC (Contd.)
ISOM
• Create a statement
Statement st = conn.createStatement();
//default:TYPE_FORWARD_ONLY and
CONCUR_READ_ONLY
or
Statement st =conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//the resultset will be scrollable and
sensitive to changes made by others
//we can update the resultset
JDBC
ISOM
DriverManager
Connection
Statement
ResultSet
Driver
Database
JDBC (Contd.)
ISOM
• Execute a query
String SQL = "INSERT INTO s" +
" VALUES ('222-22-2222')";
int result = st.executeUpdate(SQL);
//either the row count for INSERT,
UPDATE or DELETE or 0 for SQL
statements that return nothing
• Execute a query and create a
resultset
String SQL = "SELECT * FROM Student";
ResultSet rec = st.executeQuery(SQL);
JDBC (Contd.)
ISOM
• Process the resultset
while(rec.next()) {
System.out.println(rec.getString("snum"));
}
or
while(rec.next()) {
System.out.println(rec.getString(1));
// first column of the resultset
}
There are methods like getString(), getInt(), etc. that take either a
column name or column position
•
See
http://java.sun.com/j2se/1.3/docs/guide/jdbc/index.html for
all JDBC Class documentation
Tomcat – a J2EE Container
ISOM
• Open Source – integrated as an
Apache.org project
• Can be obtained from
http://tomcat.apache.org
• Provides full JSP 2.0/Servlet 2.4
functionality
Elements of a Java Server Page
ISOM
Directives: <%@ %>
• Provide global information to the
page
• Import statements
• Scripting language
Declarations: <%! %>
• For page-wide variable and
method declarations
Elements of a Java Server Page
ISOM
• Scriptlets: <% %>
This is the Java code embedded in the web
pages
• Expressions: <%= %>
Formats the expression as a string to be
included in the output of the web page
• Comments: <%-- --%>
• User readable comments, contents
ignored and removed by the JSP
Compiler
JSP Directives
ISOM
General syntax:
<%@ directive {attribute = "value"} %>
• Possible values for directives are:
Page - Information for the page
• Include - Specifies the files whose
contents are to be included in the output
e.g., <%@ include file="header.html" %>
• Taglib
The URI for a library of custom tags that may
be used in the page
JSP Page Directive
ISOM
• The page directive may take the following
values:
<%@ page language = "java" %>
This variable tells the JSP engine what language will
be used in the file
• • "java" is the only language supported by JSP
in the current specification
• <%@ page import = "java.util.*, ItemValue" %>
Comma separated list of classes and packages that
are used in the JSP page
Should appear at the top of the file
JSP Page Directive (Contd.)
ISOM
<%@ page session = "true | false" %>
true indicates that session data is available to the
page
By default, this is set to true
<%@ page buffer = "none | 16kb | sizekb" %>
Determines the size of the output stream buffer
Defaults to 8kb
Use with autoFlush
<%@ page autoFlush = "true | false" %>
When set to true, flushes the output buffer when it is
full, rather than raising an exception
JSP Page Directive (contd.)
ISOM
<%@ page errorPage =
"mypage/error_handler.jsp" %>
Specifies the relative path of the page, where
control would be transferred if any exceptions
are thrown from this page
The error handling JSP page should have its
isErrorPage directive set to true
<%@ page isErrorPage = "true | false" %>
Marks the page as an error handler
JSP Declarations
ISOM
• Class and instance variables (of the
generated servlet class) may be specified
using the JSP Declaration tag:
<%! String name = “Web Applications";
int index = 10;
int count = 0; %>
• Methods may also be specified:
<%!
private int getNextIndex()
{
return index ++;
}
%>
JSP Scriptlets
ISOM
• JSP scriptlets are defined as block
of Java code embedded between a
pair of
• tags, <% and %>.
• Example:
<%
java.util.Date d = new java.util.Date();
out.println(d);
%>
JSP Expressions
ISOM
• Useful for embedding the result of a Java
expression in a HTML page
The expression is encoded between the tags
<%= and %>
The value of the expression is converted to a
string and then displayed
Conversion of primitive types to string
happens automatically
Example:
The date is <%= new java.util.Date() %>
JSP Implicit Objects
ISOM
• When writing scriptlets and expressions,
the following objects (called implicit
objects) are available by default:
•
•
•
•
•
•
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
out javax.servlet.jsp.JspWriter
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
exception java.lang.Throwable
Reading inputs from
Forms/URLS
ISOM
• Remember that parameters are passed to Web
applications via one of two methods:
GET method: parameters are passed directly through the
URL, encoded using the urlencoding method
• Quick to create and test – can be created without a form
• Can be bookmarked
• URL shows in plaintext – not secure
POST method: parameters are encoded and sent to the
server separately from the URL
• Can only be created via forms (or advanced applications)
• Secure – parameters cannot be seen
• Reading a single parameter via name:
String value = request.getParameter(paramname);
String [] values =
request.getParameterValues(paramname);
/* for multivalued parameters like
checkboxes/multiple selectable lists */
• Better way – using “Beans” - shortly
JSP Session Example
ISOM
<html><head><title>Visitor Count -- JSP Session</title>
</head> <body bgcolor="#FFFFFF">
<h2>Visitor Count</h2>
<p>This JSP page demonstrates session management by
incrementing a counter each time a user accesses a
page.</p>
<%!
private int totalHits = 0;
%>
<% session = request.getSession(true);
Integer ival =
(Integer)session.getValue("jspsession.counter");
if (ival == null) ival = new Integer(1);
else ival = new Integer(ival.intValue() + 1);
session.putValue("jspsession.counter", ival);
%>
<p align="center">
You have hit this page <%= ival %>
time<%= (ival.intValue() == 1) ? "" : "s" %>,
out of a total of <%= ++totalHits %> page
hit<%= (totalHits == 1) ? "" : "s" %>!</p>
</body></html>
JSP Actions
ISOM
• Actions are tags that may affect the
runtime behavior of the JSP or affect the
current out stream; they may also use,
modify and/or create objects.
• JSP specification defines the following
standard actions:
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
JSP Actions
ISOM
<jsp:include>
<jsp:forward>
<jsp:param>
<jsp:plugin>
• New action types are introduced by
means of custom tags
What is a JavaBean?
ISOM
• A Java class that (at a minimum)
has an empty constructor
has getters and setters for each of the
properties in the class
implements the serializable interface
JSP Actions and Attributes
ISOM
• JSP actions can define named attributes
and associated values
<%@ page import="People"
errorPage="exception.jsp“ %>
<jsp:useBean id="myperson" class="People" />
<% myperson.setName("Ramesh"); %>
<h1>My name is: <%=myperson.getName()%></h1>
<%-- Let's now use the bean syntax --%>
Name using Bean is:
<jsp:getProperty name="myperson" property="name" />
Beans and HTML forms
ISOM
• You may connect HTML form parameters
to Bean properties
<jsp:setProperty name="id"
property="accountHolder"
value = "<%=
request.getParameter("accountHolder")%>/>
• There is a shorthand for the above:
<jsp:setProperty name="id"
property="accountHolder" />
This works if the property name was exactly the
same as the form parametername
Beans and HTML forms
ISOM
• If the form parameter name and the
property name do not match, then use
the following variant of "jsp:setProperty"
<jsp:setProperty name=“myperson"
property=“age“ param=“myage" />
• Another powerful variation of
"jsp:setProperty" examines all the
parameter names from the request object
and if some of them match with property
names, it sets the appropriate properties
<jsp:setProperty name=“myperson"
property="*" />
Beans and HTML (contd.)
ISOM
<%-- Trying the all powerful syntax --%>
<jsp:setProperty name="myperson"
property="*" />
Name is: <%=myperson.getName()%>
Age is: <%=myperson.getAge()%>
Weight is: <%=myperson.getWeight()%>
Including Files
ISOM
• JSP supports two kinds of file inclusion:
Static (using the directive "include")
Dynamic (or Request-Time)
• Static inclusion is specified using the "include"
directive
e.g., <%@ include file="header.html" %>
In static inclusion, the contents of "header.html" are
included in the output of the containing JSP file during
the JSP page compilation
If the contents of the "header.html" file change, these
changes are not visible to the user of the containing
JSP file
Static inclusion is fast (because inclusion is done at
compile time)
Including Files (contd.)
ISOM
• Dynamic inclusion is supported by the use of the tag
"jsp:include"
e.g., <jsp:include page = "news/headlines.jsp" flush = "true"
/>
Each time the containing JSP file is accessed, the JSP
engine includes the contents of the latest copy of the file
"news/headlines.jsp“
You may also pass parameters to the included file, e.g:
<jsp:include page =
"news/headlines.jsp" flush="true">
<jsp:param name="prefers"
value="international"/>
...
</jsp:include>
Forwarding Files
ISOM
• A request to a JSP file may be
forwarded, transparently to the user, to
another JSP file
<jsp:forward page = "target" />
This is used to redirect request from one
page to another page
The calling JSP file relinquishes control to the
forwarded page
The calling JSP cannot send any data back
to the browser before invoking this tag
If data had already been sent by the calling
JSP, invoking the "jsp:forward" tag causes an
exception to be thrown
Forwarding Requests
ISOM
• You may also pass parameters to the
forwarded page
<jsp:forward page="catalog.jsp" />
<jsp:param name="color" value="red"/>
...
</jsp:forward>
• Parameters passed in this fashion may
be accessed by the forwarded JSP
(catalog.jsp) by the following call:
request.getParameter("color");
Forwarding Requests
ISOM
• Request forwarding is typically used for
authentication
<%
if(request.getParameter("login-info") ==
null)
%>
<jsp:forward page="login.jsp"/>
<%
else
{
/* Generate Error message – no login */
}
%>
Summary
ISOM
• JSP – JDBC provides a stable and well-tested
platform for 3-tier web application design
• Supports all major databases and all platforms
• With Servlet compilation, performance is high
• Many major applications like Wiki, major
Government/Funding organizations like NSF –
are running on Java/JSP technology.
• Web services are well-supported
• J2EE provides a well-designed software design
and development platform for enterprise
systems.