现在有个工程Demo,里面有个action为DemoAction
代码如下 public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
cn.suiyang.common.DataBaseAccess dba = new DataBaseAccess();
dba.doUpdate("insert into demo values('aa');", new String[] {});
return mapping.findForward("dd");
}
应为是做测试 所以ActionForward的名字是随便取的--dd 请原谅我编程的不严谨作风吧 :)这是我struts-config.xml文件下面的相关的信息<action path="/demo" type="cn.suiyang.struts.action.DemoAction" >
<forward name="dd" path="/2.jsp" ></forward>
</action>
然后我进入我的actionforward里面
http://127.0.0.1/Demo/demo.do进行一次数据插入 检查数据插入成功
但这个时候 我的浏览器的URL仍然为 http://127.0.0.1/Demo/demo.do
我F5 刷新后 发现又插入一条数据
结论:
这样是肯定不行的 这样的话很容易影响到数据里面的数据 解决方案
在刚才的struts-config.xml文件下面加上
redirect="true"<action path="/demo" type="cn.suiyang.struts.action.DemoAction" >
<forward name="dd" path="/2.jsp" redirect="true" ></forward>
</action>
然后进行测试 输入http://127.0.0.1/Demo/demo.do
进行一条语句插入 插入成功
然后action重定向到我的2.jsp页面上面
这个时候 我的浏览器的URL为 http://127.0.0.1/Demo/2.jsp
我F5 刷新后 没有插入数据(这不是废话么...)
最后的结论:
这个解决方案解决了使用转发然后刷新重复进行数据库操作
但是自己想了想 这样做有个问题
既然是重定向 那么request里面的attribute就会没用 也就是说 会被完全清空
只能使用session以上的spoce来进行数据的传递工作
这样对效率是不是大大降低了?
我所知道的一个原则就是 能用request就不用session 能用session就不使用appliction (appliction我认为是用的很少的)所以在这个问题是 我有些犹豫
在这里请教各位有项目经验和高手们 在开发的时候 这个问题是如何解决的?
能不能既能解决了使用转发然后刷新重复进行数据库操作,然后我又可以使用request来进行数据传递工作呢?
我真喜欢鱼和熊掌能兼得也 :)
代码没有什么复杂的地方 显的比较罗嗦 勿怪 勿怪.
代码如下 public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
cn.suiyang.common.DataBaseAccess dba = new DataBaseAccess();
dba.doUpdate("insert into demo values('aa');", new String[] {});
return mapping.findForward("dd");
}
应为是做测试 所以ActionForward的名字是随便取的--dd 请原谅我编程的不严谨作风吧 :)这是我struts-config.xml文件下面的相关的信息<action path="/demo" type="cn.suiyang.struts.action.DemoAction" >
<forward name="dd" path="/2.jsp" ></forward>
</action>
然后我进入我的actionforward里面
http://127.0.0.1/Demo/demo.do进行一次数据插入 检查数据插入成功
但这个时候 我的浏览器的URL仍然为 http://127.0.0.1/Demo/demo.do
我F5 刷新后 发现又插入一条数据
结论:
这样是肯定不行的 这样的话很容易影响到数据里面的数据 解决方案
在刚才的struts-config.xml文件下面加上
redirect="true"<action path="/demo" type="cn.suiyang.struts.action.DemoAction" >
<forward name="dd" path="/2.jsp" redirect="true" ></forward>
</action>
然后进行测试 输入http://127.0.0.1/Demo/demo.do
进行一条语句插入 插入成功
然后action重定向到我的2.jsp页面上面
这个时候 我的浏览器的URL为 http://127.0.0.1/Demo/2.jsp
我F5 刷新后 没有插入数据(这不是废话么...)
最后的结论:
这个解决方案解决了使用转发然后刷新重复进行数据库操作
但是自己想了想 这样做有个问题
既然是重定向 那么request里面的attribute就会没用 也就是说 会被完全清空
只能使用session以上的spoce来进行数据的传递工作
这样对效率是不是大大降低了?
我所知道的一个原则就是 能用request就不用session 能用session就不使用appliction (appliction我认为是用的很少的)所以在这个问题是 我有些犹豫
在这里请教各位有项目经验和高手们 在开发的时候 这个问题是如何解决的?
能不能既能解决了使用转发然后刷新重复进行数据库操作,然后我又可以使用request来进行数据传递工作呢?
我真喜欢鱼和熊掌能兼得也 :)
代码没有什么复杂的地方 显的比较罗嗦 勿怪 勿怪.
看看struts的token机制
现在我使用token来防止重复提交
但是既然是转发 那么我上一次的一写参数都会显示在url里面 (用DispacthAction的时候,还有一些需要URL重写参数)
这个时候 我希望有个保密措施(虽然我知道 这依然不能"很"保密)那又怎么办呢?
用jsp做一个插入数据库的操作,成功后再刷新,同样还会再插入一次,
好的方案是插入操作完后转到显示页面,这样也可以查看入库是否成功!而不是强到到一个其它的页面,
就是用action的时候插入完以后 跳到另外一个ACTION(用来显示)里面在返回的到界面
但是我觉得这样跳2次 反而更加麻烦
用jsp做一个插入数据库的操作,成功后再刷新,同样还会再插入一次,
好的方案是插入操作完后转到显示页面,这样也可以查看入库是否成功!而不是强到到一个其它的页面,
假设我这个不是插入呢?
比如论坛回复,肯定直接跳回改页面,如果用JavaBean,你重定向到该页面不会与request有关。有时候action如果滥用反而不好,就好像很多主页是index.jsp而不是由index.do跳过去的
比如论坛回复,肯定直接跳回改页面,如果用JavaBean,你重定向到该页面不会与request有关。有时候action如果滥用反而不好,就好像很多主页是index.jsp而不是由index.do跳过去的
13L 你的办法我会去尝试 谢谢
15L 你好像没有看明天我的帖子 是我写的不够详细么?
参数加密成一个key,比如a.jsp?key=ADIUAWIJAOUFAWKEJWOIJOSAFHAOSIDHFOASIDF
struts自带的有解决方案