All Downloads are FREE. Search and download functionalities are using the official Maven repository.

groovy.servlet.ServletBinding Maven / Gradle / Ivy

There is a newer version: 1.5.8
Show newest version
/*
 * Copyright 2003-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package groovy.servlet;

import groovy.lang.Binding;
import groovy.xml.MarkupBuilder;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet-specific binding extension to lazy load the writer or the output
 * stream from the response.
 * 
 * 

*

Default variables bound

*
    *
  • "request" : the HttpServletRequest object
  • *
  • "response" : the HttpServletResponse object
  • *
  • "context" : the ServletContext object
  • *
  • "application" : same as context
  • *
  • "session" : convenient for request.getSession(false) - can be null!
  • *
  • "params" : map of all form parameters - can be empty
  • *
  • "headers" : map of all request header fields
  • *
* *

*

Implicite bound variables

*
    *
  • "out" : response.getWriter()
  • *
  • "sout" : response.getOutputStream()
  • *
  • "html" : new MarkupBuilder(response.getWriter())
  • *
*

* * @author Guillaume Laforge * @author Christian Stein */ public class ServletBinding extends Binding { private final Binding binding; private final ServletContext context; private final HttpServletRequest request; private final HttpServletResponse response; private MarkupBuilder html; /** * Initializes a servlet binding. */ public ServletBinding(HttpServletRequest request, HttpServletResponse response, ServletContext context) { this.binding = new Binding(); this.request = request; this.response = response; this.context = context; /* * Bind the default variables. */ binding.setVariable("request", request); binding.setVariable("response", response); binding.setVariable("context", context); binding.setVariable("application", context); /* * Bind the HTTP session object - if there is one. * Note: we don't create one here! */ binding.setVariable("session", request.getSession(false)); /* * Bind form parameter key-value hash map. * * If there are multiple, they are passed as an array. */ Map params = new HashMap(); for (Enumeration names = request.getParameterNames(); names.hasMoreElements();) { String name = (String) names.nextElement(); if (!binding.getVariables().containsKey(name)) { String[] values = request.getParameterValues(name); if (values.length == 1) { params.put(name, values[0]); } else { params.put(name, values); } } } binding.setVariable("params", params); /* * Bind request header key-value hash map. */ Map headers = new HashMap(); for (Enumeration names = request.getHeaderNames(); names.hasMoreElements();) { String headerName = (String) names.nextElement(); String headerValue = request.getHeader(headerName); headers.put(headerName, headerValue); } binding.setVariable("headers", headers); } public void setVariable(String name, Object value) { /* * Check sanity. */ if (name == null) { throw new IllegalArgumentException("Can't bind variable to null key."); } if (name.length() == 0) { throw new IllegalArgumentException("Can't bind variable to blank key name. [length=0]"); } /* * Check implicite key names. See getVariable(String)! */ if ("out".equals(name)) { throw new IllegalArgumentException("Can't bind variable to key named '" + name + "'."); } if ("sout".equals(name)) { throw new IllegalArgumentException("Can't bind variable to key named '" + name + "'."); } if ("html".equals(name)) { throw new IllegalArgumentException("Can't bind variable to key named '" + name + "'."); } /* * TODO Check default key names. See constructor(s). */ /* * All checks passed, set the variable. */ binding.setVariable(name, value); } public Map getVariables() { return binding.getVariables(); } /** * @return a writer, an output stream, a markup builder or another requested object */ public Object getVariable(String name) { /* * Check sanity. */ if (name == null) { throw new IllegalArgumentException("No variable with null key name."); } if (name.length() == 0) { throw new IllegalArgumentException("No variable with blank key name. [length=0]"); } /* * Check implicite key names. See setVariable(String, Object)! */ try { if ("out".equals(name)) { return response.getWriter(); } if ("sout".equals(name)) { return response.getOutputStream(); } if ("html".equals(name)) { if (html == null) { html = new MarkupBuilder(response.getWriter()); } return html; } } catch (IOException e) { String message = "Failed to get writer or output stream from response."; context.log(message, e); throw new RuntimeException(message, e); } /* * Still here? Delegate to the binding object. */ return binding.getVariable(name); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy