如何通过servletcontext获取ip
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过servletcontext获取ip相关的知识,希望对你有一定的参考价值。
参考技术A public String getIpAddr(HttpServletRequest request)String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();本回答被提问者采纳
ServletContext对象
简述
ServletContext代表整个web应用,可以和程序的容器(服务器)来通信
获取
1. 我们可以通过request对象进行获取
request.getServletContext() |
获取ServletContext对象 |
2. 通过HttpServlet获取
this.getServletContext() |
获取ServletContext对象 |
注意这两种方式获取的对象都是同一个对象
功能
获取MINE类型
什么是MINE类型?->在互联网通信过程中定义的一种文件数据类型的标准
格式:大类型 / 小类型
例如:text/html image/jpeg
String getMimeType(String file) | 根据文件类型获取mine类型 |
所有的文件类型和mine类型的映射关系都在服务器的web.xml里有,每次通过配置文件查看mine类型又有风险,而ServletContext类又恰好能和服务器进行通信,所以能通过它的方法查找mine类型
共享数据
ServletContext是一个域对象,和request域对象一样可以共享数据
ServletContext对象范围:所有用户所有请求的数据
ServletContext对象的生命周期:服务器启动被创建,服务器关闭才会被销毁
setAttribute(String name,Object value) | 存放键值对 |
getAttribute(String name) | 根据键名获取值 |
removeAttribute(String name) | 根据键名移除值 |
获取文件真实路径
我们可以通过getRealPath方法获取文件的真实路径
String getRealPath(String path) | 获取文件的真实(服务器)路径 |
一般我们的配置文件有三个位置供我们拜访,src目录下、web目录下、WEB-INF目录下
我们调用getRealPath的参数是从web目录下开始的,也就是说例如你的web目录下有个c.txt,则这样写就行
String contextPath = servletContext.getRealPath("/c.txt");
而如果放在了WEB-INF下则要进入WEB-INF目录
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
如果放在了src目录里,因为打包后src目录会变成WEB-INF下的classes文件,所以要进入classes目录
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
当然你可以通过class或者类加载器获取src目录
以上是关于如何通过servletcontext获取ip的主要内容,如果未能解决你的问题,请参考以下文章
ServletContext January 27,2020