`

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);       
} } 

分享到:
评论

相关推荐

    AXIS生成java请求客户端

    AXIS生成Java请求客户端是一个基于AXIS1.4版本的工具,用于帮助开发者快速创建能够与Web服务交互的Java客户端代码。AXIS是Apache软件基金会的一个开源项目,它提供了SOAP(简单对象访问协议)和WSDL(Web服务描述...

    java http客户端

    Java HTTP 客户端是指使用 Java 语言实现的 HTTP 客户端程序,它能够根据给定的 URL,获得指定 URL 所指向的内容,并对获得的内容进行进一步的解析和处理。下面是关于 Java HTTP 客户端的详细知识点: 一、HTTP ...

    Hessian实战应用之获取客户端请求URL和重新转发客户端请求

    通过理解Hessian协议、获取客户端请求URL以及如何重定向请求,开发者可以在分布式系统中实现更高效、灵活的服务交互。结合源码和工具,可以深入探究Hessian的内部机制,优化性能,以及解决实际开发中的问题。

    java wss客户端测试程序

    Java WSS客户端测试程序是一个基于Maven构建的Java项目,主要目标是实现对Web Socket Secure (WSS) 协议的支持。WSS是WebSocket协议的安全版本,它在WebSocket通信上添加了SSL/TLS层,以确保数据在传输过程中的安全...

    java 作为客户端发送http post请求登录网站首页。

    4. 考虑使用POST/REDIRECT/GET模式:有些登录系统会在验证POST请求后重定向到GET请求的URL,这需要在客户端代码中特别处理。 在处理这个问题时,可以使用Java的HTTP客户端库,如Apache HttpClient,它提供了丰富的...

    Java获取客户端代码大全

    请求URL信息 ```java System.out.println(request.getRequestURI()); // 请求的URL路径 System.out.println(request.getServletPath()); // 请求映射到的Servlet路径 ``` 这些信息可以帮助开发者了解用户请求的...

    java非常强的获取客户端真实IP的两种方法

    然而,在实际应用场景中,客户端请求往往经过了多级代理(如Apache、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址并不是客户端的真实IP,而是代理服务器的IP地址。 例如,在使用Apache或...

    Java写WebService客户端

    这部分代码创建了一个`DefaultHttpClient`实例,构建了一个`HttpPost`对象并设置了请求URL和请求体。最后,通过调用`execute`方法发送HTTP请求并获取响应。 #### 四、总结 通过上述分析可以看出,Java WebService...

    JAVA中三种URL连接方法

    本文将深入探讨JAVA中三种常见的URL连接方法,即使用`URL`类的`openConnection()`方法、使用`HttpURLConnection`类,以及采用`HttpClient`库进行网络请求。 #### `URL`类及其使用 `URL`类是JAVA中用于表示统一资源...

    java实现tcp客户端发送服务端解析程序

    这需要引入Apache Kafka的Java客户端库,并创建一个Producer实例: ```java Properties props = new Properties(); props.put("bootstrap.servers", "kafka服务器地址:端口"); props.put("key.serializer", "org....

    Java后台防止客户端重复请求、提交表单实现原理

    Java后台防止客户端重复请求、提交表单实现原理 Java后台防止客户端重复请求、提交表单实现原理是指在Web应用程序中,防止用户重复提交表单或请求,避免因重复提交而导致的数据错乱或其他问题。该实现原理主要通过...

    Java调用WebService(客户端)

    【Java调用WebService客户端详解】 在Java开发中,有时我们需要从客户端调用远程的WebService服务以获取或传递数据。本文将详细介绍如何使用Java进行WebService客户端的调用,并提供HttpGet、HttpPost、HttpSoap...

    WSDL2Java--根据wsdl生成Java客户端工具

    而`WSDL2Java`工具正是基于这样的需求应运而生,它能够将一个WSDL文件转换为Java客户端代码,让开发者可以轻松地调用远程Web服务。 ### WSDL2Java的工作原理 `WSDL2Java`工具主要遵循以下步骤: 1. **解析WSDL...

    Java实现的Https请求工具类

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信协议,用于在客户端和服务器之间建立安全的、加密的数据传输通道。它主要用于保护用户数据,防止中间人攻击和数据篡改。本...

    服务器如何处理客户端请求

    服务器处理客户端请求,涉及到Java Web开发中的重要组件Servlet,这是一个用于处理客户端请求并给出响应的Java程序。这一过程是Java EE(Java Platform, Enterprise Edition)中的一个核心机制,广泛应用于各种基于...

    web service 客户端java例子

    2. 生成客户端代码:使用JAX-WS的wsimport工具或Apache CXF的cxf-codegen-plugin,可以自动生成Java客户端代码,包括服务代理类和服务接口。 3. 编写客户端应用程序:导入生成的Java类,实例化服务代理,调用其方法...

    java禁止直接url访问图片

    在过滤器中,可以检查请求URL,如果匹配到特定的图片路径,就进行权限检查,阻止非法访问。 7. **图片防盗链**: 图片防盗链技术用于防止其他网站未经许可引用你的图片资源,造成流量损失。这可以通过检查HTTP请求...

    通过URL地址获取网页生成jpg图片

    本教程将详细介绍如何通过URL地址获取网页并生成jpg图片,同时解决32位和64位运行环境下的兼容性问题。我们将主要使用Java语言来实现这一功能,因为它具有丰富的库和跨平台的特性。 首先,我们需要一个能够处理网络...

    使用JAVA原生实现简单的HTTP请求

    在Java编程语言中,发送HTTP请求是常见的网络通信任务,主要用到的是`java.net.URL`和`java.net.HttpURLConnection`这两个核心类。本篇将详细介绍如何使用Java原生API实现简单的HTTP请求。 首先,我们需要了解HTTP...

Global site tag (gtag.js) - Google Analytics