Servlet学习-查漏补缺

浏览器访问服务器的过程

1.用户通过浏览器访问url
2.客户机连上Web服务器
3.客户发送Http请求
4.服务器解释请求的 主机名 web应用 请求的页面
5.首次的访问Servlet文件会创建实例对象
6.调用Servlet的Init()方法完成Servlet的初始化
7.创建Requser和Responce对象
8.调用Servlet的Service()方法
9.执行Service()方法,将回送的数据写进到Responce对象,
10.Service()方法返回
11.从Responce对象中取出数据,构建Http响应回写给客户机。
12.服务器回写数据给客户端
13.浏览器根据Http响应显示页面。

Servlet的生命周期。

当服务启动,客户机访问Servlet时,首次访问的Servlet会创建实例,并且调用Init()方法对Setvlet完成初始化。
初始化之后,通过HttpServletRequser对象得客户端的请求数据调用Service()方法,
Service()方法执行后通过HttpServletResponce对象将数据返回给客户端。
当Web应用关闭或服务器被关闭,Servlet会调用destory()摧毁Servlet对象。

Servletcontext与ServletConfig的关系

ServletConfig:
        当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,ServletConfig中的参数是只提供给定义它的Servlet的,同一程序中的其他servlet是无法使用的,也就是说一个servlet的ServletConfig对象不能被另一个servlet访问。

ServletContext:

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。也就是说一个web应用中的所有Setvlet是共享一个ServletContext。ServletContex参数的是定义在整个程序中且独立于各个单独的servlet的,同时也提供给程序中的所有servlet。也可以这样认为ServletContext相当于全局变量,ServletConfig相当于局部变量。

ServletConfig的应用
|--获取Servle的初始化配置信息
   |--获得字符集编码
   String charset = this.config.getInitParameter("charset");
   |--获得数据库连接信息
   String url = this.config.getInitParameter("url");
   |--获得配置文件
   String configFile = this.config.getInitParameter("config");

