Request对象获取各种路径

本文介绍如何在Java Web应用中使用HttpServletRequest对象获取各种路径信息及客户端真实IP地址,特别是针对通过反向代理服务器的情况。


假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种路径信息如下
String path =request.getContextPath();//项目名称
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
StringremoteAddress=request.getRemoteAddr();
StringservletPath=request.getServletPath();
StringrealPath=request.getRealPath("/");
StringremoteUser=request.getRemoteUser();
StringrequestURI=request.getRequestURI();

out.println("path:"+path+"");
out.println("basePath:"+basePath+"");
out.println("remoteAddr:"+remoteAddress+"");
out.println("servletPath:"+servletPath+"");
out.println("realPath:"+realPath+"");
out.println("remoteUser:"+remoteUser+"");
out.println("requestURI:"+requestURI+"");

结果:
path:/WebDemo
basePath:http://localhost:8683/WebDemo/
remoteAddr:127.0.0.1
servletPath:/index.jsp
realPath:D:\apache-tomcat-6.0.13\webapps\WebDemo\
remoteUser:null
requestURI:/WebDemo/index.jsp

request.getHeader("Referer");//获得请求来源的全路径


//获取访问者IP
 3      * 
 4      * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
 5      * 
 6      * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
 7      * 如果还不存在则调用Request .getRemoteAddr()。
public static String getIpAddr(HttpServletRequest request) {
          
        String ip = request.getHeader("X-Real-IP");
               
   if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                       
           return ip;
         
   }
            
      ip = request.getHeader("X-Forwarded-For");
               
   if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                       
           // 多次反向代理后会有多个IP值,第一个为真实IP。
                       
           int index = ip.indexOf(',');
                      
            if (index != -1) {
                         
                   return ip.substring(0, index);
                    
              } else {
                              
                    return ip;
                 
           }
           
         } else {
                      
            return request.getRemoteAddr();
         
   }
 
}

import org.apache.commons.lang.StringUtils; 
这个是在commons-lang-2.5.jar包里面..
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值