项目需求做日志记录,所有非运行期异常都要捕获,并且记录
而记录时候需要记录下当前操作用户的Ip地址
此时如果在M层需要怎么做
现在只想到两种方法,一种是将M层的异常抛到C层,又Action捕获
另一种是在调用dao的时候传一个request
但这两种方法貌似都不符合MVC结构的设计思想
所有想问,有没有什么方法可以在M层直接获取用户的IP地址呢
而记录时候需要记录下当前操作用户的Ip地址
此时如果在M层需要怎么做
现在只想到两种方法,一种是将M层的异常抛到C层,又Action捕获
另一种是在调用dao的时候传一个request
但这两种方法貌似都不符合MVC结构的设计思想
所有想问,有没有什么方法可以在M层直接获取用户的IP地址呢
解决方案 »
- 高分 求助:现在拿到了移动工作流引擎接入说明书,老大要我整一个我们系统接入的文档
- common-vfs 操作(创建、删除、复制、移动)文件示例
- 关于tomcat启动报错的问题
- SSH 开发 tomcat 报错
- webservices应用中另外开一个线程做其它的服务,但是webservices请求却无响应
- 想要一个通用的jsp页面注册模块输入框的判断代码,最好是直接传入form来判断的那种?
- 谁能发一下hibernate的初级教程?
- 一道面试题
- 请教关于struts标签使用的问题
- 读取xml文件数据,插入到Oracle数据库产生乱码。
- jfreechart 能否在jsp让用户选择属性在生成图表呢?
- JTREE添加图片问题
可以将日志单独做出一个类出来,在C层捕获M层的异常,将异常或者操作信息与用户IP当做参数传入日志方法里吧。
在M层调用currentIP.get()就可以了,ThreadLocal可以保证线程安全的
另一个是用线程变量ThreadLocal,推荐使用。
为什么非要传request
ThreadLocal 的生命周期有多久
我试了楼上的方法,在登陆时候将IP地址放进ThreadLocal 变量中
但是后期有时候可以找到其中的值,有时候找不到
想不通,谁能给解释下么
你要搞明白,ThreadLocal顾名思义是线程的局部变量。也就是你之前set了值进去,如果你还在同一个线程中是可以get出来的,如果是另外一个线程get就不可以拿出来