春天没有得到的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
如other问题所述,您已经有了servlet- api在项目中,不需要将javax.servlet:servlet-api:2.5添加到您的项目定义中。因此,您应该能够access HttpServletRequest。
但是,如other问题中所述,您的版本为3.0.1的servlet-api不包含getRemoteAddr()方法,如果这是您想要使用的。
那么你会推荐我用什么来调用'getRemoteAddr()'? – Quillion 2014-12-06 23:14:34
如果您可以负担得起选择您的容器,那么其他答案是正确的,您将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
我可以使用任何我想要的东西,因为这只是为了学习目的而开展的有趣项目。然而,你说这个容器是什么? – Quillion 2014-12-06 23:42:44
我可能会补充:'确保你部署在支持3.1 api的容器中'。 – Michal 2014-12-06 23:12:59
我不能够感谢你。你是最棒的。我花了一个多星期的时间才得到答案,无济于事。 – Quillion 2014-12-06 23:13:20
不客气:) – Opal 2014-12-06 23:19:04