Struts(九)Struts2结果类型剖析
1.在struts.xml页面里面extends 的struts-default(结果类型)
(1)dispatcher---请求转发(系统默认)
(2)chain---action之间链接(也就是转发,由一个action转到另一个action,且在同一个请求中)
(3)redirect---重定向到一个资源
(4)redirecrAction---重定向到某个action上
2.采取请求转发的方式完成表单内容的添加会造成内容的重复插入。
add请求发送给servlet,该servlet有两个功能,添加功能与查询功能。当查询结果结束后,会将结果请求转发list页面显示出来。但是,如果客户在list页面点击刷新,则结果页面会出现两次信息的插入。
3.采取重定向的方式实现数据的添加不会导致数据的重复插入。
当用户发送add请求,servlet页面接受请求,同时处理add功能,再将结果重定向导ListServlet页面,在此页面上执行查询功能,最后将结果请求转发到list页面。客户在listServlet页面刷新,只会重复查询数据。
4.struts-default结果类型详将
(1)redirect,重定向之后拿不到请求
(2)redirectAction
例子:redirectLogin.jsp
<body>
<form action="RedirectAction">
<input type="text" name="username"><br>
<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
</body>
RedirectAction
public class RedirectAction extends ActionSupport { private String username; private String password; private String and; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAnd() { return and; } public void setAnd(String and) { this.and = and; } @Override public String execute() throws Exception { return SUCCESS; } RedirectAction2
RedirectAction2
public class RedirectAction2 extends ActionSupport { private String username; private String password; private String and; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAnd() { return and; } public void setAnd(String and) { this.and = and; } @Override public String execute() throws Exception { return SUCCESS; } }
redirectResult.jsp
<body>
<s:property value="username"/>
<s:property value="password"/>
<s:property value="and"/>
</body>
struts.xml
<action name="RedirectAction" class="com.liule.action.RedirectAction"> <result name="success" type="redirectAction"> <param name="actionName">RedirectAction2</param> <param name="username">${username}</param> <param name="password">${password}</param> <param name="and">${and}</param> </result> </action> <action name="RedirectAction2" class="com.liule.action.RedirectAction2"> <result name="success">/redirectResult.jsp</result> </action>
5.防止表单的重复提交
(1)通过重定向
(2)通过Session Token(session 令牌):当客户端请求页面时,服务器会通过token标签生成一个随机数,并且将该随机数放置到session当中,然后将该随机数发向客户端;如果客户端第一次提交,那么会将该随机数发往服务器,服务器会接收到该随机数并且与session中所保存的随机数进行比较,这时两者的值是相同的,服务器认为是第一次提交,并且将更新服务器的这个随机数值;如果此时再次重复提交,那么客户端发向服务器端的随机数还是之前的那个,而服务器端的随机数则已经发生了变化,两者不同,服务器就认为这是重复提交,进而转向invalid.token所指向的结果页面。
例子:struts.xml
<action name="TokenAction" class="com.liule.action.TokenAction"> <result name="success">/tokenResult.jsp</result> <result name="invalid.token">/tokenError.jsp</result> <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action>
tokenLogin.jsp
<s:form action="TokenAction" theme="simple">
username:<s:textfield name="username" ></s:textfield><br>
password:<s:password name="password"></s:password><br>
<s:token></s:token>
<s:submit value="sbmit"></s:submit>
</s:form>
http://www.cnblogs.com/liunanjava/p/4375462.html
浙公网安备 33010602011771号