WebUtil

本文介绍了一个实用的Web工具类,提供了多种方法用于处理Web请求、获取客户端信息及解析请求参数等。其中包括判断是否为AJAX请求、获取请求参数字符串、从URL中提取参数映射、获取客户端真实IP地址等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.base.util;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.util.WebUtils;

public class WebUtil extends WebUtils{

    public final static String AJAX_HEADER = "x-requested-with";
    public final static String XMLHTTPREQUEST = "XMLHttpRequest";
    
    
    public static boolean isAjaxRequest() {
        return isAjaxRequest(getHttpServletRequest());
    }
    
    public static boolean isAjaxRequest(HttpServletRequest request) {
        String requestType = request.getHeader(AJAX_HEADER);
        return XMLHTTPREQUEST.equalsIgnoreCase(requestType);
    }
    
    public static String getQueryString(HttpServletRequest request) {
        @SuppressWarnings("unchecked")
        Map<String, String[]> params = request.getParameterMap();
        StringBuffer buffer = new StringBuffer();
        for (String key : params.keySet()) {
            String[] values = params.get(key);
            int i = 0;
            int countValues = values.length;
            for (; i < countValues; i++) {
                buffer.append(key);
                buffer.append("=");
                buffer.append(StringUtil.trimToEmpty(values[i]));
                buffer.append("&");
            }
        }
        String queryString = buffer.toString();
        if (queryString.equals("")) {
            return queryString;
        }
        else {
            return queryString.substring(0, queryString.length() - 1);
        }
    }
    public static Map<String, List<String>> getRequestQueryParameterMap(String result) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        if(StringUtil.isEmpty(result)) {
            return map;
        }
        String[] paramStrArray = result.split("&");
        for(String paramStr : paramStrArray) {
            if(paramStr.indexOf("=") == -1) {
                continue;
            }
            String[] entry = new String[2];
            entry[0] = StringUtil.trimAllWhitespace(paramStr.substring(0, paramStr.indexOf("=")));
            entry[1] = StringUtil.trimAllWhitespace(paramStr.substring(paramStr.indexOf("=") + 1, paramStr.length()));
            if(map.containsKey(entry[0])) {
                map.get(entry[0]).add(entry[1]);
            } else {
                List<String> values = new ArrayList<String>();
                values.add(entry[1]);
                map.put(entry[0], values);
            }
            
        }
        return map;
    }
    @SuppressWarnings("unchecked")
    public static Map<String, String[]> getParameterMap(ServletRequest request){        
        Map<String, String[]> srcMap = request.getParameterMap();
        Map<String, String[]> destMap = new HashMap<String, String[]>();
        DataUtil.copyMap(srcMap, destMap);
        
        Enumeration<String> enums = request.getAttributeNames();
        if (DataUtil.isEmpty(enums)) {
            return null;
        }
        while (enums.hasMoreElements()) {
            String object = (String) enums.nextElement();
            if(object.startsWith("log.")){
                destMap.put(object, (String[])request.getAttribute(object));
            }
        }
        return destMap;
    }
    
    
    
    public static String getRemoteAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if(StringUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if(StringUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
    

    public static HttpSession getHttpSession() {
        return getHttpServletRequest().getSession();
    }
    
    public static HttpSession getHttpSession(HttpServletRequest request) {
        return request.getSession();
    }
    
    public static HttpServletRequest getHttpServletRequest() {
        return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    }
    
    public static String[] getParameterValues(String parameterName) {
        return getHttpServletRequest().getParameterValues(parameterName);
    }
    
    public static String getParameterValue(String parameterName) {
        return getHttpServletRequest().getParameter(parameterName);
    }
    
    public static void setAttribute(String attributeName, Object obj) {
        getHttpServletRequest().setAttribute(attributeName, obj);
    }
    
    public static Object getAttribute(String attributeName) {
        return getHttpServletRequest().getAttribute(attributeName);
    }
    
    public static void setAttribute(HttpServletRequest request, String attributeName, Object obj) {
        request.setAttribute(attributeName, obj);
    }
    
    public static Object getAttribute(HttpServletRequest request, String attributeName) {
        return request.getAttribute(attributeName);
    }
    
    public static Object getObjectInSession(String key) {
        return getHttpSession().getAttribute(key);
    }
    
    public static Object getObjectInSession(HttpServletRequest request, String key) {
        return getHttpSession(request).getAttribute(key);
    }
    

    public static String getMsgFromStackTrace(Exception e){
        ByteArrayOutputStream buf = new java.io.ByteArrayOutputStream();
        e.printStackTrace(new java.io.PrintWriter(buf, true));
        String  expMessage = buf.toString();
        return expMessage;
    }
    
}

### 尚硅谷日程管理中的 `WebUtil` 工具类 在尚硅谷的日程管理系统中,`WebUtil` 类主要用于处理与HTTP请求和响应有关的操作。这类工具通常用于简化常见的Web开发任务,比如参数提取、URL编码解码以及文件上传下载等功能。 #### 功能概述 `WebUtil` 提供了一系列静态方法来辅助控制器和其他组件完成特定的任务。这些功能可能包括但不限于: - **路径操作**:提供对URI字符串的解析能力,能够方便地截取或拼接URL片段。 - **数据转换**:支持将原始表单数据转化为更易于使用的对象结构,反之亦然。 - **文件处理**:实现文件流读写接口,便于前端上传图片或其他类型的附件到服务器端存储;同时也允许从服务端向客户端发送二进制资源。 #### 源码分析 以下是基于描述构建的一个简单的 `WebUtil` 实现例子[^1]: ```java package com.atguigu.util; import javax.servlet.http.HttpServletRequest; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; public class WebUtil { /** * 获取并返回当前请求的真实IP地址 */ public static String getRealIp(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } /** * 解析并返回指定参数名对应的值列表 */ public static String[] parseParamValues(String paramValueStr) throws Exception { if (paramValueStr != null && !"".equals(paramValueStr.trim())) { // 对传入的参数进行UTF8解码 String decodedParams = URLDecoder.decode(paramValueStr, StandardCharsets.UTF_8); return decodedParams.split(","); } else { throw new IllegalArgumentException("Parameter value string is empty or invalid."); } } } ``` 此代码展示了两个常用的方法——获取真实IP地址(`getRealIp`) 和 参数解析 (`parseParamValues`). 前者对于记录用户访问行为非常有用,而后者则有助于安全可靠地接收来自浏览器提交的数据。 #### 使用场景举例 假设有一个需求是在保存新事件之前验证用户的唯一身份标识符(UID)。可以利用上述提到的功能编写如下逻辑: ```java // 在某个Controller内部调用 String realUserIp = WebUtil.getRealIp(httpServletRequest); try { String[] parsedUids = WebUtil.parseParamValues(request.getParameter("uids")); for (String uid : parsedUids){ System.out.println("Processing UID: "+uid+" from IP:"+realUserIp); // 继续执行业务逻辑... } } catch(IllegalArgumentException e){ logger.error(e.getMessage()); } ``` 以上示例说明了如何结合使用这两个函数来进行基本的身份验证流程控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值