⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deliveryprotocolhandler.java

📁 J2ME MIDP_Example_Applications
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// 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"
           );
        }
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -