理论:
任何一个web项目只有一个ServletContext对象
ServletContext对象在tomcat服务器启动时创建对象,
tomcat服务器关闭时销毁对象,cpu会将该对象进行释放内存
作用:让同一个项目中的所有Servlet共享数据。
1.共享静态数据
2.共享动态数据
3.共享文件数据
package com.servlet; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet1 */ @WebServlet("/Servlet1") public class Servlet1 extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public Servlet1() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ /* * 浏览器none do-get请求 * 第二个对象 ServletContext {con 上下文 } tomcat 服务器为每个项目创建一个对象 ServletContext 1个web项目只有一个ServletContext对象 ServletContext 服务器开始创建 结束是 没有 ServletContext 作用 同一个项目共享数据。 1 共享静态数据 2 共享动态数据 3 共享文件数据 * */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置 发送给浏览器的文本信息HTML文本格式 //response.setContentType("text/html"); response.setContentType("text/html"); //设置发送给浏览器文本utf-8 //response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //因为浏览器是使用get请求 //所以Servlet do-get //servlet1相打篮球 //1获取ServletContext对象 ServletContext sc=getServletContext(); //获取web.xml文件中的镜头数据 String a=sc.getInitParameter("lq"); //获得servlet4共享的排球 String b= (String) sc.getAttribute("pq"); //删除排球 sc.removeAttribute("pq"); //给浏览器发送数据 response.getWriter().append("Servlet1获得静态数据用来访问lq:"+a); response.getWriter().append("Servlet1获得静态数据用来访问pq:"+b); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
package com.servlet; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet2 */ @WebServlet("/Servlet2") public class Servlet2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public Servlet2() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //设置 发送给浏览器的文本信息HTML文本格式 //response.setContentType("text/html"); response.setContentType("text/html"); //设置发送给浏览器文本utf-8 //response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //因为浏览器是使用get请求 //所以Servlet do-get //servlet1相打篮球 //1获取ServletContext对象 ServletContext sc=getServletContext(); //获取web.xml文件中的镜头数据 String a=sc.getInitParameter("zq"); //给浏览器发送数据 response.getWriter().append("Servlet2获得静态数据用来访问zq:"+a); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
package com.servlet; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet3 */ @WebServlet("/Servlet3") public class Servlet3 extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public Servlet3() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //设置 发送给浏览器的文本信息HTML文本格式 //response.setContentType("text/html"); response.setContentType("text/html"); //设置发送给浏览器文本utf-8 //response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //因为浏览器是使用get请求 //所以Servlet do-get //servlet1相打篮球 //1获取ServletContext对象 ServletContext sc=getServletContext(); //获取web.xml文件中的镜头数据 String a=sc.getInitParameter("lq"); //给浏览器发送数据 response.getWriter().append("Servlet3获得静态数据用来访问lq:"+a); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }
package com.servlet; /* * ServletContext {con 上下文 } tomcat 服务器为每个项目创建一个对象 ServletContext 1个web项目只有一个ServletContext对象 ServletContext 服务器开始创建 结束是 没有 ServletContext 作用 同一个项目共享数据。 1 共享静态数据 2 共享动态数据 3 共享文件数据 * 创建对象 ServletContext sc=getServletContext();获取对象 * sc.setAttribute("pq", "排球"); 接收对象 * 删除对象 sc.removeAttribute("pq"); */ import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet4 */ @WebServlet("/Servlet4") public class Servlet4 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() * 由个人共享出来的动态数据 */ public Servlet4() { super(); // TODO Auto-generated constructor stub } /** * 创建对象 ServletContext sc=getServletContext();获取对象 * sc.setAttribute("pq", "排球"); 接收对象 * 删除对象 sc.removeAttribute("pq"); * * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //servlet4共享班级 共享数据 //共享动态数据 response.setContentType("text/html"); //设置发送给浏览器文本utf-8 //response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //获取ServletContext 对象 ServletContext sc=getServletContext(); //将排球共享数据 setAttribute方法共享数据。 //在java中object是任何数据类型的父类。 //身份的多种类型;向上转型 sc.setAttribute("pq", "排球"); //身份的多种类型;向上转型(强制转型) //获得动态数据 //疯狂java讲义 //getimitParameter只能获得静态数据 String a= (String) sc.getAttribute("pq"); response.getWriter().append("Servlet4获得动态数据 "+a); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
package com.servlet; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet5 */ @WebServlet("/Servlet5") public class Servlet5 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Servlet5() { super(); // TODO Auto-generated constructor stub } /** * @param bytes * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response, byte[] bytes) throws ServletException, IOException { // 获得text.txt完整路径 ServletContext sc=getServletContext(); //指定文件名称获取完整路径 String path=sc.getRealPath("text.txt"); //控制台打印输出文件完整路径 System.out.println(path); //将text.txt读取出来 //IO inputStream /outputStream输出流。 //网上下载的图片以自己为主场输入 //总结:始终以自己为主场,观察数据流向。 InputStream is=sc.getResourceAsStream("/text.txt"); //分析:1假设text.txt一部的小说 //当读去大量数据,分段读取,部分读取 //1024个字节 512个字 1kb=1024 byte[] bytes1 =new byte[1024]; //分析:2假设text.txt //当少量数据数据非常少的时刻 //定义一各变量 ,用于记录字节数 判断>1024 int count=-1; //-1标记读取结束 //定义一个字符串读取部分 String sum=""; //循环读取 while ((count =is.read(bytes1 ))!=-1) { //读出bytes,0.数据转字符串 String s =new String(bytes1 ,0,count); sum+=s; } System.out.println(sum); //response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
lo流
按操作数据单位分为:字节流、字符流
对于文本文件(.txt,.java,.c,.cpp),使用字符流处理
对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,…),使用字节流处理
按数据的流向分为:输入流、输出流
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。
按流的角色分为:节点流、处理流
节点流:直接从数据源或目的地读写数据。
处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
总结
ServletContext 作用 同一个项目共享数据。
1 共享静态数据
2 共享动态数据
3 共享文件数据
第二点
response.setContentType("text/html"); //设置发送给浏览器文本utf-8 //response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //获取ServletContext 对象 ServletContext sc=getServletContext(); * sc.setAttribute("pq", "排球"); 接收对象 * 删除对象 sc.removeAttribute("pq");
第三点
// 获得text.txt完整路径 ServletContext sc=getServletContext(); //指定文件名称获取完整路径 String path=sc.getRealPath("text.txt"); //控制台打印输出文件完整路径 System.out.println(path); //将text.txt读取出来 //IO inputStream /outputStream输出流。 //网上下载的图片以自己为主场输入 //总结:始终以自己为主场,观察数据流向。 InputStream is=sc.getResourceAsStream("/text.txt"); //分析:1假设text.txt一部的小说 //当读去大量数据,分段读取,部分读取 //1024个字节 512个字 1kb=1024 byte[] bytes1 =new byte[1024]; //分析:2假设text.txt //当少量数据数据非常少的时刻 //定义一各变量 ,用于记录字节数 判断>1024 int count=-1; //-1标记读取结束 //定义一个字符串读取部分 String sum=""; //循环读取 while ((count =is.read(bytes1 ))!=-1) { //读出bytes,0.数据转字符串 String s =new String(bytes1 ,0,count); sum+=s; } System.out.println(sum);
流 |
InputSteam | Reader |
输出流 | OutputSteam | Writer |