`
dupengtao
  • 浏览: 32964 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

自学Servlet_10_session(关于表单)

阅读更多

防止表单重复提交:

首先,在前台用js禁止。

其次:用session禁止(重点)。

许多框架的工作原理:

 

//产生表单
public class FormServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter  out = response.getWriter();
		
		
		String token = TokenProcessor.getInstance().generateToken();
		request.getSession().setAttribute("token", token);
		
		out.print("<form action='/day07/servlet/FormSubmitServlet' method='post'>");
			out.print("<input type='hidden' name='token' value='"+token+"'>");
			out.print("<input type='text' name='username'>");
			out.print("<input type='submit' value='提交'>");
		out.print("</form>");
		
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

class TokenProcessor{
	//1.  把构造方法私有
	//2.  自己产生一个类的对象
	//3.  定义一个方法返回上面产生的对象
	
	private TokenProcessor(){};
	public static final TokenProcessor instance = new TokenProcessor();
	public static TokenProcessor getInstance(){
		return instance;
	}
	
	public String generateToken(){
		
		//3843849384   9849238402840243802  983434
		String token = System.currentTimeMillis() + "" + new Random().nextInt(99999999);
		
		//数据指纹 数据摘要  md5
		try {
			MessageDigest md = MessageDigest.getInstance("md5"); 
			byte md5[] = md.digest(token.getBytes());   //128位  16【12,23,34,544543543543,】
			
			//base64编码    SABDSSDSD
			BASE64Encoder encoder = new BASE64Encoder();
			return encoder.encode(md5);
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException(e);
		}
	}
}

 测试servlet

public class FormSubmitServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		boolean b = isToken(request);
		if(!b){
			//用户带过来的令牌无效,阻止提交
			System.out.println("你是重复提交!!");
			return;
		}
		
		//用户带过来的令牌有效,处理提交
		request.getSession().removeAttribute("token");
		
		String username = request.getParameter("username");
		//把用户提交的数据保存到数据库中
		System.out.println("处理提交请求,把" + username + "保存到数库中!!");
		
	}

	//判断用户带过来的令牌是否有效
	private synchronized boolean isToken(HttpServletRequest request) {
		String client_token = request.getParameter("token");
		if(client_token==null){
			return false;
		}
		
		String server_token = (String) request.getSession().getAttribute("token");
		if(server_token==null){
			return false;
		}
		
		if(!client_token.equals(server_token)){
			return false;
		}
		
		return true;
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
 

 

分享到:
评论

相关推荐

    Servlet自学代码

    在本自学项目中,你将深入理解Servlet的工作原理,以及如何利用它来构建实际的Web应用。 首先,让我们了解Servlet的基本概念。Servlet是一个Java类,它扩展了`javax.servlet.Servlet`或实现了`javax.servlet....

    JSP网络开发实例自学手册

    6. **Servlet与JSP结合**:学习如何与Servlet协同工作,利用servlet处理业务逻辑,JSP则负责显示。 7. **错误与异常处理**:理解如何在JSP中捕获和处理运行时错误,提供友好的错误提示页面。 8. **MVC模式应用**:...

    java自学路线图java自学路线图.doc

    Java自学之路涵盖了许多核心知识点,从基础到高级,构建了一个完整的知识体系。以下是对这些知识点的详细解析: 1. **J2SE**:Java Standard Edition是Java的基础,它包括面向对象编程的核心概念,如封装、继承和...

    JSP网络开发实例自学手册(项目源码)

    6. **Servlet**:JSP最终会被编译为Servlet,它是JSP的后端处理引擎,负责处理请求和响应。 7. **MVC(Model-View-Controller)**:一种常见的架构模式,在JSP开发中,模型处理业务逻辑,视图负责显示,控制器接收...

    java自学==jsp实例

    JSP还提供了许多内置对象,如`request`、`response`、`session`和`application`等,它们对应于Servlet API中的对象,用于处理HTTP请求和响应。例如,我们可以使用`request.getParameter()`方法获取表单提交的数据: ...

    JSP程序设计从入门到精通,自学者适合

    3. **JSP内置对象**:JSP提供了一系列内置对象,如`request`、`response`、`session`、`application`等,方便开发者处理请求、响应、会话和应用级数据。 ### 二、JSP脚本元素 1. **脚本声明**(! %&gt;):用于定义...

    Java web自学课程安排.pdf

    5. **Servlet和JSP**:学习Servlet的使用和生命周期,了解Cookie、Session及其关系,以及Servlet的线程安全问题。同时,探讨JSP的声明、脚本片段、表达式、注释、指令和动作。 **第二阶段:Java Web综合应用** 1. ...

    Java自学知识点参考.doc

    Java自学知识点涵盖了许多核心领域,从基础的J2SE到高级的企业级开发技术。以下是这些知识点的详细解析: 1. **J2SE**: J2SE是Java标准版,包括面向对象编程的基础,如封装、继承和多态。理解内存管理,特别是递归...

    jsp自学课件超详细(近两百个幻灯片讲解)

    4. `session`:用于管理用户的会话信息。 5. `application`:对应于整个Web应用程序的范围。 6. `out`:用于输出数据到响应流。 7. `config`:包含Servlet的初始化参数。 8. `exception`:捕获页面中抛出的异常。 *...

    java自学路线

    - **表单验证**:实现客户端表单验证功能,提升用户体验。 - **Ajax异步通信**:掌握通过Ajax技术实现局部页面刷新的技术原理及应用。 #### 五、服务器端技术 (Servlet & JSP) ##### 1. Servlet基础 - **Tomcat...

    Javaweb程序设计教学大纲.pdf

    Java Web程序设计是一门针对计算机科学与技术专业和网络工程专业本科一年级学生的专业选修课程,旨在培养学生的JSP网页制作技术和自学、系统分析与设计的能力,为他们开发Web系统打下坚实基础。预备知识包括Java程序...

    jsp自学教程8例 1

    **JSP自学教程8例——深入理解Web开发技术** JSP(JavaServer Pages)是Java平台上的一种动态网页技术,它允许开发者将静态HTML与动态Java代码结合在一起,以创建交互式的网页应用。本教程旨在帮助初学者快速掌握...

    javaweb基础 ppt和案例

    JavaWeb技术是构建基于Java平台的互联网应用程序的重要组成部分,它主要涵盖了Servlet、JSP(JavaServer Pages)等核心概念。本教程"javaweb第一部分基础"旨在为初学者提供一个全面的学习路径,帮助他们理解并掌握...

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    《JSP动态网站开发基础教程与实验指导》可以作为JSP职业培训教材和各级院校JSP授课培训教程,也适合作为JSP自学资料和参考资料。 目录: 上篇 基础篇 1 第1章 JSP概述 1 1.1 JSP简介 1 1.1.1 JSP的形成及发展 1 ...

    《JSP程序设计》教学课件

    `&lt;jsp:action&gt;`则用于执行特定的动作,如包含其他页面、处理表单数据等。 2. **JSP脚本元素** 包括`&lt;% %&gt;`中的Java脚本段、`! %&gt;`的声明部分和`&lt;%= %&gt;`的表达式。脚本元素允许开发者在页面生命周期的特定阶段插入...

    J2EE学习路线及重要知识点.pdf

    Servlet的基本概念,web.xml配置,Web应用程序的结构,Servlet生命周期,HttpServletRequest和HttpServletResponse的常用方法,ServletContext类,HTTP协议(GET和POST请求),Cookie和Session管理,Application作用...

    Tomcat&amp;Beanutils&amp;用户登录案例.rar

    在这个案例中,可能会包含登录表单的HTML设计,后台处理登录请求的Servlet或Controller,以及与数据库交互的DAO(数据访问对象)层。开发者可能使用了Beanutils库来简化对象属性的设置和获取,使得代码更加简洁。 ...

    教学、学习必备:jsp教案

    本教程详细介绍了JSP(Java Server Pages)技术,旨在为初学者提供全面的学习资源,适用于教学与个人自学。课程分为多个章节,深入浅出地讲解了JSP的核心概念和技术。 ### 第1章 JSP简介 1.1 软件编程体系 软件编程...

    jsp网站(学生信息管理系统)

    在这个项目中,开发者通过自学JSP,利用其动态网页生成能力,构建了一个用于管理学生信息的系统。系统运行在单机版的Tomcat服务器上,展示了JSP在Web开发中的基础应用。 JSP是Java平台上的一个重要组成部分,它允许...

Global site tag (gtag.js) - Google Analytics