Servletcontext的应用
  |--多个Servlet间实现数据共享(可能会有并发的线程安全问题)
    context.setAttribute("data", "共享数据"); //Servlet1向域中存了一个data属性
    String value = (String) context.getAttribute("data"); //Servlet2获取域中的data属性
  |--获取web应用的配置信息
    String url = this.getServletContext().getInitParameter("url");
  |--实现Servlet的转发
   this.getServletContext().getRequestDispatcher("/viewdata.jsp"). forward(request, response)
  |--读取资源文件
    |--使用ServletContext的getResourceAsStream方法:返回资源文件的读取字节流
        InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop = new Properties();
        prop.load(in);
         String url = prop.getProperty("url");
    |--使用ServletContext的getRealPath方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
        FileInputStream in = new FileInputStream(path);
        Properties prop = new Properties();
        prop.load(in);
        String url = prop.getProperty("url");
    |--使用ServletContext的getResource方法,获得一个url对象,调用该类的openStream方法返回一个字节流,读取数据
        URL url = this.getServletContext().getResource("/WEB-INF/classes/db.properties");
        InputStream in = url.openStream();
        Properties prop = new Properties();
        prop.load(in);
        String url1 = prop.getProperty("url");
    |--web工程中,不同位置的资源文件的读取方式
        |--当资源文件在包下面时
            InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
            System.out.println(in);
        |--资源文件在web-inf下
            InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
            System.out.println(in);
        |--资源文件在web工程中
            InputStream in = this.getServletContext().getResourceAsStream("/db.properties");
            System.out.println(in);
    |--在非servlet程序中如何读取配置文件:用类装载器(用类装载器读取资源文件时,千万要注意,资源文件绝对不能太大,否则极易导致内存溢出)
        |--用类装载方式读取(注意:在线程休眠过程中,即使改动了资源文件,获取到的还是原始内容)
            InputStream in = StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/context/db.properties");
            System.out.println(in);
        |--解决方案:用类装载方式读取,把资源当作url对待
            URL url = StudentDao.class.getClassLoader().getResource("db.properties");
            String path = url.getPath();  //这样可以获得资源文件名称
            FileInputStream in = new FileInputStream(path);
            Properties prop = new Properties();
            prop.load(in);
            System.out.println(prop.getProperty("url"));
            try {
                Thread.sleep(1000*15);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            in = new FileInputStream(path);
            prop = new Properties();
            prop.load(in);
            System.out.println(prop.getProperty("url"));

ServletConfig的应用与Servletcontext的应用

使用配置文件,类型的选择 :

1.xml 存进数据是有关系

2.properties 存进数据没关系

aaa

时间: 2024-10-11 07:46:41

Servlet学习-查漏补缺的相关文章

20165223 week2学习查漏补缺

标识符.字符集.关键字 基本数据类型 逻辑类型:boolean 常量:true.false 变量:boolean赋值 整数类型:byte.short.long.int 注意long型后缀L Java没有无符号的byte.short.long.int 字符类型:char char型无符号.无负数 浮点类型:float.double 单精度float型后缀F或f,保留8位有效数字 双精度double型后缀D或d可省略,保留16位有效数字 类型转换运算 精度从低到高:byte < short < c

laya学习查漏补缺

1.预设的使用(页面嵌套):可以在IDE编辑模式下把一个scene文件拖到另一个scene文件下2.scaleX或scaleY设置为-1,为镜像 3.文本滚动:overflow:scroll:不显示文本域外的字符像素,并且支持scroll接口. 4.位图字体的制作与使用 5.laya中的遮罩概念 6.图集动画: 动画加载图集: new Laya.Animation().loadAtlas() 内存加载图集资源:Laya.loader.load(url) 创建动画模板:animation.crea

《CSS权威指南》基础复习+查漏补缺

前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司,事情不算多,于是拿起<CSS权威指南>进行"基础学习"+"查漏补缺",本篇文章主要是总结了些自己认为CSS中值的注意的几个知识点(本文知识点仅限本书范围内,若要讲CSS全部样式,那本兽还是选择慢慢懵逼去~). 选择器 这里要说明的是类选择器的嵌套选择与多类

查漏补缺1

前言 Java的部分有基础.设计模式.IO.NIO.多线程,之后有时间还会把集合这 部分补上去,这么多内容里面,难免有一些知识点遗漏,本文主要是讲解这些遗漏的知识点.这些知识点,不是特别大的难点,所以没有必要专门写一篇文章讲解: 但是这些知识点,也不是一两句话就说得清楚的,所以放在这里.查漏补缺系列文章,每篇5个知识点,只要有值得研究的问题就会写上来. Thread.sleep(XXX)方法消耗CPU吗? 这个知识点是我之前认识一直有错误的一个知识点,在我以前的认识里面,我一直认为 Thread

20165239其米仁增第一周查漏补缺

第一周查漏补缺 上周我没有在课堂上完成考试内容,原因有以下几点: 第一,课余时间没有好好去敲课本上的java代码,我以后会在课余时间好好完成作业. 第二,因为今年寒假我回老家过年,那里没有网络,没有收到消息,所以在假期自学的时间比较短,在加上我自己母语是藏语,对汉文的理解能力有限,不像其他同学那样,自学起来就比较困难 第三:自己遇到问题时没有积极主动去找同学帮忙,而是自己一个人在那儿瞎弄,导致效率低下: 这周我吸取了上次考试的教训把第一章好好学了一遍,从java的网络,语言,需求等地位道java

第四周查漏补缺

第四周查漏补缺 第三周课下测试总结 课堂测试 考试时,题目要求的"N由命令行传入"我还没学会.于是编辑了以下代码,可以运行.通过键入N值来实现算法: 在课下学习中,还发现这段代码我用了两个类..在这个算法中没有对象,可以不需要用两个类,而且不同类应该单独存一个.java文件. 但我依然没有理解什么时候该分不同类对不同对象实现不同方法... 经过学习和修改后我修改了代码: 然后测试发现:输入5322,返回值sum太大溢出了.于是我把sum的类型改为了long,成功输出了值. 在和小组同学

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

查漏补缺——java多态

---恢复内容开始--- 刚学完java,开始了查漏补缺阶段阶段,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的不足,不要吝惜言语,也希望我的总结可以对别人有帮助,对自己对他人负责. 开始正文:术语多态:可以定义为“有多种形态”,多态引用是一个一个在不同时刻可以指向不同类型对象的引用变量.通过多态引用可以调用不同的具体的方法. 类方法的多态性的实现有两种方式: 1:方法重载:可以声明多个同名但是参数不同(个数.类型和顺序)的方法.注意呵呵重载方法只能声明在一个类里

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一