?? deliveryprotocolhandler.java
字號:
// Copyright 2002 Nokia Corporation.
//
// THIS SOURCE CODE IS PROVIDED 'AS IS', WITH NO WARRANTIES WHATSOEVER,
// EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS
// FOR ANY PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE
// OR TRADE PRACTICE, RELATING TO THE SOURCE CODE OR ANY WARRANTY OTHERWISE
// ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE AND WITH NO
// OBLIGATION OF NOKIA TO PROVIDE THE LICENSEE WITH ANY MAINTENANCE OR
// SUPPORT. FURTHERMORE, NOKIA MAKES NO WARRANTY THAT EXERCISE OF THE
// RIGHTS GRANTED HEREUNDER DOES NOT INFRINGE OR MAY NOT CAUSE INFRINGEMENT
// OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OWNED OR CONTROLLED
// BY THIRD PARTIES
//
// Furthermore, information provided in this source code is preliminary,
// and may be changed substantially prior to final release. Nokia Corporation
// retains the right to make changes to this source code at
// any time, without notice. This source code is provided for informational
// purposes only.
//
// Nokia and Nokia Connecting People are registered trademarks of Nokia
// Corporation.
// Java and all Java-based marks are trademarks or registered trademarks of
// Sun Microsystems, Inc.
// Other product and company names mentioned herein may be trademarks or
// trade names of their respective owners.
//
// A non-exclusive, non-transferable, worldwide, limited license is hereby
// granted to the Licensee to download, print, reproduce and modify the
// source code. The licensee has the right to market, sell, distribute and
// make available the source code in original or modified form only when
// incorporated into the programs developed by the Licensee. No other
// license, express or implied, by estoppel or otherwise, to any other
// intellectual property rights is granted herein.
package example.delivery;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
class DeliveryProtocolHandler
{
private CourierDatabase courierDatabase;
private DeliveryOrderDatabase deliveryOrderDatabase;
static class InvalidRequestException
extends Exception
{
InvalidRequestException(String message)
{
super(message);
}
InvalidRequestException()
{
super();
}
}
void init(CourierDatabase courierDatabase,
DeliveryOrderDatabase deliveryOrderDatabase)
{
this.courierDatabase = courierDatabase;
this.deliveryOrderDatabase = deliveryOrderDatabase;
}
void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
String requestStr = getRequestString(request);
ValueGenerator generator = new ValueGenerator();
ValueParser parser = new ValueParser(requestStr);
String command = parser.getNextValue();
if (command == null)
{
throw new ServletException("Missing command");
}
else if (command.equals("login"))
{
// request and response are passed, in order to
// support URL rewriting in the response
handleLoginRequest(request, response, parser, generator);
}
else if (command.equals("getJob"))
{
handleGetDeliveryJobRequest(request, parser, generator);
}
else if (command.equals("setStatus"))
{
handleSetStatusRequest(request, parser, generator);
}
else if (command.equals("logout"))
{
handleLogoutRequest(request, parser, generator);
}
else
{
throw new ServletException("Invalid command");
}
String responseStr = generator.getString();
setResponseString(response, responseStr);
}
private String getRequestString(HttpServletRequest request)
throws IOException
{
InputStream in = request.getInputStream();
int requestLength = request.getContentLength();
if (requestLength == -1)
{
throw new IOException("Need to know request length");
}
StringBuffer buf = new StringBuffer(requestLength);
for (int i = 0; i < requestLength; ++i)
{
int ch = in.read();
if (ch == -1)
{
break;
}
buf.append((char)ch);
}
in.close();
return buf.toString();
}
private void setResponseString(HttpServletResponse response,
String responseStr)
throws IOException
{
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.write(responseStr);
out.close();
}
private void handleLoginRequest(HttpServletRequest request,
HttpServletResponse response,
ValueParser parser,
ValueGenerator generator)
{
try
{
String name = getStringValue(parser);
String password = getStringValue(parser);
if ((name == null) || (name.length() == 0) )
{
throw new InvalidRequestException("Missing name");
}
else if (password == null) // length 0 is OK
{
throw new InvalidRequestException("Missing password");
}
else
{
Courier courier = courierDatabase.getCourier(name);
if ((courier == null) || !courier.isCorrectPassword(password))
{
throw new InvalidRequestException(
"Name or password incorrect");
}
else
{
// HTTP Session Management
HttpSession session = request.getSession(true);
session.setAttribute("courierName", name);
String requestUrl = request.getRequestURL().toString();
String rewrittenUrl = response.encodeURL(requestUrl);
response.setHeader("X-RewrittenURL", rewrittenUrl);
generator.addValue("login-OK");
}
}
}
catch (InvalidRequestException e)
{
generateErrorResponse(generator, "login-error", e.getMessage());
}
}
private void generateErrorResponse(ValueGenerator generator,
String errorName,
String message)
{
generator.addValue(errorName);
generator.addValue(message);
}
private void handleGetDeliveryJobRequest(
HttpServletRequest request,
ValueParser parser,
ValueGenerator generator
)
{
HttpSession session = request.getSession(false);
if (session != null)
{
String courierName = (String)session.getAttribute("courierName");
if (courierName != null)
{
DeliveryOrder job =
deliveryOrderDatabase.getDeliveryJob(courierName);
if (job != null)
{
generator.addValue("getJob-OK");
generator.addValue(job.getId());
generator.addValue(job.getStatus());
generator.addValue(job.getDescription());
generator.addValue(job.getSenderAddress());
generator.addValue(job.getRecipientAddress());
String note = job.getNote();
if (note == null)
{
note = "";
}
generator.addValue(note);
}
else
{
generateErrorResponse(
generator,
"getJob-error",
"No jobs currently available - try again later"
);
}
}
else
{
generateErrorResponse(
generator,
"getJob-error",
"Unknown courier - please login again"
);
}
}
else
{
generateErrorResponse(
generator,
"getJob-error",
"invalid session"
);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -