如何确定通过哪个IP地址访问了我的网站? - java

我有一个Web应用程序,为此,我想捕获正在访问我的网站的客户端的IP地址,以便我可以知道哪个区域是访问该应用程序最多的区域。我在我的应用程序中使用Java EE

如果我们讨论头文件以及何时从最终用户发送request,可能会有一些解决方案。

参考方案

使用接口getRemoteAddr()中的方法ServletRequest或接口getHeaders()中的方法HttpServletRequest:

HttpServletRequest httpRequest = (HttpServletRequest) request;
String userIpAddress = httpRequest.getHeader("X-Forwarded-For");

使用getRemoteAddr方法有一个注意事项:

当然,您可以使用该方法,并且在一般情况下,您将获得客户端的IP。但是,如果用户位于代理之后,则该方法无用。在这种情况下,您将获得代理服务器的IP地址,而不是客户端。但是代理可以在特殊的HTTP标头中包含发出请求的客户端IP。因此,要检索真实客户端IP调用方法getHeader("X-Forwarded-For")

在JSP中的示例用法:

在使用JSTL的会话中使用IP地址的设置值:

<c:set var="userIp" value="${requestScope.header('x-forwarded-for')}" scope="session" />

然后在方便的位置从会话中获取此值。

在JSP中,您可以使用<c:out value="${sessionScope.userIp}" />或在servlet中使用session.getAttribute('userIp');
请阅读docs:

java.lang.String getRemoteAddr()返回发送请求的客户端或上一个代理的Internet协议(IP)地址。

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…