Download Lecture note 12

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
COMPS311F
Li Tak Sing
Static attributes in Servlets
 Since Servlets are also Java classes, you can also use static
attributes to store values that can be shared by all servlets.
 For example, if you want a single database connect to be used
by all servlets, you can use a static attribute to store the
connection and it would be accessible by all servlets.
 On the other hand, a normal attribute in a servlet can only
be used by the servlet only.
CountVisit
 This is to count the visitor to a site, not a page.
 You can try the servlet at:
 http://plbpc001.ouhk.edu.hk/tma/CountVisit
 http://plbpc001.ouhk.edu.hk/tma/CountVisit2
 The source is at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
oct/CountVisit.java
 http://plbpc001.ouhk.edu.hk/~mt311f/2010oct/CountVisit2.java
CountVisit.java
public class CountVisit extends HttpServlet {
public static int count=0;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
PrintWriter out=response.getWriter();
out.println("You have visit this site for "+count+" times.");
count++;
}
catch (Exception e) {
e.printStackTrace();
}
}
CountVisit2
public class CountVisit2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
try {
PrintWriter out=response.getWriter();
out.println("You have visit this site for "+CountVisit.count+" times.");
CountVisit.count++;
}
catch (Exception e) {
e.printStackTrace();
}
}
JSP
 Java Server Page
 JSP is an alternative way to handle HTTP requests. Contrary
to Java Servlets, the basic structure of a JSP is an HTML file.
 Java code is embedded in the HTML code specified by <%
and %>
A simple JSP
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
A simple JSP
<title>Hello world</title>
</head>
<body>
<H2>Hello World</H2>
Time is: <% out.println(new
java.util.Date().toString());%>
</body>
</html>
The output
 You can try the JSP page at:
 http://plbpc001.ouhk.edu.hk/tma/jsp/hello.jsp
 The source is at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/hello.jsp
 In order to view the code, you need to right click on the
browser and select view soruce.
A simple JSP
 In the JSP page, Java code should be placed between <% %>.
 Every JSP page has several predefined variables:
 request. This variable specifies the data included in an http
request. This variable takes value from the clients' browser to
pass it over to the server.
 response. This variable specifies the data included in the http
response. It is used with cookies and also in http headers.
 out. This variable specifies the output stream otherwise known
as printwriter in a page context.
 session. This variable specifies the data associated with
httpsession object with a specific session of a user. The main
purpose of this object is to use the session information to
maintain multiple page requests.
Methods of JSP variables.
 request
 Cookie[] getCookies(): get all the cookies for this request.
 String getParameter(String name): get the value of the named
parameter.
 out
 This is a PrintWriter. Therefore, you can use println() etc to
write to the final page.
 session
 Object getAttribute(String name). Get a named attribute
 void setAttribute(String name, Object obj). Set a named
attribute
 void setMaxInactiveInterval(int i). Set the maximum inactive
interval before the end of the session.
Methods of JSP variables.
 response
 void addCookie(Cookie c). Add a cookie.
<%= %>
 In the last example, we use the following code write the
current time:
Time is: <% out.println(new java.util.Date().toString()); %>
 This can be shorten as:
Time is: <%= new java.util.Date().toString() %>
 So <%= xxx %> is equilvalent to
<% out.println(xxx); %>
The count example
 You can try the JSP at:
 http://plbpc001.ouhk.edu.hk/tma/jsp/count.jsp
 You can download the source at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/count.jsp
count.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Count</title>
</head>
<body>
count.jsp
<H2>Count</H2>
<%
String count = null;
Cookie cookie[] = request.getCookies();
if (cookie != null) {
for (Cookie c : cookie) {
if (c.getName().equals("count")) {
count = c.getValue();
}
}
}
count.jsp
if (count == null) {
out.println("You are new here.");
count = "1";
} else {
out.println("You have visited this site for " + count +
" times.");
count = Integer.toString(Integer.parseInt(count) + 1);
}
response.addCookie(new Cookie("count", count));
%>
</body>
</html>
expire.jsp
 You can try the JSP page at
 http://plbpc001.ouhk.edu.hk/tma/jsp/expire.jsp
 You can download the source at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/expire.jsp
