webwork做的网站,现在需要无论从网站任何一个页面进入网站,都能先从后台查询变量x然后设置变量x到session里,然后再在这个页面里把变量x取出来。
先在我的网站数据库中有个库存变量storage,int类型。设计网站时只是在打开首页index.jsp的时候先执行了后台index.action在里面查询了storage,然后设置到session中,在index.jsp页面中取到storage。但是如果首先打开其他页面由于没有先执行后台index.action,所以在这个页面取不到storage。我想在过滤器里打开每个页面时执行查询操作设置storage到session中,但是由于webwork中HttpSession httpSession = ServletActionContext.getRequest().getSession();但是由于不是在webwork的action中,所以ServletActionContext.getRequest()取到的request为空会报异常,所以该咋办?
webwork:打开网站任何一页前先查询变量然后设置到session里
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- Ryankay 2009-10-13 16:09关注
楼主,看来你对serlvet-jsp编程的基础方面有些薄弱。不管是用struts1,struts2,还是webwork。他们的原理都还是jsp-serlvet,所以,你也可以直接使用jsp-servlet编程。
所以你提到的过滤器里可以直接使用楼上所说的request.getSession(0;只不过,这里的request需要由ServletRequest 强制转换成HttpServletRequest。不要怀疑,直接强制转换即可!
当然就这个问题,我想说的还不止这些,关于思路方面,我觉得你的这个思路未免把问题看得太复杂。
事实上,你只需要写一个servlet,设置这个servlet在服务器启动的时候跟随启动[在web.xml里配置]
比如[code="java"]
JSPSupportServlet
org.apache.struts2.views.JspSupportServlet
4
[/code]在这个servlet里把你的库级变量存到application里,虽然我不知道你的需求。但是,如果是放到session里,对于每个用户都有一个session.这就如同多线程,你的这个变量并非线程安全的,就是说用户A拿了变量a后,用户B可能会执行修改变量a的行为。而反过来当用户A执行更新行为的时候,那么这个变量就已经是无效数据了,比如用户A拿到得是100,用户B拿到的是100,此时用户B执行了+1,那么数据库里是101了,但用户A手上还是100,用户A在执行+1后也是101,然后存入数据库,显然,本来应该是100+1+1=102的。所以我建议你建立一起全局变量,public static a;
并且在对a进行更新的方法内部必须调用加载a变量的方法。这样,在执行操作前变量a始终是最新的。我猜测你是做一个访问量统计吧,应该是类似的东西。但也许不是,希望对你有帮助。如果不是就权当讨论。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥20 想用ollama做一个自己的AI数据库
- ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
- ¥15 请问怎么才能复现这样的图呀