Professional Documents
Culture Documents
Serv Lets
Serv Lets
Ch. 10 (Architecture)
Ch. 12 (21 Days)
History of Interactive Web
➢ Applets
Long download times
Code on client machines (maintenance)
➢ CGI
Custom code to interact with web server
Security hole
Resource hog for large sites
➢ Java Servlets
Standard, easy interface to web server
Security/authentication
Implements sessions
History (cont.)
➢ Early use of Servlets
Simple, easy to use for web applications
MVC all implemented in one big servlet
• Very complex
• Difficult to maintain
• Not scalable
init()
doGet(),
doPost, … Processing
State: Resident
Request
destroy()
END
Servlet Sequence Diagram
Fig. 12-15
Model 1 - Servlets only
Model/View/Control
submit
Servlet
doGet/doPost
Generate Data
webpage HTML Data
base
WebServer
Servlets in the Enterprise
submit
View/Control Model
doGet/doPost Servlet
Input EJB
Control Data Entity
WebServer webpage
Output Bean
Performance
and
Flexibility Issues
Example Servlet
publc class HtmlPage extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String name = request.getParameter(“name”);
String telephone = request.getParameter(“tel”);
response.setContentType(“text/html”);
Get value of form parameters
…. Business logic ….
PrintWriter out = response.getWriter():
out.println(“<HTML>”);
out.println(“<HEAD><TITLE>First Servlet</TITLE></HEAD>”); Sent output to web
out.println(“<BODY>”); browser
out.println(“<H1>Hello “ + name + “, Telephone “ + telephone + “</H1>”);
out.println(“</BODY>”);
out.println(“</HTML>”);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
doGet(request, response);
}
}
Model 2 Architecture
submit
doGet/doPost Servlet
input Business Data
Methods Data Access
<<forward>>
WebServer <<SessionEJB>> Objecs
<<EntityEJB>>
JSP
webpage
page
output
Web Development Life Cycle
Model 2 Architecture
Servlet JSP
Determine
Get request and call Determine
next view Build view
Parameters business
function
Web Development Life Cycle
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
InitialContext context = new InitialContext();
BusinessRulesRemote businessRules =
(BusinessRulesRemote) context.lookup(BusinessRules.REMOTE_JNDI_NAME);
Long personId = businessRules.login(username,password); 2.Call business
} catch (Exception e) { function
e.printStackTrace();
}
}
Web Development Life Cycle
JSP page
<div id="login">
<span class='highlight'>Welcome to Home Town Bank!</span>
<br> 4.Build next
<a id='logout' href="">Logout</a> view
</div>
How to use HTTPServlet
HttpServlet
HttpServletRequest HttpServletResponse
Servlet parameters
• Apply to a specific servlet
Deployment Descriptor
<?xml version=“1.0” encoding=“UTF-8:?>
<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’
‘http://java.sun.com/dtd/web-app_2_3.dtd’>
<web-app>
<display-name>A Simple Application</display-name>
<context-param>
<param-name>location</param-name> Context
<param-value>BYU-Idaho</param-value> Intialization
<description>Site Location</description> Parameter
</context-param>
<servlet>
<servlet-name>Verify Data</servlet-name>
<servlet-class>VerifyData</servlet-class>
<init-param> Servlet
<param-name>maxValue</param-name> Intialization
<param-value>25</param-value> Parameter
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Verify Data</servlet-name>
<url-pattern>/verifydata</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/error404.html</location>
</error-page>
</web-app>
Retrieving Init. Parameters
if (maxValue == null)
{
int maxValue = Integer.parseInt(this.getInitParameter(“maxValue");
}
…
…
}
Handling Errors
➢ HTTP Error Codes
Http Status code – set error code
Error page – set default error page
Import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
publc class HtmlPage extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String name = request.getParameter(“name”);
if (name.length() < 1)
response.sendError(9001, “Invalid name”);
}
}
Default HTTP Error Page
Deployment Descriptor
<?xml version=“1.0” encoding=“UTF-8:?>
<<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’
‘http://java.sun.com/dtd/web-app_2_3.dtd’>
<web-app>
<display-name>A Simple Application</display-name>
<servlet>
<servlet-name>Verify data</servlet-name>
<servlet-class>VerifyData</servlet-class>
<init-param>
<param-name>maxValue</param-name>
<param-value>25</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>verifyData</servlet-name>
<url-pattern>/verifyData</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page> Define output error
<error-code>9001</error-code> page for error code
<location>/error9001.html</location>
</error-page>
Send Redirect
➢ Redirect to another page to handle error
HttpServletResponse
Import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
publc class HtmlPage extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String name = request.getParameter(“name”);
if (name.length() < 1)
response.sendRedirect(“/Servlets/invalidNamePage”);
}
}
Servlet Session Management
➢ Hidden fields in form
Visible to client in source (not secure)
Limited amount of data
➢ URL rewritting
http://www.byui.edu/j2ee?sessionid=9982345
➢ Cookies
Store on client browser
May be disabled by some users
HttpServletResponse Cookie
HttpSession
…HttpPage PageHits
HttpPage
Filter
Servlet
Authenticate Servlet
Filter
Servlet
…VerifyData
VerifyData
Servlet
Filter Servlet
Import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
publc class PageHits extends HttpServlet implements Filter Must implement
{ Filter Interface
private FilterConfig filterConfig = null;
if (counter == null)
counter = new Integer(0);
counter = new Integer(counter.intValue()+1);
filterConfig.getServletContext().log("Number of hits is " + counter);
filterConfig.getServletContext().setAttribute("Counter", counter);
}
chain.doFilter(req, resp)
}
Modify Deployment Descriptor
<?xml version=“1.0” encoding=“UTF-8:?>
<<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’
‘http://java.sun.com/dtd/web-app_2_3.dtd’>
<web-app>
<display-name>A Simple Application</display-name>
<servlet>
<servlet-name>VerifyData</servlet-name>
<servlet-class>VerifyData</servlet-class>
<init-param>
<param-name>maxValue</param-name>
<param-value>25</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Verify Data</servlet-name>
<url-pattern>/verifyData/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Page Hits</filter-name>
<display-name>Page Hits</display-name>
<description>Count page hits<description>
<filter-class>PageHits</filter-class>
</filter>
<filter-mapping>
<filter-name>PageHits</filter-name>
<servlet-name>VerifyData</servlet-name>
</filter-mapping>
</web-app>
Listener Servlet
➢ Servlet is automatically executed when
some external event occurs
}
Modify Deployment Descriptor
<?xml version=“1.0” encoding=“UTF-8:?>
<<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’
‘http://java.sun.com/dtd/web-app_2_3.dtd’>
<web-app>
<display-name>A Simple Application</display-name>
<servlet>
<servlet-name>Verify data</servlet-name>
<servlet-class>VerifyData</servlet-class>
<init-param>
<param-name>maxValue</param-name>
<param-value>25</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Verify Data</servlet-name>
<url-pattern>/verifyData/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Page Hits</filter-name>
<display-name>Page Hits</display-name>
<description>Count page hitsdescription>
<filter-class>PageHits</filter-class>
</filter>
<filter-mapping>
<filter-name>PageHits</filter-name>
<servlet-name>Verify data</servlet-name>
</filter-mapping>
<listener>
< listener-class>Listener</ listener -class>
</listener>
</web-app>
Modify Filter Servlet
}
chain.doFilter(request, response);
}
}
Modified Filter Servlet
}
chain.doFilter(request, response);
}
}