日期:2014-05-17  浏览次数:20748 次

高手帮忙,struts2获取客户端ip并存入数据库
现在,我想把访问者的ip获取到,并存入数据库,我想用户已访问index.jsp就记录到数据库,但是不知道用什么方法,是不是用拦截器啊,我没有玩过拦截器,大家帮忙一下,最好说清楚一点,小弟在此感谢了,
我先前写了一个现在已经可以获取到了ip了
HttpServletRequest req=(HttpServletRequest)ServletActionContext.getRequest();

String visitorIp=req.getRemoteAddr();
String visitorhost = req.getRemoteHost();
int visitorPort=req.getRemotePort();
String visitorUsername=req.getRemoteUser();
String visitorUrl=req.getRequestURI();

可以System.out.println("访问者的ip是"+visitorIp);出来

但是我想保存到我的数据库,又报开空指针
我的环境是s2sh的我写了个Visitor的javabean代码如下
public class Visitor {
private Integer id;
private String ipaddress;
private Date date;
private String host;
private String url;
省了getter和setter方法
我现在往这个visitor中set获取的ip时就报空指针
请大家帮帮忙,主要告我一下拦截器这么用在这里,还有就是获取到ip后这么放到visitor对象里,存进数据库

------解决方案--------------------
我想是不是你要对visitorIp的值进行判断,if(visitorIp==null)visitorIp="";
不知道对不对,新手。
------解决方案--------------------
struts2的bean中的值不是和jsp上面的属性自动映射的吗?如果是取不到,是不是属性不一致造成的?楼主可以在jsp中用一个隐藏字段存放ip.
------解决方案--------------------
是哪里报的空指针?
------解决方案--------------------
或者说,你的spring没有配置这个类?
------解决方案--------------------
引用:
我现在往这个visitor中set获取的ip时就报空指针

在java里面,即使你set一个null给对象也不会报异常的。
只有在什么情况下会报异常呢?就是zsz0147所说的那样。
你的对象并没有实例化。即:Visitor v = new Visitor();
如果你没有采用关键字new来实例化这个Visitor 对象的话。
不管你set何值。都会报空指针异常
------解决方案--------------------
在Action 中 把reqeust 取出来 就一样的用了撒
------解决方案--------------------
1.
  当访问index.jsp 页面时。你可以拦截它。在action中.用request 得到远程的ip地址。

2.
  在action是把得到的ip存入数据库.
------解决方案--------------------
留名,查看结果。。。。
------解决方案--------------------
第三个问题就是,这么样让我的这个action起拦截作用?????让客户访问时先经过这个action,再转到主页,web.xml中不能把action设置成欢迎页面啊,我的意思是先进一个index.jsp 然后重定向到visitorAction,这样倒是可以实现,但是记录访问次数和获取ip是这样做吗????

可以这样的。