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

📄 webresponse.java

📁 Wicket一个开发Java Web应用程序框架。它使得开发web应用程序变得容易而轻松。 Wicket利用一个POJO data beans组件使得它可以与任何持久层技术相结合。
💻 JAVA
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.wicket.protocol.http;import java.io.IOException;import java.io.OutputStream;import java.util.Locale;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletResponse;import org.apache.wicket.Response;import org.apache.wicket.WicketRuntimeException;import org.apache.wicket.util.string.AppendingStringBuffer;import org.apache.wicket.util.string.Strings;import org.apache.wicket.util.time.Time;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Implements responses over the HTTP protocol by holding an underlying HttpServletResponse object * and providing convenience methods for using that object. Convenience methods include methods * which: add a cookie, close the stream, encode a URL, redirect a request to another resource, * determine if a redirect has been issued, set the content type, set the locale and, most * importantly, write a String to the response output. *  * @author Jonathan Locke */public class WebResponse extends Response{	/** Log. */	private static final Logger log = LoggerFactory.getLogger(WebResponse.class);	/** True if response is a redirect. */	protected boolean redirect;	/** The underlying response object. */	private final HttpServletResponse httpServletResponse;	/** Is the request an ajax request? */	private boolean ajax;	/**	 * Constructor for testing harness.	 */	public WebResponse()	{		httpServletResponse = null;	}	/**	 * Package private constructor.	 * 	 * @param httpServletResponse	 *            The servlet response object	 */	public WebResponse(final HttpServletResponse httpServletResponse)	{		this.httpServletResponse = httpServletResponse;	}	/**	 * Add a cookie to the web response	 * 	 * @param cookie	 */	public void addCookie(final Cookie cookie)	{		if (httpServletResponse != null)		{			httpServletResponse.addCookie(cookie);		}	}	/**	 * Convenience method for clearing a cookie.	 * 	 * @param cookie	 *            The cookie to set	 * @see WebResponse#addCookie(Cookie)	 */	public void clearCookie(final Cookie cookie)	{		if (httpServletResponse != null)		{			cookie.setMaxAge(0);			cookie.setValue(null);			addCookie(cookie);		}	}	/**	 * Closes response output.	 */	public void close()	{		// NOTE: Servlet container will close the response output stream		// automatically, so we do nothing here.	}	/**	 * Returns the given url encoded.	 * 	 * @param url	 *            The URL to encode	 * @return The encoded url	 */	public CharSequence encodeURL(CharSequence url)	{		if (httpServletResponse != null && url != null)		{			if (url.length() > 0 && url.charAt(0) == '?')			{				// there is a bug in apache tomcat 5.5 where tomcat doesn't put sessionid to url				// when the URL starts with '?'. So we prepend the URL with ./ and remove it				// afterwards (unless some container prepends session id before './' or mangles				// the URL otherwise				String encoded = httpServletResponse.encodeURL("./" + url.toString());				if (encoded.startsWith("./"))				{					return encoded.substring(2);				}				else				{					return encoded;				}			}			else			{				return httpServletResponse.encodeURL(url.toString());			}		}		return url;	}	/**	 * Gets the wrapped http servlet response object.	 * 	 * @return The wrapped http servlet response object	 */	public final HttpServletResponse getHttpServletResponse()	{		return httpServletResponse;	}	/**	 * @see org.apache.wicket.Response#getOutputStream()	 */	public OutputStream getOutputStream()	{		try		{			return httpServletResponse.getOutputStream();		}		catch (IOException e)		{			throw new WicketRuntimeException("Error while getting output stream.", e);		}	}	/**	 * Whether this response is going to redirect the user agent.	 * 	 * @return True if this response is going to redirect the user agent	 */	public final boolean isRedirect()	{		return redirect;	}	/**	 * CLIENTS SHOULD NEVER CALL THIS METHOD FOR DAY TO DAY USE!	 * <p>	 * Redirects to the given url. Implementations should encode the URL to make sure cookie-less	 * operation is supported in case clients forgot.	 * </p>	 * 	 * @param url	 *            The URL to redirect to	 */	public void redirect(String url)	{		if (!redirect)		{			if (httpServletResponse != null)			{				// encode to make sure no caller forgot this				url = httpServletResponse.encodeRedirectURL(url);				try				{					if (httpServletResponse.isCommitted())					{						log.error("Unable to redirect to: " + url +								", HTTP Response has already been committed.");					}					if (log.isDebugEnabled())					{						log.debug("Redirecting to " + url);					}					if (isAjax())					{						/*						 * By reaching this point, make sure the HTTP response status code is set to						 * 200, otherwise wicket-ajax.js will not process the Ajax-Location header						 */						httpServletResponse.addHeader("Ajax-Location", url);						// safari chokes on empty response. but perhaps this is						// not the best place?						httpServletResponse.getWriter().write(" ");					}					else					{						httpServletResponse.sendRedirect(url);					}					redirect = true;				}				catch (IOException e)				{					log.warn("redirect to " + url + " failed: " + e.getMessage());				}			}		}		else		{			log.info("Already redirecting to an url current one ignored: " + url);		}	}	/**	 * Set the content type on the response.	 * 	 * @param mimeType	 *            The mime type	 */	public final void setContentType(final String mimeType)	{		if (httpServletResponse != null)		{			httpServletResponse.setContentType(mimeType);		}	}	/**	 * @see org.apache.wicket.Response#setContentLength(long)	 */	public void setContentLength(long length)	{		if (httpServletResponse != null)		{			httpServletResponse.setContentLength((int)length);		}	}	/**	 * @see org.apache.wicket.Response#setLastModifiedTime(org.apache.wicket.util.time.Time)	 */	public void setLastModifiedTime(Time time)	{		if (httpServletResponse != null)		{			if (time != null && time.getMilliseconds() != -1)			{				httpServletResponse.setDateHeader("Last-Modified", time.getMilliseconds());			}		}	}	/**	 * Output stream encoding. If the deployment descriptor contains a locale-encoding-mapping-list	 * element, and that element provides a mapping for the given locale, that mapping is used.	 * Otherwise, the mapping from locale to character encoding is container dependent. Default is	 * ISO-8859-1.	 * 	 * @see javax.servlet.ServletResponse#setLocale(java.util.Locale)	 * 	 * @param locale	 *            The locale use for mapping the character encoding	 */	public final void setLocale(final Locale locale)	{		if (httpServletResponse != null)		{			httpServletResponse.setLocale(locale);		}	}	/**	 * Writes string to response output.	 * 	 * @param string	 *            The string to write	 */	public void write(final CharSequence string)	{		if (string instanceof AppendingStringBuffer)		{			write((AppendingStringBuffer)string);		}		else if (string instanceof StringBuffer)		{			try			{				StringBuffer sb = (StringBuffer)string;				char[] array = new char[sb.length()];				sb.getChars(0, sb.length(), array, 0);				httpServletResponse.getWriter().write(array, 0, array.length);			}			catch (IOException e)			{				throw new WicketRuntimeException("Error while writing to servlet output writer.", e);			}		}		else		{			try			{				httpServletResponse.getWriter().write(string.toString());			}			catch (IOException e)			{				throw new WicketRuntimeException("Error while writing to servlet output writer.", e);			}		}	}	/**	 * Writes AppendingStringBuffer to response output.	 * 	 * @param asb	 *            The AppendingStringBuffer to write to the stream	 */	public void write(AppendingStringBuffer asb)	{		try		{			httpServletResponse.getWriter().write(asb.getValue(), 0, asb.length());		}		catch (IOException e)		{			throw new WicketRuntimeException("Error while writing to servlet output writer.", e);		}	}	/**	 * Set a header to the date value in the servlet response stream.	 * 	 * @param header	 * @param date	 */	public void setDateHeader(String header, long date)	{		if (httpServletResponse != null)		{			httpServletResponse.setDateHeader(header, date);		}	}	/**	 * Set a header to the string value in the servlet response stream.	 * 	 * @param header	 * @param value	 */	public void setHeader(String header, String value)	{		if (httpServletResponse != null)		{			httpServletResponse.setHeader(header, value);		}	}	/**	 * Convenience method for setting the content-disposition:attachment header. This header is used	 * if the response should prompt the user to download it as a file instead of opening in a	 * browser.	 * 	 * @param filename	 *            file name of the attachment	 */	public void setAttachmentHeader(String filename)	{		setHeader("Content-Disposition", "attachment" +				((!Strings.isEmpty(filename)) ? ("; filename=\"" + filename + "\"") : ""));	}	/**	 * Is the request, which matches this response an ajax request.	 * 	 * @return True if the request is an ajax request.	 */	public boolean isAjax()	{		return ajax;	}	/**	 * Set that the request which matches this response is an ajax request.	 * 	 * @param ajax	 *            True if the request is an ajax request.	 */	public void setAjax(boolean ajax)	{		this.ajax = ajax;	}}

⌨️ 快捷键说明

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