expire.jsp
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
if (request.getParameter("create") != null) {
Cookie c = new Cookie("expire", "10");
c.setMaxAge(10);
response.addCookie(c);
}
expire.jsp
Cookie cookie[] = request.getCookies();
int fontsize = 3;
if (cookie != null) {
for (Cookie c : cookie) {
System.out.println("cookie:" + c.getName() + ":" +
c.getValue() + "<br>");
if (c.getName().equals("expire")) {
fontsize = 10;
}
}
}%>
expire.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<font size='<%=fontsize%>'>
The font size is <%=fontsize%>.
</font>
expire.jsp
<form>
<input type='submit' name='create' value='create a
cookie'/>
</form>
Click <a href='expire.jsp'>this</a> to revisit this page
</body>
</html>
SessionCount
 You can try this at
 http://plbpc001.ouhk.edu.hk/tma/jsp/sessioncount.jsp
 The source can be downloaded at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/sessioncount.jsp
sessioncount.jsp
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Session Count</title>
</head>
sessioncount.jsp
<body>
<h1>Session Count</h1>
<% Integer count = (Integer) session.getAttribute("count");
if (count == null) {
out.println("You are new here.");
count = 1;
} else {
out.println("You have visited this site for " + count + "
times.");
count++;
}
session.setAttribute("count", count);%>
</body>
</html>
sessionexpire
 You can try this at
 http://plbpc001.ouhk.edu.hk/tma/jsp/sessionexpire.jsp
 The source can be downloaded at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/sessionexpire.jsp
sessionexpire.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
if (request.getParameter("create") != null) {
session = request.getSession();
session.setMaxInactiveInterval(10);
} else {
session = request.getSession(false);
}
%>
sessionexpire.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>SessionExpire</title>
</head>
<body>
<h1>SessionExpire</h1>
sessionexpire.jsp
<%
int fontsize = 3;
if (session != null) {
fontsize = 10;
}%>
<font size='<%=fontsize%>'>
The font size is <%=fontsize%>.
</font>
<form>
<input type='submit' name='create' value='create a
session'/>
</form>
Click <a href='sessionexpire.jsp'>this</a> to revisit this page
sessionexpire.jsp
</body>
</html>
JSP directives
 Directives are used to pass high-level information to the
server about how a specific page should be translated. The
general format of a JSP directive looks like the following
where one or more attribute values may be specified.
<%@ directive-name attribute-name1 = “value1” attributename2 = “value2” ... %>
The page directive
 The page direction is used to specify properties of the JSP
page.
 import:
<%@ page import="java.util.*, java.text.*" %>
 contentType:
<%@ page contentType="text/html; charset=Big5" %>
 The session attribute is used to enable or disable the use of the
predefined session variable. The default value is true.
<%@ page session="false" %>
The page directive
 The isThreadSafe attribute indicates that the page is thread-safe.
The default is true. If this value is false, then requests for the JSP
page will be handled serially. Note that if this value is true, then
the programmer is responsible to sychronize access to shared
variables.
<%@ page isThreadSafe="false" %>
 The include directive enables the contents of a separate resource
to be merged into the current JSP page at the place of the
directive appears.
<%@ include file="/abc.html" %>
JSP declarations <%! ... %>
 This is to decare variables and methods for use in the same
JSP.
 For example, the following declare a method that calculate
the factorial of an integer:
<%! private long factorial(int n) {
if (n==0)
return 1;
else
return n*factorial(n-1);
}
%>
JSP declarations <%! ... %>
 Then, code in the same JSP page can now use this method.
A JSP that calculate the factorial
 You can try the page at
 http://plbpc001.ouhk.edu.hk/tma/jsp/factorial.jsp
 The source can be downloaded at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/factorial.jsp
factorial.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%! private int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}%>
factorial.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Factorial</title>
</head>
<body>
<h1>Factorial</h1>
factorial.jsp
<%
String nva = request.getParameter("n");
int n = 0;
if (nva != null) {
n = factorial(Integer.parseInt(nva.trim()));
%>
The factorial of <%=nva%> is <%=n%>.<br>
<%
}
%>
factorial.jsp
<form>
<input type="text" name="n" size="10">
<input type="submit" name="submit"
value="submit">
</form>
</body>
</html>
Database connection for a JSP
 If you want to have one database connection for all request to a page, the connection
should be created as a JSP declaration.
<%! private java.sql.Connection con = con();
private java.sql.Connection con() {
java.sql.Connection re = null;
try {
Class.forName("com.mysql.jdbc.Driver");
re = java.sql.DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdatabase",
"user", "password");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
%>
Javabeans
 JSP declarations can be used to instantiate objects shared by
requests for the same JSP page. But there are times that
different JSP pages may want to share objects. JavaBeans are
software components that support more flexible sharing. To
facilitate sharing, JavaBeans must be coded according to
certain specific coding convention.
JavaBeans
 A JavaBean must have a constructor with no parameters. To
use a JavaBean, you will need to place a <jsp:useBean> tag in
a JSP page.
 There are two ways to use a JavaBean:
 <jsp:useBean id = "count" scope = "application" class =
"chapter40.Count"> </jsp:useBean>
 <jsp:useBean id="count" scope="application"
class="chapter40.Count" />
Invoking the methods of a
JavaBean
 <% count.increaseCount(); %>
JavaBean
 Lets create a JavaBean called javabean.CountVisit. Note that a JavaBean has to
be in a package.
package javabean;
public class CountVisit {
public int count=0;
synchronized public void addCount() {
count++;
}
synchronized public int count() {
return count;
}
}
A JSP page that uses
javabean.CountVisit
 You can try the page at
 http://plbpc001.ouhk.edu.hk/tma/jsp/javabeanCount.jsp
 The source can be downloaded at:
 http://plbpc001.ouhk.edu.hk/~mt311f/2010-
sep/web/webapplicaiton/web/javabeanCount.jsp
javabeanCount.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="count" scope="application"
class="javabean.CountVisit"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Using Javabean to count</title>
</head>
javabeanCount.jsp
<body>
<h1>Using Javabean to count</h1>
This page has been visied <%=count.count()%> times.
<% count.addCount(); %>
</body>
</html>
Scopes of JavaBeans
 Two distinct instantiations can co-exist independently with
the same bean as long as they have different scopes.
 The legitimate scopes from high to low are application,
session, page and request.
 When the scope is application, different end-users will share
the same instantiation of the bean. Once created, the bean
continues to live until the Web server restarts.
 When the scope is session, each end-user will have his or her
own bean. A user does not share the bean with another user.
A session bean will live until the session expires based on the
value of MaxInactiveInterval or after session.invalidate( ) is
called whichever happens first.
Scopes of JavaBeans
 When the scope is page, no two JSP pages can share the same
instantiation of a bean. The difference between the page and
request scopes is very subtle and does not concern us in this
course.
Comparision of session, JSP
declarations and JavaBean
 Values in a session are accessible by one user only and can be
used in different JSP pages.
 Values stores in JSP declarations are accessible by all users
but is limited to a single page.
 When a Javabean's scope is page or request, it is like JSP
declaration. It is shared by all users but is limited to a single
JSP page.
 When a Javabean's scope is session, it is like a session value
and is shared by a single user and can be used in different JSP
pages.
Comparision of session, JSP
declarations and JavaBean
 When a Javabean's scope is application, it is shared by all
users and can be used in different JSP pages. It is like static
attributes in servlet.
javabeanCount2
 This is exactly the same as javabeanCount.
 The two pages share the same JavaBean called count.
 So the two pages have the same counter.
 You can try the page at
 http://plbpc001.ouhk.edu.hk/tma/jsp/javabeanCount2.jsp