java 取得客户端上次请求的URL地址

/**  * Copyright (c) 2005-2009 springside.org.cn 
*  * Licensed under the Apache License, Version 2.0 (the "License"); 
*   * $Id: Struts2Utils.java 463 2009-09-13 14:34:14Z calvinxiu $ 
*/ 
package org.grayrabbit.web.struts2; 
import java.io.IOException; import java.util.Map; 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import net.sf.json.JSONObject;
import nl.bitwalker.useragentutils.UserAgent; 
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.grayrabbit.commons.util.logging.Logger;
import org.grayrabbit.commons.util.logging.LoggerFactory; 
/**  * Struts2 Utils类.  *   * 实现获取Request/Response/Session与绕过jsp/freemaker直接输出文本的简化函数. 
*   * @author sys53  */ 
public class Struts2Utils {      
//header 常量定义//       
private static final String ENCODING_PREFIX = "encoding";    
private static final String NOCACHE_PREFIX = "no-cache";     
private static final String ENCODING_DEFAULT = "UTF-8";      
private static final boolean NOCACHE_DEFAULT = true;        
//content-type 定义 //       
private static final String TEXT = "text/plain";       
private static final String JSON = "application/json";       
private static final String XML = "text/xml";       
private static final String HTML = "text/html";         
private static Logger logger = LoggerFactory.getLogger(Struts2Utils.class);     
// 取得Request/Response/Session的简化函数 //        
/**          * 取得HttpSession的简化方法.          */     
public static HttpSession getSession() {               
return ServletActionContext.getRequest().getSession();         }    
/**          * 取得HttpRequest的简化方法.          */     
public static HttpServletRequest getRequest() {            
return ServletActionContext.getRequest();         }      
/**          * 取得HttpResponse的简化方法.          */     
public static HttpServletResponse getResponse() {      
return ServletActionContext.getResponse();         }     
/**          * 取得Request Parameter的简化方法.          */   
public static String getParameter(String name) {             
return getRequest().getParameter(name);         }       
/**          * 取得客户单IP地址          *           * @return          */     
public static String getClientIp(){            
String ip = ServletActionContext.getRequest().getHeader("x-forwarded-for");   
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {       
ip = ServletActionContext.getRequest().getHeader("Proxy-Client-IP");      
}      
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {         
ip = ServletActionContext.getRequest().getHeader("WL-Proxy-Client-IP");      
}       
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {      
ip = ServletActionContext.getRequest().getRemoteAddr();       
}         if (ip.startsWith("0:0:0:0:0:0:0:1")) {        
          return "127.0.0.1";       
}         return ip;                
}             
/**          * 取得客户端浏览器信息       
*           * @return          */     
public static UserAgent getUserAgent(){     
return  UserAgent.parseUserAgentString(ServletActionContext.getRequest().getHeader("User-Agent"));   
}        
/**          * 取得客户端上次请求的URL地址       
*           * @return          */    
public static String getReferer(){      
return ServletActionContext.getRequest().getHeader("Referer");     
}         
/**          * 取得客户端请求的url地址          *           * @return          */    
public static String getRequestUrl(){           
return ServletActionContext.getRequest().getRequestURL().toString();         }   
// 绕过jsp/freemaker直接输出文本的函数 //      
/**          * 直接输出内容的简便函数.         
* eg.          * render("text/plain", "hello", "encoding:GBK");      
* render("text/plain", "hello", "no-cache:false");       
* render("text/plain", "hello", "encoding:GBK", "no-cache:false");    
*           * @param headers 可变的header数组,目前接受的值为"encoding:"或"no-cache:",默认值分别为UTF-8和true.          */
public static void render(final String contentType, final String content, final String... headers) {     
try {                      
//分析headers参数                      
String encoding = ENCODING_DEFAULT;                    
boolean noCache = NOCACHE_DEFAULT;                     
for (String header : headers) {                         
String headerName = StringUtils.substringBefore(header, ":");             
String headerValue = StringUtils.substringAfter(header, ":");                 
if (StringUtils.equalsIgnoreCase(headerName, ENCODING_PREFIX)) {              
encoding = headerValue;                               
} else if (StringUtils.equalsIgnoreCase(headerName, NOCACHE_PREFIX)) {          
noCache = Boolean.parseBoolean(headerValue);            
} else                                      
throw new IllegalArgumentException(headerName + "不是一个合法的header类型");  
}                         
HttpServletResponse response = ServletActionContext.getResponse();     
//设置headers参数                      
String fullContentType = contentType + ";charset=" + encoding;                
response.setContentType(fullContentType);               
if (noCache) {                              
response.setHeader("Pragma", "No-cache");            
response.setHeader("Cache-Control", "no-cache");              
response.setDateHeader("Expires", 0);                  
}                        
response.getWriter().write(content);          
response.getWriter().flush();                
} catch (IOException e) {                      
logger.error(e.getMessage(), e);              
}         }        
/**          * 直接输出文本.        
* @see #render(String, String, String...)      
*/       
public static void renderText(final String text, final String... headers) {     
render(TEXT, text, headers);         }   
/**          * 直接输出HTML.          * @see #render(String, String, String...)          */     
public static void renderHtml(final String html, final String... headers) {     
render(HTML, html, headers);         }      
/**          * 直接输出XML.          * @see #render(String, String, String...)          */   
public static void renderXml(final String xml, final String... headers) {      
render(XML, xml, headers);         }        
/**          * 直接输出JSON.         
*           * @param string json字符串.       
* @see #render(String, String, String...)       
*/       
public static void renderJson(final String jsonString, final String... headers) {    
render(JSON, jsonString, headers);        
}        
/**          * 直接输出JSON.        
*           * @param map Map对象,将被转化为json字符串.    
* @see #render(String, String, String...)         
*/   
public static void renderJson(@SuppressWarnings("rawtypes") final Map map, final String... headers) { 
String jsonString = JSONObject.fromObject(map).toString();       
render(JSON, jsonString, headers);         }   
/**          * 直接输出JSON.         
*           * @param object Java对象,将被转化为json字符串.    
* @see #render(String, String, String...)         
*/      
public static void renderJson(final Object object, final String... headers) {     
String jsonString = JSONObject.fromObject(object).toString();           
render(JSON, jsonString, headers);       
} } 

你可能感兴趣的:(html,json,xml)