requestdispatcherservlet.java

来自「JAVA Servlet2.3外文书籍源码」· Java 代码 · 共 117 行

JAVA
117
字号
package basicServlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 * Title:        Chapter 2
 * Description: RequestManagerServlet
 * Copyright:    Copyright (c) 2001
 * Company:
 * @author Andrew Harbourne-Thomas
 * @version 1.0
 */
public class RequestDispatcherServlet
    extends GenericServlet implements Dispatching {

    private static StringBuffer form = new StringBuffer();

    /**
     * This method prepares the tope of the page and the includes (using
     * the RequestDispatcher) another servlet in the page
     */
    public void service(ServletRequest request, ServletResponse response)
        throws ServletException, IOException {

      ServletContext servletContext = getServletContext();
      ServletConfig config = getServletConfig();
      PrintWriter out = response.getWriter();
      String servletRequested = request.getParameter("servlet");

      //get the dispatcher
      RequestDispatcher requestDispatcher =
        servletContext.getRequestDispatcher("/" + servletRequested);

      //prepare and output the page
      response.setContentType("text/html");
      out.println(getPageTitle(servletRequested));

      //include the requested resource (if any)
      if (requestDispatcher != null) {
        //attach this attribute to the request to
        //indicate to the RequestResponseServlet
        //that the request is commited
        request.setAttribute("buffer", "written");
        requestDispatcher.include(request, response);
      }
      else if (servletRequested == null) {
        out.println("Please choose a servlet");
      }
      else {
        out.println(servletRequested + " is not recognised by the server");
      }

      out.println("</BODY></HTML>");
      out.flush();
    }

    /**
     * This intialises the form StringBuffer.  As this doesn't change,
     * by making it a static variable it is intialised only once.
     */
    public void init() throws ServletException {
      form.append(getForm());
    }

    /**
     * This method returns the top of the webpage that the sevlet
     * go under.
     */
    private StringBuffer getPageTitle(String servletRequested) {

      StringBuffer sb = new StringBuffer();
      sb.append("<HTML><HEAD><title>");
      if (servletRequested == null) {
        sb.append("[no servlet requested]");
      }
      else {
        sb.append(servletRequested);
      }
      sb.append("</title></HEAD><BODY><h1><code>");
      if (servletRequested == null) {
        sb.append("[no servlet was requested]</code>");
      }
      else {
        sb.append(servletRequested).append("</code> is shown below");
      }
      sb.append("</h1><p>");
      sb.append(form);
      sb.append("<hr width=100%>");
      return sb;
    }

    /**
     * This method prepares the form for access to the servlets.
     * It is called only once in the init method for efficiency.
     */
    private StringBuffer getForm() {
      StringBuffer sb = new StringBuffer();
      ServletConfig config = getServletConfig();

      sb.append("<form method=get action=\"" + REQUEST_DISPATCHER_SERVLET_PACKAGE + "\">");
      sb.append("<table><tr><td>Please choose servlet (or other resource) to view:</td>");
      sb.append("<td><select name=\"servlet\">");

      for (int i = 0; i < RESOURCES.length ; i++) {
        sb.append("<option value=\"" + RESOURCES[i] + "\" >" + RESOURCES_NAMES[i]);
      }

      sb.append("</select></td></tr><tr><td colspan=2 align=\"center\">");
      sb.append("<input type=\"submit\" value=\"View Servlet/Resource\"></td></tr>");
      sb.append("</table></form> ");
      return sb;
    }
}

⌨️ 快捷键说明

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