/** * 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请求客户端是一个基于AXIS1.4版本的工具,用于帮助开发者快速创建能够与Web服务交互的Java客户端代码。AXIS是Apache软件基金会的一个开源项目,它提供了SOAP(简单对象访问协议)和WSDL(Web服务描述...
Java HTTP 客户端是指使用 Java 语言实现的 HTTP 客户端程序,它能够根据给定的 URL,获得指定 URL 所指向的内容,并对获得的内容进行进一步的解析和处理。下面是关于 Java HTTP 客户端的详细知识点: 一、HTTP ...
Java WSS客户端测试程序是一个基于Maven构建的Java项目,主要目标是实现对Web Socket Secure (WSS) 协议的支持。WSS是WebSocket协议的安全版本,它在WebSocket通信上添加了SSL/TLS层,以确保数据在传输过程中的安全...
通过理解Hessian协议、获取客户端请求URL以及如何重定向请求,开发者可以在分布式系统中实现更高效、灵活的服务交互。结合源码和工具,可以深入探究Hessian的内部机制,优化性能,以及解决实际开发中的问题。
4. 考虑使用POST/REDIRECT/GET模式:有些登录系统会在验证POST请求后重定向到GET请求的URL,这需要在客户端代码中特别处理。 在处理这个问题时,可以使用Java的HTTP客户端库,如Apache HttpClient,它提供了丰富的...
请求URL信息 ```java System.out.println(request.getRequestURI()); // 请求的URL路径 System.out.println(request.getServletPath()); // 请求映射到的Servlet路径 ``` 这些信息可以帮助开发者了解用户请求的...
然而,在实际应用场景中,客户端请求往往经过了多级代理(如Apache、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址并不是客户端的真实IP,而是代理服务器的IP地址。 例如,在使用Apache或...
这部分代码创建了一个`DefaultHttpClient`实例,构建了一个`HttpPost`对象并设置了请求URL和请求体。最后,通过调用`execute`方法发送HTTP请求并获取响应。 #### 四、总结 通过上述分析可以看出,Java WebService...
本文将深入探讨JAVA中三种常见的URL连接方法,即使用`URL`类的`openConnection()`方法、使用`HttpURLConnection`类,以及采用`HttpClient`库进行网络请求。 #### `URL`类及其使用 `URL`类是JAVA中用于表示统一资源...
这需要引入Apache Kafka的Java客户端库,并创建一个Producer实例: ```java Properties props = new Properties(); props.put("bootstrap.servers", "kafka服务器地址:端口"); props.put("key.serializer", "org....
【Java调用WebService客户端详解】 在Java开发中,有时我们需要从客户端调用远程的WebService服务以获取或传递数据。本文将详细介绍如何使用Java进行WebService客户端的调用,并提供HttpGet、HttpPost、HttpSoap...
而`WSDL2Java`工具正是基于这样的需求应运而生,它能够将一个WSDL文件转换为Java客户端代码,让开发者可以轻松地调用远程Web服务。 ### WSDL2Java的工作原理 `WSDL2Java`工具主要遵循以下步骤: 1. **解析WSDL...
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信协议,用于在客户端和服务器之间建立安全的、加密的数据传输通道。它主要用于保护用户数据,防止中间人攻击和数据篡改。本...
服务器处理客户端请求,涉及到Java Web开发中的重要组件Servlet,这是一个用于处理客户端请求并给出响应的Java程序。这一过程是Java EE(Java Platform, Enterprise Edition)中的一个核心机制,广泛应用于各种基于...
2. 生成客户端代码:使用JAX-WS的wsimport工具或Apache CXF的cxf-codegen-plugin,可以自动生成Java客户端代码,包括服务代理类和服务接口。 3. 编写客户端应用程序:导入生成的Java类,实例化服务代理,调用其方法...
在过滤器中,可以检查请求URL,如果匹配到特定的图片路径,就进行权限检查,阻止非法访问。 7. **图片防盗链**: 图片防盗链技术用于防止其他网站未经许可引用你的图片资源,造成流量损失。这可以通过检查HTTP请求...
在Java编程语言中,发送HTTP请求是常见的网络通信任务,主要用到的是`java.net.URL`和`java.net.HttpURLConnection`这两个核心类。本篇将详细介绍如何使用Java原生API实现简单的HTTP请求。 首先,我们需要了解HTTP...
本教程将详细介绍如何通过URL地址获取网页并生成jpg图片,同时解决32位和64位运行环境下的兼容性问题。我们将主要使用Java语言来实现这一功能,因为它具有丰富的库和跨平台的特性。 首先,我们需要一个能够处理网络...
请求重定向是指将客户端的请求重新定向到另一个 URL 的过程。这个过程通过 HttpServletResponse 接口提供的 sendRedirect() 方法实现。sendRedirect() 方法将生成 302 响应码和 Location 响应头,从而通知客户端去...