这两天刚入手 Struts2. 遇到的问题多种多样,这不,今天又遇到了一个问题,花了一整天来研究。 虽说是浪费了时间,但是对于初学的我自认为学到很多,因为解决问题的过程收获是很多的。
问题如下:
请求页面返回这样的结果:
咋一看: 是空指针异常,但对入门Struts2 的我根本无从下手。 因为我的配置文件等等都没有问题,且其它类似的请求都能正常显示。
各种千寻万找,发现Action 类有这么一个语句 :
看到这样的语句,我相信有经验的同仁已经看出问题所在了,
是的。
就是 : user.xxx 的问题。
因为当 user 为空(null) ,如果其用 .(点) 的方式那么就是出现空指针异常,这在初学JAVA很常出现。(再次暴露了我是新手的身份!!)。
找到这个原因的大费周折,大张旗鼓,哎!!!!都是泪(谁让我是新手尼,不怪我)。
其实对我来说重要的不仅此,更重要的是。 怎么判断 user 何时为空何时不为空。
没有丧气的我再次发起“研究”:
先简要说下我此时业务逻辑,我是做登录功能:
a 路径-----------------------》 A 登录首页;
b 路径------------------------》 B 登录成功后的欢迎页。
我如果按正常流程:
先进a 路径--》看到 A登录首页--》填完信息 点击登陆请求到 b 路径----》看到B欢迎页。 这是没有问题的。
但是。我就突发奇想的直接 请求b 路径看看结果。 很遗憾,结果就是文章题目的错误。
那问题来了,user 是什么时候被实例化(不为空)呢?
a 路径吗,不太可能,那只有 A页面了。
去看看A页面:有这么一个地方很奇怪: 表单 form 里面有个
又是 user. 看来应该就是这里了。我再在次确认:
我删除 user. 直接 用 userPhone 和 userPassword 那么之前正常的 也会同样报错。所以我确认就是这里的错误了。
最终找到了自我总结的结论 : JSP 表单里面的 user. 当(submit)提交到 Action 后会实例化对应 Action 的 User 类。
哎算是一种收获吧。
我还注意到一些问题,可能对老手们习以为常,但对我来说还是初次体会到这种情况,小白们也可以去实践一下:
1, 当我从登录页成功跳到欢迎页(上文我说的正常情况),我用(Chrome) F5 刷新浏览器时总会弹出这么一个提示框:
内容大概的意思是 : 会提交一些请求,要继续吗?
平时刷新浏览器什么都不会弹,但是这个却会弹框。 这个望大神赐教了。
2. 把当前登录成功后欢迎页上方的路径 复制到新开的的窗口打开 也是报错。我自己认为这和第1点有些关系。 我觉得 F5 刷新和 建立新的请求时不一样 。 具体请大神们点评了。
3. 我在欢迎页JSP 随便加了一个按钮 “登录11” ,此时 登录Action 的 user(不为空)
随便请求到 另外的注册Action 吧。 按照正常流程然后点击该按钮, 结果是报错。 注册Action 也有 user. 的代码, 打印也是 null.
现在我大约的总结了: Struts2 每次请求都是一个独立的Action ,action 之间对象不共享。