Servlet之ServletContext以及文件操作
ServletContext
------------------------------------
ServletContext是什么? 与cookie,session比较。 可以把它想象成一个共用的空间,可以被所有的客户访问。 可以被很多客户同时共享的(同时用不同浏览器访问该服务器可以得到),反正,session则不可以。
servletContext的使用
1.如何得到ServletContext实例 this.getServletContext()
2.想象成一个表,两列,名字(String类型)+值(object类型)
添加属性: setAttribute(String,Object ob);
得到值:getAttribute(String name)返回Object
删除属性:removeAttribute(String name)
3.生命周期
ServletCongtext中的属性生命周期从创建开始,到服务器关闭结束。 存在servletContext中的数据会长时间保存在服务器,会占用内存,因此建议不要添加过大的数据。
以下是简单代码:
servletContextTest1:
//req:用于获取客户端(浏览器)的信息
//res:用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { res.setContentType("text/html;charset=gbk");
PrintWriter pw = res.getWriter(); //1.得到servletContext
ServletContext sc=this.getServletContext(); //2.添加属性
sc.setAttribute("myInfo", "快乐的小尾巴");
pw.println("给servletContext添加一个属性myInfo,对应的内容是--快乐的小尾巴<br>"); //比较session
HttpSession hs=req.getSession();
hs.setAttribute("test", "快乐的小耳朵");
hs.setMaxInactiveInterval(60*3);
pw.println("向session中添加一个test属性,他的值是--快乐的小耳朵"); }
servletContextTest2:
//req:用于获取客户端(浏览器)的信息
//res:用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { res.setContentType("text/html;charset=gbk");
PrintWriter pw= res.getWriter();
//1.得到servlet context
ServletContext sc=this.getServletContext();
//2.得到属性和对应的值
String info=(String)sc.getAttribute("myInfo");
pw.println("从servletContext中得到属性myInfo,内容是--"+info+"<br>"); //比较session
HttpSession hs=req.getSession();
String val=(String)hs.getAttribute("test");
pw.println("session中的test--"+val+"(换一个浏览器打开就不同了,相当于换了客户端)");
}
可从中看出servletcontext与session不同以及servletcontext基本使用
servletcontext实例
1、网站计数器 (在网站建设中,经常会统计某个网页被点击(浏览)的次数。 )
怎样才算是有点的点击?
1、只要访问过该网页,就算是一次,刷新一次也算,这是最简单的,有点虚假。
2、不同的ip访问该网页,算一次有效点击;如果同一个ip在一定时间(比如一天),不管多少次算一次。
3、用户退出网站,在访问也算一次。
方案:
1、某个用户访问网页时,就在数据库增加一次。
缺点:对数据库访问太频繁,服务器压力大。 优点:好实现。
2、设置一个静态变量,当服务器启动时,可以通过文件或表初始化该变量,当服务器关闭时,再将变量的值写到文件或者数据库中。
缺点:实现复杂,要求对文件操作。 优点:效率高,不会频繁访问文件或数据库。
3、使用ServletContext。实现和第二种很相似。
2、网站在线用户提示
3、简单的聊天系统。。。。 如果是涉及到不同用户共享数据,而这些数据量不大,同时又不希望写入数据库,我们就可以考虑使用servletContext来实现。
servlet操作文件
因为servlet本是一个java文件,因此servlet中操作文件和普通java文件操作一样。
举例:
ServletFileTest1:
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { try{
res.setContentType("text/html;charset=gbk");
PrintWriter pw = res.getWriter();
//创建一个FileReader
FileReader f=new FileReader("f:\\test.txt"); BufferedReader bw=new BufferedReader(f); //读出一行数据
String numval=bw.readLine(); //读完文件之后一定要关闭文件流,放在finally更好
bw.close(); pw.println("从文件中读取的数据是:"+numval);
}catch(Exception e){
e.printStackTrace();
} }
ServletFileTest2:
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try{
res.setContentType("text/html;charset=gbk");
PrintWriter pw= res.getWriter(); //创建一个FileReader 看内存数据——>磁盘文件(写入,输出)
//磁盘->内存(读入,输入)
FileWriter f=new FileWriter("f:\\test2.txt");
BufferedWriter bw=new BufferedWriter(f); //在文中写入数据
bw.write("123"); //关闭文件流
bw.close(); pw.print("在文中写入数据");
}catch(Exception e){
e.printStackTrace();
}
}
Servlet之ServletContext以及文件操作的更多相关文章
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- Servlet总结二(文件路径)
Servlet总结二(文件路径) 前言 前面我们说过ServletContext表示的是web容器中的上下文,下面我们也是用到ServletContext中的方法读取文件 读取WebRoot文件下的文 ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- File文件以及.propertites文件操作
File文件操作 在jsp和class文件中调用的相对路径不同.在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用Syste ...
- File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
- 2.深入学习Servlet的ServletContext对象
一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...
- servlet技术之下载文件演示(DownloadServlet.class)
servlet技术之下载文件演示(DownloadServlet.class) 文件是指把服务器端文件发送到客户端,Servlet能够向客户端发送任意格式的文件数据,例程的DownloadServle ...
- Java审计之文件操作漏洞
Java审计之文件操作漏洞篇 0x00 前言 本篇内容打算把Java审计中会遇到的一些文件操作的漏洞,都给叙述一遍.比如一些任意文件上传,文件下载,文件读取,文件删除,这些操作文件的漏洞. 0x01 ...
- Servlet、ServletContext与ServletConfig的详解及区别
Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...
随机推荐
- 在mac上访问自带服务器权限问题
在开发中,有时候我们需要自己的在电脑上做一些网络相关的测试功能,因此,我们必须在本地上模拟网络环境. 在模拟网络环境中,经常会遇到访问权限的问题.现在我就把自己的解决办法写出来.我用的模拟服务器站点是 ...
- 兔子--Android中的五大布局
LinearLayout:被称为线性布局,分为水平和垂直,设置的垂直或水平的属性值,来排列全部的子元素.全部的子元素都被堆放在其他元素之后,因此一个垂直列表的每一行仅仅会有一个元素,而无论他们有多宽, ...
- 赵雅智_BroadcastReceiver
BroadcastReceiver 用于接收程序(包含用户开放的程序和系统内建程序)所发出的Broadcast intent 耗电量 开机启动 窃取别人短信 窃取别人电话 开发: 创建须要启动的Br ...
- Rabbit and Grass(杭电1849)(尼姆博弈)
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- c# 针对不同数据库进行参数化查询
使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序.OLEDB.SqlClient 和 Oracle 提供程序全部使用不同的语法.例如,用于命名和指定参数的 S ...
- iOS 点转成字符串,再字符串转换成点
CGPointFromString(<#NSString *string#>) NSStringFromCGPoint(<#CGPoint point#>)
- C# XML与Json之间相互转换
XML转换为Json字符串 在代码中预定义的一个xml字符串,如下: string xml = @"<?xml version=""1.0"" ...
- 向上取整Ceil,向下取整Floor,四舍五入Round
几个数值函数的功能实现: (1)int Ceil(float f) int Ceil(float f) { int integer = (int)f; if (f > (float)intege ...
- 共享bean
到此为止,对于jsp:useBean创建的对象,我们都将它们看作是_jspService方法中的局部变量来处理(jspService由页面生成的servlet的service方法调用).虽然bean的 ...
- PHP系列笔记——Zend_Controller工作流程
Zend_Controller_Front接收请求,然后调用Zend_Controller_Router_Rewrite来决定哪个控制器被派遣.为了在请求中设置控制器和动作名称,Zend_Contro ...