一个工具类 RequestUtils

RequestUtils 这个类主要是用来获取关于请求的一些信息的工具类 

package my.util;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
 
/**
 * 用于处理HTTP请求的工具类
 * @author Winter Lau
 */
public class RequestUtils {
 
    /**
     * 获取客户端IP地址,此方法用在proxy环境中
     * @param req
     * @return
     */
    public static String getRemoteAddr(HttpServletRequest req) {
        String ip = req.getHeader("X-Forwarded-For");
        if(StringUtils.isNotBlank(ip)){
            String[] ips = StringUtils.split(ip,',');
            if(ips!=null){
                for(String tmpip : ips){
                    if(StringUtils.isBlank(tmpip))
                        continue;
                    tmpip = tmpip.trim();
                    if(isIPAddr(tmpip) && !tmpip.startsWith("10.") && !tmpip.startsWith("192.168.") && !"127.0.0.1".equals(tmpip)){
                        return tmpip.trim();
                    }
                }
            }
        }
        ip = req.getHeader("x-real-ip");
        if(isIPAddr(ip))
            return ip;
        ip = req.getRemoteAddr();
        if(ip.indexOf('.')==-1)
            ip = "127.0.0.1";
        return ip;
    }
 
    /**
     * 判断是否为搜索引擎
     * @param req
     * @return
     */
    public static boolean isRobot(HttpServletRequest req){
        String ua = req.getHeader("user-agent");
        if(StringUtils.isBlank(ua)) return false;
        return (ua != null
                && (ua.indexOf("Baiduspider") != -1 || ua.indexOf("Googlebot") != -1
                        || ua.indexOf("sogou") != -1
                        || ua.indexOf("sina") != -1
                        || ua.indexOf("iaskspider") != -1
                        || ua.indexOf("ia_archiver") != -1
                        || ua.indexOf("Sosospider") != -1
                        || ua.indexOf("YoudaoBot") != -1
                        || ua.indexOf("yahoo") != -1
                        || ua.indexOf("yodao") != -1
                        || ua.indexOf("MSNBot") != -1
                        || ua.indexOf("spider") != -1
                        || ua.indexOf("Twiceler") != -1
                        || ua.indexOf("Sosoimagespider") != -1
                        || ua.indexOf("naver.com/robots") != -1
                        || ua.indexOf("Nutch") != -1
                        || ua.indexOf("spider") != -1));    
    }
 
    /**
     * 获取COOKIE
     * 
     * @param name
     */
    public static Cookie getCookie(HttpServletRequest request, String name) {
        Cookie[] cookies = request.getCookies();
        if(cookies == null) return null;
        for (Cookie ck : cookies) {
            if (StringUtils.equalsIgnoreCase(name,ck.getName())) 
                return ck;          
        }
        return null;
    }
 
    /**
     * 获取COOKIE
     * 
     * @param name
     */
    public static String getCookieValue(HttpServletRequest request, String name) {
        Cookie[] cookies = request.getCookies();
        if(cookies == null) return null;
        for (Cookie ck : cookies) {
            if (StringUtils.equalsIgnoreCase(name,ck.getName())) 
                return ck.getValue();           
        }
        return null;
    }
 
    /**
     * 设置COOKIE
     * 
     * @param name
     * @param value
     * @param maxAge
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name,
            String value, int maxAge) {
        setCookie(request,response,name,value,maxAge,true);
    }
 
    /**
     * 设置COOKIE
     * 
     * @param name
     * @param value
     * @param maxAge
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name,
            String value, int maxAge, boolean all_sub_domain) {
        Cookie cookie = new Cookie(name, value);
        cookie.setMaxAge(maxAge);
        if(all_sub_domain){
            String serverName = request.getServerName();
            String domain = getDomainOfServerName(serverName);
            if(domain!=null && domain.indexOf('.')!=-1){
                cookie.setDomain('.' + domain);
            }
        }
        cookie.setPath("/");
        response.addCookie(cookie);
    }
     
    public static void deleteCookie(HttpServletRequest request,
            HttpServletResponse response, String name, boolean all_sub_domain) {
        setCookie(request,response,name,"",0,all_sub_domain);
    }
 
    /**
     * 获取用户访问URL中的根域名
     * 例如: www.dlog.cn -> dlog.cn
     * @param req
     * @return
     */
    public static String getDomainOfServerName(String host){
        if(isIPAddr(host))
            return null;
        String[] names = StringUtils.split(host, '.');
        int len = names.length;
        if(len==1) return null;
        if(len==3){
            return makeup(names[len-2],names[len-1]);
        }
        if(len>3){
            String dp = names[len-2];
            if(dp.equalsIgnoreCase("com")||dp.equalsIgnoreCase("gov")||dp.equalsIgnoreCase("net")||dp.equalsIgnoreCase("edu")||dp.equalsIgnoreCase("org"))
                return makeup(names[len-3],names[len-2],names[len-1]);
            else
                return makeup(names[len-2],names[len-1]);
        }
        return host;
    }
 
    /**
     * 判断字符串是否是一个IP地址
     * @param addr
     * @return
     */
    public static boolean isIPAddr(String addr){
        if(StringUtils.isEmpty(addr))
            return false;
        String[] ips = StringUtils.split(addr, '.');
        if(ips.length != 4)
            return false;
        try{
            int ipa = Integer.parseInt(ips[0]);
            int ipb = Integer.parseInt(ips[1]);
            int ipc = Integer.parseInt(ips[2]);
            int ipd = Integer.parseInt(ips[3]);
            return ipa >= 0 && ipa <= 255 && ipb >= 0 && ipb <= 255 && ipc >= 0
                    && ipc <= 255 && ipd >= 0 && ipd <= 255;
        }catch(Exception e){}
        return false;
    }
     
    private static String makeup(String...ps){
        StringBuilder s = new StringBuilder();
        for(int idx = 0; idx < ps.length; idx++){
            if(idx > 0)
                s.append('.');
            s.append(ps[idx]);
        }
        return s.toString();
    }
 
    /**
     * 获取HTTP端口
     * @param req
     * @return
     * @throws MalformedURLException
     */
    public static int getHttpPort(HttpServletRequest req) {
        try {
            return new URL(req.getRequestURL().toString()).getPort();
        } catch (MalformedURLException excp) {
            return 80;
        }
    }   
 
    /**
     * 获取浏览器提交的整形参数
     * @param param
     * @param defaultValue
     * @return
     */
    public static int getParam(HttpServletRequest req, String param, int defaultValue){
        return NumberUtils.toInt(req.getParameter(param), defaultValue);
    }
    /**
     * 获取浏览器提交的整形参数
     * @param param
     * @param defaultValue
     * @return
     */
    public static long getParam(HttpServletRequest req, String param, long defaultValue){
        return NumberUtils.toLong(req.getParameter(param), defaultValue);
    }
     
    public static long[] getParamValues(HttpServletRequest req, String name){
        String[] values = req.getParameterValues(name);
        if(values==null) return null;
        return (long[])ConvertUtils.convert(values, long.class);
    }
     
    /**
     * 获取浏览器提交的字符串参�?
     * @param param
     * @param defaultValue
     * @return
     */
    public static String getParam(HttpServletRequest req, String param, String defaultValue){
        String value = req.getParameter(param);
        return (StringUtils.isEmpty(value))?defaultValue:value;
    }
 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet获取request信息可以使用HttpServletRequest类提供的方法来实现,我们可以创建一个获取request信息的工具类。 首先,创建一个名为RequestUtils工具类,然后在类中添加一个名为getRequestParam()的静态方法。该方法接收一个HttpServletRequest对象作为参数,并返回一个Map对象,该Map对象存储了所有的请求参数和对应的值。 在getRequestParam()方法中,我们可以通过调用HttpServletRequest对象的getParameterMap()方法来获取请求参数的映射。然后,我们可以使用一个循环遍历这个参数映射,并将参数名和值添加到Map对象中。 下面是一个示例的RequestUtils工具类的代码: ```java import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; public class RequestUtils { public static Map<String, String> getRequestParam(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); Map<String, String[]> parameterMap = request.getParameterMap(); for (String paramName : parameterMap.keySet()) { String[] paramValues = parameterMap.get(paramName); String paramValue = ""; if (paramValues.length > 0) { paramValue = paramValues[0]; } paramMap.put(paramName, paramValue); } return paramMap; } } ``` 使用该工具类,我们可以在任何Servlet中调用getRequestParam()方法来获取请求的参数并存储到一个Map对象中。这样,我们就可以在处理请求时方便地访问和操作这些参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值