servlet接口及原理解析,表达式语言解析

本文详细解析了Servlet接口的生命周期,包括由Tomcat容器通过反射创建单个实例,以及在多线程环境中的问题。同时,介绍了Servlet的初始化、处理请求和销毁阶段的关键方法。此外,文章还探讨了表达式语言在JSP页面显示数据的作用,以及如何与JSTL标签库配合使用。
摘要由CSDN通过智能技术生成

【学习笔记】

1.servlet生命周期(面试必考)

2.数据有效性验证

3.表达式语言与标准标签库

 

4.servlet是个单实例多线程

5.java内存模型

 

 

-------------------------------------------------------------【面试题】------------------------------------------

如果在servlet里面定义有一个私有全局变量intc,并在doget里面进行操作c++;,如果统计调用次数,这样做会有问题吗回答:有问题,java内存模型:servlet由于是多线程的,多个线程共享一个内存,当数据量一大,并发很多,就会形成冲突。

-----------------------------------------------------------------------------------------------------------

 

书籍:servlet 3.1规范 pdf文档   http权威指南

 

【回顾】:反射创建对象

Class.forName("com.tanlan.ishop.web.servlet").newinstance();

 

 

一、1.【servlet生命周期(面试必考)】

 

问题:【创建】:由谁创建,何时创建,创建几个,怎么调用

 

回答:【由谁创建】:servlet是由JSP/Servlet容器(Tomcat)通过解析web.xml得到servlet的类名,

通过反射创建servlet的实例

 

      【何时创建】:既然是通过反射实例化,可定就是调用无参构造方法,可以把无参构造方法

写出来,里面输出一句话来确定是容器启动时还是调用时实例化对象,

经过试验,当servlet第一次处理请求,该servlet会实例化

 

      【创建几个】:一个servlet只会创建一个实例

     【怎么调用】:容器自身也有一个main方法,是一个无线循环的线程,这也是web程序的入口

 

------------------------------------【servlet自动加载】-------------------

<load-on-startup>数字</load-on-startup>    在容器自动时自动加载servlet,

部署在web.xml中.就不需要映射了mapping了,里面的数字是个相对大小,如1或者2

那么1先实例化,2后实例化,容器会使用多线程的方式调用处理请求的方法

--------------------------------------------------------------------------

 

【有几个阶段?这些阶段会对应哪些方法】

 

【初始化】:init方法:做初始化工作,一般会读取web,xml配置信息,只调用一次

 

【处理请求】:service方法:处理信息

 

【销毁】:destroy方法:将程序从容器中移除,正常关闭容器

--------------------------------------------------------

正常关闭容器  点击service--tomcat---stop server

 

问题:既然说请求是由service处理的,那么doget与dopost方法是如何得到请求的

回答:模版方法

 

 

           2.servlet的类层次结构

 

二、表达式语言与标准编程库

 

1.【jsp】:只显示数据

 

【作用域:存储数据的范围

 从小到大】:page(页面作用域),request(请求作用域),session(会话作用域),application(容器作用域)

表达式语言是专门在JSP页面显示数据的,该数据来自作用域

 

【从小到大依次寻找其中的属性】,如:setAttribute("属性名",数据对象)进而得到其数据,

必要时可以使用前缀区分确定在哪个作用域里找pageScope,requestScope,

sessionScope,applicationScope。用法如页面里的a属性 ${pageScope.a}

 

 

【语法】:${exppress}        【注:注释没用,即使注释掉也会解析】

     1.如果属性对应的是个实例对象,可以直接用属性名打点调用属性名来获得数据值(利用反射:首字母大写                        前加get)

             2.如果属性对应的是个字符串,直接可以用属性名就可以显示

    

     3.集合显示:会用到标签库 下面介绍

【javaBean】规范:没有规范不能使用框架(框架利用反射时取值不能成功)

 

 

2.标签库:核心,SQL,XML,Format,Function

 

用法:第一步:引用一个指令<%@taglibprefix="c" uri="http://java.sun.com/jstl/core_rt"%>

定义的c就是标签;后面制定的链接就是标签库  用c打冒号就可以使用里面的标签

 

      第二步:<c:forEachitems="${categoryes}" var="category">调用需要的标签,

${category.id}                           利用属性打点调用数据

${category.name}

...

    </c:forEach>                                结束


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值