一、写跳转用的发帖链接页面,点击后,对应的action中会对该次提交加上一个Token令牌
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<html:html lang="true">
<head>
<html:base />
<title>forum.jsp</title>
</head>
<body>
<html:link action="/publish.do?status=forTopic">我要发帖</html:link>
</body>
</html:html>
二、Action中的forTopic方法给该提交加令牌Token
package com.test.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.test.struts.form.PublishForm;
public class PublishAction extends DispatchAction {
//这个方法给publishTopic-1.jsp的链接加上令牌
public ActionForward forTopic(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PublishForm publishForm = (PublishForm) form;// TODO Auto-generated method stub
System.out.println("forTopic...");
this.saveToken(request);
return mapping.findForward("publishTopic");
}
//用于检查令牌是否过时,并做出相应处理
public ActionForward toTopic(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PublishForm publishForm = (PublishForm) form;// TODO Auto-generated method stub
if(isTokenValid(request)){ //如果两个Token相匹配的话
System.out.println("toTopic...");
String title = request.getParameter("title");
String content = request.getParameter("content");
request.setAttribute("title", title);
request.setAttribute("content", content);
this.resetToken(request);
return mapping.findForward("publishshow");
}else{
System.out.println("for resubmit error...");
return mapping.findForward("error");
}
}
}
三、发帖内容填写页面publishTopic.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>publishTopic.jsp</title>
</head>
<body>
<html:form action="/publish.do?status=toTopic" method="post">
<input type="text" name="title"/><br>
<input type="text" name="content"/><br>
<input type="submit" value="发表"/>
<input type="reset" value="重置"/>
</html:form>
<h1>good!!</h1>
</body>
</html:html>
四、提交后成功时显示的页面publishshow.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>publishshow.jsp</title>
</head>
<body>
<h1>发表后的文章信息:</h1>
<input type="text" value="<%=request.getAttribute("title") %>"/><br>
<input type="text" value="<%=request.getAttribute("content") %>"/>
</body>
</html:html>
五、后退浏览器重复提交后显示的页面error.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>error.jsp</title>
</head>
<body>
<h1>重复提交了!!!</h1>
</body>
</html:html>
六、struts-config.xml中对应的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="publishForm" type="com.test.struts.form.PublishForm" />
<form-bean name="tokenActionForm" type="com.test.struts.form.TokenActionForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="publishForm"
input="/error.jsp"
name="publishForm"
parameter="status"
path="/publish"
scope="request"
type="com.test.struts.action.PublishAction">
<forward name="publishTopic" path="/publishTopic.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
<forward name="publishshow" path="/publishshow.jsp"></forward>
</action>
<action
attribute="tokenActionForm"
parameter="status"
input="/error.jsp"
path="/tokenAction"
scope="request"
name="tokenActionForm"
type="com.test.struts.action.TokenActionAction">
<forward name="strutsToken1" path="/strutsToken1.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.test.struts.ApplicationResources" />
</struts-config>
分享到:
相关推荐
09 Struts_09Token : Structs的令牌机制,避免重复提交问题 10 Struts_10SmartUpload : structs的文件上传 11 Struts_11Internationalize : Structs的国际化和消息文件的使用 12 Struts_12GeneralApply : Structs的...
利用Token解决重复提交 Struts提供了一种机制来防止表单重复提交,即通过生成唯一的Token并在每次表单提交时检查该Token的有效性。 ##### 2.Struts应用的国际化 Struts支持通过配置资源文件实现国际化,使应用...
8. JSP页面使用Struts标签显示数据或进行其他操作。 ### 二、控制器组件 #### 1. struts-config.xml 这是Struts的核心配置文件,定义了Action、ActionForm、ActionMapping等元素,用于指导请求处理和视图渲染。 #...
Struts 支持使用 Token 来防止重复提交表单数据。在页面中可以通过 `<a href="mytoken.do"></a>` 的方式指向一个 Action,在该 Action 中保存一个 Token(如 `this.saveToken(request)`),然后在提交表单时验证 ...
本课件主要涵盖了Struts框架中的几个关键概念和技术,包括Validator框架、国际化支持、不同类型的DispatcherAction、动态ActionForm以及如何处理表单的重复提交等问题。以下是针对这些知识点的详细解释。 #### 二、...
- **防止表单重复提交**:通过使用令牌(token)机制来防止用户的重复提交操作。 - **Struts 验证框架**:Struts 提供了一个强大的验证框架,可以在客户端和服务器端对用户输入进行验证,确保数据的有效性和安全性...
Struts 1是一款经典的Java Web框架,由Apache软件基金会开发,它在2000年代初期广泛用于构建企业级Web应用程序。...然而,由于Struts 1的安全问题和现代框架的发展,现在更多推荐使用更新、更安全的框架来构建Web应用。
- **token防止表单重复提交拦截器**:防止用户重复提交表单。 - **自定义拦截器**:可以通过实现Interceptor接口来创建自定义拦截器。 #### 六、Hibernate基础 ##### 1. 持久化、持久层 - **持久化**:将内存中的...
总的来说,构建轻量级的消息推送client&server需要理解客户端与服务器之间的通信机制,熟悉Java编程,尤其是Struts2框架的使用,同时解决网络和DNS配置问题。通过这种方式,开发者可以为自己的项目定制适合的消息推...
这意味着一个用Java编写的SSO解决方案可以在不同的操作系统和硬件架构上无缝运行,只要这些环境支持Java虚拟机(JVM)。这为SSO系统的部署提供了极大的灵活性。 SSO的实现主要分为两类:同域和跨域。在同域环境下,...