对于前面AdderServlet案例,它的sum实例变量用来累计客户端请求进行加法运算的和.sum变量的初始为100,如果第一个客户请求加上100,那么sum变量变为200,接着第二个客户请求加上200,那么sum变量变400,HTTP请求和线程,以及HTTP请求和sum变量之间存在以下对应关系: 一个HTTP请求对应一个工作线程. 所有HTTP请求对应同一个sum变量. 由此可以推断出,所有的工作线程对应同一个sum变量,因此AdderServlet把sum变量定义为实例变量时合理的.当多个线…
在Internet中,一个Web应用可能被来自西面八方的客户并发访问(即同时访问),而且有可能这些客户并发访问的是Web应用中的同一个Servlet,Servlet容器为了保证能同时相应多个客户端要求访问的同一个Servlet的HTTP请求,通常会为每个请求分配一个工作线程,这些工作线程并发执行同一个Servlet对象的service()方法. 当多个线程并发执行同一个Servlet对象的service()方法时,可能会导致并发问题. 例:下面的案例用于演示导致并发问题的情形. public c…
1.线程各种状态间的切换,用图表示的话简单清晰: 图出处:https://www.cnblogs.com/bhlsheji/p/5099362.html(博主对每个状态解释的清晰明了) 2.为什么需要同步:       java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,      从而保证了该变量的唯一性和准确性. 3.同步的方式--锁: 参考…
Java并发性和多线程: (中文,属于人工翻译,高质量):http://ifeve.com/java-concurrency-thread-directory/ (英文):http://tutorials.jenkov.com/java-concurrency/index.html 总结: 1.我的实践笔记:http://www.cnblogs.com/EasonJim/tag/java%E5%B9%B6%E5%8F%91%E6%80%A7%E5%92%8C%E5%A4%9A%E7%BA%BF%…
MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视图和控制器,它们分别担当不同的任务.图1显示了这几个模块各自的功能及它们的相互关系. 图1  MVC设计模式 1  视图 视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理.视图可以向模型查询业务状态,但不能改变模型.视图还能接收模型发…
●  列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFileServlet,用于列出Web应用系统中所有下载文件. ListFileServlet的代码如下: package com.xdl.servlet; import java.io.File; import java.io.IOException; import java.util.HashMap;…
在Web应用系统开发中,文件上传和下载功能是非常常用的功能. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载.common-fileupload是依赖于common-io这个包的,所以还需要下载这个包. 开发环境搭建…
感知Session绑定事件的监听器 保存在Session域中的对象可以有多种状态:绑定(session.setAttribute("bean",Object)到Session中:从Session域中解除(session.removerAttribute("bean")绑定:随Session对象持久化到一个存储设备中:随Session对象从一个存储设备中恢复. Servlet规范中定义了两个特殊的监听器接口HttpSessionBindingListener和Http…
监听域对象中属性变更的监听器 域对象中属性的变更的事件监听器就是用来监听ServletContext.HttpSession.HttpServletRequest这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener.HttpSessionAttributeListener和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加.删除和替换的事件,同一事件在…
4  监听HttpSession域对象的创建和销毁 HttpSessionListener接口用于监听HttpSession对象的创建和销毁. 创建一个Session时,激发sessionCreate(HttpSessionEvent event)方法. 销毁一个Session时,激发sessionDestroyed(HttpSessionEvent event)方法. 范例:编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSes…