Servlets - Welcome to ENGRONLINE,

Download Report

Transcript Servlets - Welcome to ENGRONLINE,

module HelloApp
{
struct messageStruct
{
string inputText;
string outputText;
};
interface Hello
{
void sayHello(inout messageStruct message);
};
};
import HelloApp.*;
import
import
import
import
import
org.omg.CosNaming.*;
org.omg.CosNaming.NamingContextPackage.*;
org.omg.CORBA.*;
java.awt.*;
java.awt.event.*;
public class HelloApplet extends java.applet.Applet implements ActionListener
{
Hello helloRef;
Button sendButton;
TextField messageText;
TextField replyText;
public void init() {
try {
// create and initialize the ORB
ORB orb = ORB.init(this, null);
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef =
NamingContextHelper.narrow(objRef);
// resolve the Object Reference in Naming
NameComponent nc = new NameComponent("Hello", "");
NameComponent path[] = {nc};
helloRef = HelloHelper.narrow(ncRef.resolve(path));
} catch (Exception e) {
System.out.println("HelloApplet exception: " +
e.getMessage());
e.printStackTrace(System.out);
}
sendButton = new Button("Send");
sendButton.addActionListener(this);
add(sendButton);
messageText = new TextField("Type Message Here
messageText.setEditable(true);
add(messageText);
");
replyText = new TextField("Message from Server ");
replyText.setEditable(false);
add(replyText);
}
public void actionPerformed(ActionEvent e) {
messageStruct stru = new messageStruct(messageText.getText(),"");
messageStructHolder hhh = new messageStructHolder(stru);
try {
helloRef.sayHello(hhh);
} catch (Exception ex) {
System.out.println("HelloApplet exception: " +
ex.getMessage());
ex.printStackTrace(System.out);
}
replyText.setText("");
stru = hhh.value;
replyText.setText(stru.outputText);
messageText.setText(stru.inputText);
}
}
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
class HelloServant extends _HelloImplBase
{
public void sayHello(messageStructHolder msg)
{
messageStruct ms = msg.value;
System.out.println(ms.inputText);
ms.inputText = "HelloWorld!!";
System.out.println(ms.inputText);
ms.outputText = "Goodbye Cruel World!!";
System.out.println(ms.outputText);
msg.value = ms;
System.out.println("Good Bye");
}
}
public class HelloServer {
public static void main(String args[])
{
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);
// create servant and register it with the ORB
HelloServant helloRef = new HelloServant();
orb.connect(helloRef);
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// bind the Object Reference in Naming
NameComponent nc = new NameComponent("Hello", "");
NameComponent path[] = {nc};
ncRef.rebind(path, helloRef);
// wait for invocations from clients
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}
Servlets
• Replace Common Gateway Interface
Scripts
• Extend Server Functionality
• Modules (software components)
• Like applets to browsers
• No GUI
Versus CGI
•
•
•
•
•
Easier to Write
Faster to Run
Platform Independence
Handle HTTP Client Requests
HTML Forms
Servlet Package
• javax.servlet
• Servlet interface defines methods that
manage servlet and its communication with
clients
• Client Interaction: When it accepts call,
receives two objects
– ServletRequest
– ServletResponse
Architecture
ServletRequest Interface
• Encapsulates communication from client to
server
• Parameters passed by client, protocol used
by client, names of remote host, and server
• ServletInputStream for data transfer from
client to server using HTTP POST and PUT
• HttpServletRequest access HTTP header
info
ServletResponse Interface
• Methods for replying to client
• Set content length and MIME type of reply
• ServletOutputStream and a Writer to send
data
• HttpServletResponse protocol specific
Http Specifics
• MIME: Multipurpose Internet Mail
Extension to identify file type
• GET/POST/PUT: Ways that browser sends
form data to the server
• Persistent Sessions
• Cookies
public class SimpleServlet extends HttpServlet {
/** * Handle the HTTP GET method by building a simple web page. */
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out;
String title = "Simple Servlet Output";
// set content type and other response header fields first
response.setContentType("text/html");
// then write the data of the response
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title); out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>This is output from SimpleServlet.");
out.println("</BODY></HTML>");
out.close(); }
}
Interacting with Clients
•
•
•
•
•
•
Requests and Responses
Header Data
Get Requests
Post Requests
Threading
Servlet Descriptions
• Handle requests through service method
(calls doGet())
• HttpServletRequest Objects
– getParameter returns value of named
parameter
– getParameterValues if more than one value
– getParameterNames for names of parameters
– getQueryString for HTTP GET returns string
of raw data from client. Must parse.
– HTTP POST, PUT, DELETE
• Text: getReader returns BufferedReader
• Binary: getInputStream returns
ServletInputStream
• HttpServletResponse Object
– getWriter returns a Writer for text
– getOutputStream returns
ServletOutputStream for binary
– Set header data before above IO set
– setContentType in header
import
import
import
import
import
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
database.*;
cart.ShoppingCart;
/**
* This is a simple example of an HTTP Servlet. It responds to the GET
* and HEAD methods of the HTTP protocol. This servlet calls other
* servlets.
*/
public class BookDetailServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Get the user's session and shopping cart
HttpSession session = request.getSession(true);
ShoppingCart cart =
(ShoppingCart)session.getValue(session.getId());
// If the user has no cart, create a new one
if (cart == null) {
cart = new ShoppingCart();
session.putValue(session.getId(), cart);
}
// set content-type header before accessing the Writer
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// then write the response
out.println("<html>" +
"<head><title>Book Description</title></head>" +
"<body bgcolor=\"#FFFFFF\">" +
"<center>" +
"<hr> <br> &nbsp;" +
"<h1>" +
"<font size=\"+3\" color=\"red\">Duke's </font>" +
"<font size=\"+3\" color=\"purple\">Bookstore</font>" +
"</h1>" +
"</center>" +
"<br> &nbsp; <hr> <br> &nbsp;");
//Get the identifier of the book to display
String bookId = request.getParameter("bookId");
if (bookId != null) {
// and the information about the book
BookDBServlet database = (BookDBServlet)
getServletConfig().getServletContext().getServlet("bookdb");
BookDetails bd = database.getBookDetails(bookId);
//Print out the information obtained
out.println("<h2>" + bd.getTitle() + "</h2>" +
"&nbsp; By <em>" + bd.getFirstName() + ", " +
bd.getSurname() + "</em> &nbsp; &nbsp; " +
"(" + bd.getYear() + ")<br> &nbsp; <br>" +
"<h4>Here's what the critics say: </h4>" +
"<blockquote>" + bd.getDescription() +
"</blockquote>" +
"<h4>Our price: $" + bd.getPrice() + "</h4>" +
"<center>" +
"<p><a href=\"" +
response.encodeUrl("/servlet/catalog?Buy=" + bookId) +
"\"> Add this item to your shopping cart.</a></p>" +
"</center>");
}
out.println("</body></html>");
out.close();
}
public String getServletInfo() {
return "The BookDetail servlet returns information about" +
"any book that is available from the bookstore.";
}
}
import
import
import
import
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
cart.ShoppingCart;
/**
* An HTTP servlet that responds to the POST method of the HTTP protocol.
* It clears the shopping cart, thanks the user for the order,
* and resets the page to the BookStore's main page.
*/
public class ReceiptServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Get the user's session and shopping cart
HttpSession session = request.getSession(true);
ShoppingCart cart =
(ShoppingCart)session.getValue(session.getId());
// If the user has no cart, create a new one
if (cart == null) {
cart = new ShoppingCart();
session.putValue(session.getId(), cart);
}
// Payment received -- invalidate the session
session.invalidate();
// set content type header before accessing the Writer
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// then write the response
out.println("<html>" +
"<head><title> Receipt </title>" +
"<meta http-equiv=\"refresh\" content=\"4; url=" +
"http://" + request.getHeader("Host") +
"/servlet/bookstore;\">" +
"</head>" +
"<body bgcolor=\"#FFFFFF\">" +
"<center>" +
"<hr> <br> &nbsp;" +
"<h1>" +
"<font size=\"+3\" color=\"red\">Duke's </font>" +
"<font size=\"+3\"
color=\"purple\">Bookstore</font>" +
"</h1>" +
"</center>" +
"<br> &nbsp; <hr> <br> &nbsp;");
out.println("<h3>Thank you for purchasing your books from us "
+
request.getParameter("cardname") +
"<p>Please shop with us again soon!</h3>" +
"<p><i>This page automatically resets.</i>" +
"</body></html>");
out.close();
}
public String getServletInfo() {
return "The Receipt servlet clears the shopping cart, " +
"thanks the user for the order, and resets the " +
"page to the BookStore's main page.";
}
}
Threading
• Can handle multiple clients concurrently
• Shared resources must be synchronized
• or create a servlet that handles one request
at a time
public class ReceiptServlet extends HttpServlet
implements SingleThreadModel {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
... } ... }
Servlet Descriptions
• To allow server to display information about
servlet
• getServletInfo
public class BookStoreServlet extends HttpServlet {
...
public String getServletInfo() {
return "The BookStore servlet returns the " +
"main web page for Duke's Bookstore.";
}}