春天没有得到的javax.servlet IP地址和HttpServletRequest的

问题描述:

我有春天没有得到的javax.servlet IP地址和HttpServletRequest的

https://github.com/CarefreeCoding/Gradle-Spring-Hibernate-example

一个项目,我希望能够得到访问者的IP地址。要做到这一点,我需要使用HttpServletRequest,因为我通过搜索找到了。

但是javax.servlet库似乎找不到。

我试过在我的build.gradle脚本中包含'javax.servlet:servlet-api:2.5',但是这打破了我的项目,作为this question的解释。

所以问题是。我怎样才能使用从

'org.springframework:spring-core:4.1.2.RELEASE', 
    'org.springframework:spring-web:4.1.2.RELEASE', 
    'org.springframework:spring-webmvc:4.1.2.RELEASE', 
    'org.springframework:spring-orm:4.1.2.RELEASE', 
    'org.springframework:spring-context:4.1.2.RELEASE', 
    'org.springframework:spring-tx:4.1.2.RELEASE' 

获取访问者的IP地址?或者至少以某种方式访问​​HttpServletRequest。

修改的build.gradle在下列方式:

providedCompile 'javax.servlet:javax.servlet-api:3.1.0' //configuration taken from war plugin 

//below dependencies added because the app wasn't starting properly 
compile 'ch.qos.logback:logback-classic:1.0.13' 
compile 'ch.qos.logback:logback-core:1.0.13' 
compile 'log4j:log4j:1.2.17' 
compile 'org.slf4j:slf4j-api:1.7.5' 
compile 'org.slf4j:jcl-over-slf4j:1.7.5' 
compile 'org.slf4j:jul-to-slf4j:1.7.5' 
compile 'org.slf4j:slf4j-log4j12:1.7.5' 

然后修改src/main/java/example/controllers/IndexController.java

package example.controllers; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import javax.servlet.http.HttpServletRequest; 

@Controller 
@RequestMapping("/") 
public class IndexController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model, HttpServletRequest request) { 
     System.out.println("Request " + request.getRemoteAddr()); 
     model.addAttribute("message", "Hello World!!!"); 
     return "indexPage"; 
    } 
} 

它打印请求0:0:0:0:0:0: 0:1

+1

我可能会补充:'确保你部署在支持3.1 api的容器中'。 – Michal 2014-12-06 23:12:59

+0

我不能够感谢你。你是最棒的。我花了一个多星期的时间才得到答案,无济于事。 – Quillion 2014-12-06 23:13:20

+0

不客气:) – Opal 2014-12-06 23:19:04

other问题所述,您已经有了servlet- api在项目中,不需要将javax.servlet:servlet-api:2.5添加到您的项目定义中。因此,您应该能够access HttpServletRequest

但是,如other问题中所述,您的版本为3.0.1的servlet-api不包含getRemoteAddr()方法,如果这是您想要使用的。

+0

那么你会推荐我用什么来调用'getRemoteAddr()'? – Quillion 2014-12-06 23:14:34

+0

如果您可以负担得起选择您的容器,那么其他答案是正确的,您将servlet api升级到3.1,使用getRemoteAddr,但必须确保您的容器支持3.1。否则,你可能会看看头 - 从*.com/questions/527638/getting-the-client-ip-address-remote-addr-http-x-forwarded-for-what-else-coul - 你可以从http请求中获得,3.1中的getRemoteAddr()impl不能做更多的事情。 – Michal 2014-12-06 23:20:41

+0

我可以使用任何我想要的东西,因为这只是为了学习目的而开展的有趣项目。然而,你说这个容器是什么? – Quillion 2014-12-06 23:42:44