servlet

1.生命周期

a.构造方法。生成一个servlet

b.init()方法。当开启服务器时,servlet第一次被装载,servlet引擎调用这个servlet的init()的方法,只调用一次。系统保证,在init()方法成功以前,是不会调用servlet去处理任何请求的。

c.service()方法。这是servlet最重要的方法,是真正处理请求的地方。对于每一个请求,servlet引擎将调用servlet的service方法,并将servlet请求对象和servlet响应对象作为参数传递给它

d.destory()方法。这是相对于init()的可方法,当servlet即将被卸载时由servlet引擎来调用,这个方法用来释放init()方法中做分配的资源

2.servlet三大域对象的应用

a.ServletContext

(1).生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁

(2).作用范围:整个web应用

(3).作用:

①. 在不同的servlet之间转发getServletContext().getReauestDispatcher("/index.jsp").forword(request,response) 方法执行结束,service就会返回到服务器,再有服务器去调用目标servlet,其中request会重新创建,并将之前的request的数据拷贝进去

②. 读取资源文件。

i、由于相对路径默认相对的是java虚拟机启动的目录,所以我们直接写相对路径将会是相对于tomcat/bin目录,所以是拿不到资源的。   如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。

ii、为了解决这个问题ServletContext提供了: this.getServletContext().getRealPath("/1.properties"),给进一个资源的虚拟路径,将会返回该资源在当前环境下的真实路径。this.getServletContext().getResourceAsStream("/1.properties"),给一个资源的虚拟路径返回到该资源真实路径的流。

iii、当在非servlet下获取资源文件时,就没有ServletContext对象用了,此时只能用类加载器    classLoader.getResourceAsStream("../../1.properties"),此方法利用类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果文件太大,占用内存过大classLoader.getResource("../1.properties").getPath(),直接返回资源的真实路径,没有更新延迟的问题。

b.HttpSession域

(1).生命周期:(会话范围)在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存  中创建一个session并返回。 当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。 如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。  如果调用session提供的invalidate() ,可以立即销毁session。 注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,  则活化后session还是存在的。否则Session不存在。  如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失

(2).作用范围:一次会话。

c.ServletRequest域

(1).生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束

(2).作用范围:(请求范围)整个请求链(请求转发也存在)。

(3).作用:  在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。

JSP

1.运行方式

当服务器启动后,当Web浏览器端发送过来一个页面请求时,Web服务器先判断是否是JSP页面请求。如果该页面只是一般的HTML/XML页面请求,则直接将HTML/XML页面代码传给Web浏览器端。如果请求的页面是JSP页面,则由JSP引擎检查该JSP页面,如果该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将此JSP页面代码转换成Servlet代码,然后JSP引擎调用服务器端的Java编译器javac.exe对Servlet代码进行编译,把它变成字节码(.class)文件,然后再调用JAVA虚拟机执行该字节码文件,然后将执行结果传给Web浏览器端。如果该JSP页面不是第一次被请求,且没有被修改过,则直接由JSP引擎调用JAVA虚拟机执行已编译过的字节码.class文件,然后将结果传送Web浏览器端。

2.PageContext域

(1).生命周期:当对JSP的请求时开始,当响应结束时销毁

(2).作用范围:(页面范围)整个JSP页面,是四大作用域中最小的一个。

    作用:

        (1)获取其它八大隐式对象,可以认为是一个入口对象。

        (2)获取其所有域中的数据

            pageContext  操作所有域中属性的方法

              public java.lang.Object getAttribute(java.lang.String name,int scope)       

 public void setAttribute(java.lang.String name, java.lang.Object value,int scope)

              public void removeAttribute(java.lang.String name,int scope)

              pageContext 中代表域的常量

                PageContext.APPLICATION_SCOPE

                PageContext.SESSION_SCOPE

                PageContext.REQUEST_SCOPE

                PageContext.PAGE_SCOPE

 findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域

从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null(与el表达式不同,此处返回null,对网页是不友好的)

(3)跳转到其他资源      其身上提供了forward和include方法,简化重定向和转发的操作

3.九大内置对象

 

request内置对象     java.servlet.HttpServletRequest类

response内置对象  javax.servlet.HttpServletResponse类的对象

page内置对象         java.lang.Object类的对象

session内置对象     java.servlet.http.HttpSession类的对象

application内置对象 javax.servlet.ServletContext

out内置对象   

exception内置对象    java.lang.Throwable类的一个对象

config内置对象   javax.servlet.ServletConfig类

pageContext对象是一个比较特殊的对象。它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他对象,例如前面已经描述的request、response以及application对象等。

servlet和Jsp的复习整理的更多相关文章

  1. 基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)

    近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽 ...

  2. Servlet,jsp,JSP技术 ,JSP编程

     一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...

  3. Servlet与JSP版本历史以及Tomcat支持的版本

    查询这个的关键字:Java EE的版本历史. JavaServer Pages (JSP) Java Servlet 参考: https://en.wikipedia.org/wiki/Java_EE ...

  4. JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览 【转】

    原文地址:http://blog.csdn.net/hills/article/details/40896357 JBoss和Tomcat版本.及Servlet.JSP规范版本对应一览 JBossAS ...

  5. 你也可以当面霸-Servlet与JSP的原理及特点

    既然是面试系列,就是面试官和应聘者之间的对话.本文是采用一问一答的形式呈现给读者的,这样能有一个明确的考察点,不像理论知识那么枯燥. 01.什么是Servlet技术 Servlet是和平台无关的服务器 ...

  6. Servlet、JSP选择题(2)

    Java EE软件工程师认证考试 试题库-选择题 一.    选择题(包括单选和双选) 1.B 编写一个Filter,需要(  ) A. 继承Filter 类 B. 实现Filter 接口 C. 继承 ...

  7. Servlet的生命周期,并说出Servlet和CGI的区别,Servlet与JSP的区别

    一.Servlet 生命周期 1.加载 2.实例化 3.初始化 4.处理请求 5.销毁 二.Servlet与cgi的区别: Servlet处于服务器进程中,它通过多线程方式运行其service方法,一 ...

  8. 如何查看Servlet、JSP的版本(Tomcat V7.0.70)

    1. 简要说明:Tomcat6.0 所支持的是Servlet2.5,Tomcat 7.0 所支持的Servlet3.0,Servlet2.5 和Servlet3.0的差异较大,对于Servlet3.0 ...

  9. myEclipse6.5与数据库(SQL Server2008)连接遇到的问题(自己总结的干货)<用SSH框架的时候,用servlet+javabean+jsp的时候>

    昨天因为学习SSH框架的搭建,时隔一年又重新遇到了myEclipse连接数据库的问题.废话不多说,上干货 (以下全部按照我遇到的问题的顺序,也就是没有顺序,就是任性) 请注意:这是在myEclipse ...

随机推荐

  1. 让NSArray数组中每个对象都调用的方法

    1. [array valueForKey:@"title"]; //Returns an array containing the results of invoking val ...

  2. UIView常用的一些方法setNeedsDisplay和setNeedsLayout

    1,UIView的setNeedsDisplay和setNeedsLayout方法 首先两个方法都是异步执行的.而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到  UI ...

  3. Linux每日一命令:【00】总纲

    Linux每日一命令更新频率为每周5篇. 文章结构如下: 简介 语法 选项 参数 常用实例 实用技巧(可选) 参考文档 文章目录如下: 2018-02-19 20:15 -- Linux每日一命令:[ ...

  4. 03.安装jdk8作为系统环境

    博客为日常工作学习积累总结: 1.安装JDK8 创建安装目录:mkdir /application/java8 解压-安装包自行下载:tar -zxf jdk-8u202-linux-x64.tar. ...

  5. HTML中汉字空格占位符

    == 普通的英文半角空格   ==   ==   == no-break space (普通的英文半角空格但不换行)   == 中文全角空格 (一个中文宽度)   ==   == en空格 (半个中文 ...

  6. 为什么后台返回的日期我输出处理了在苹果手机里显示NAN?

      现象:   //结束时间var ent_time ="2018-04-28 09:36:00"alert((Date.parse(new Date(ent_time))));/ ...

  7. 10分钟搞定webpack打包

    入门前端这个职位近三年的时间了,但是脑子里的东西不多也不少,今天就从脑袋里把新版本的webpack打包过程拔出来给大家鲁一遍,就算帮助那些小白了,废话不多说,开始鲁起来,大家跟着我一起撸... 首先, ...

  8. 【Spark】Spark核心之弹性分布式数据集RDD

    1. RDD概述 1.1 什么是RDD (1) RDD(Resilient Distributed Dataset)弹性分布式数据集,它是Spark的基本数据抽象,它代表一个不可变.可分区.里面的元素 ...

  9. Jupyter Notebook的魔法

    在腾讯云上搭建了一个Jupyter Notebook 还是很好用的, 这里总结了一些看到的小技巧及快捷键使得我们更加快捷的完成工作. Notebook 与 Vim 有些类似,有两种键盘输入模式,即命令 ...

  10. scala 获取当前时间的两种方式

    在编写程序时,有时需要获取当前时间,这在记录异常信息.获取程序运行耗时很有用处 方式一: val time1=System.currentTimeMillis() 这种方式获取的是程序运行到此的毫秒数 ...