PI-KA-CHU / PIKACHU-JAVA-Notebook

用于记录学习笔记
8 stars 4 forks source link

Servlet及JavaBean期末复习 #33

Open PI-KA-CHU opened 5 years ago

PI-KA-CHU commented 5 years ago

Servlet及JavaBean期末复习


前言:



Servlet的生命周期:

  1. 当servlet被部署在应用服务器中(应用服务器中用于管理Java组件的部分被抽象成为容器)以后,由容器控制servlet的生命周期。
  2. 除非特殊制定,否则在容器启动的时候,servlet是不会被加载的,servlet只会在第一次请求的时候被加载和实例化
  3. servlet一旦被加载,一般不会从容器中删除,直至应用服务器关闭或重新启动。但当容器做内存回收动作时,servlet有可能被删除。也正是因为这个原因,第一次访问servlet所用的时间要大大多于以后访问所用的时间。



Servlet的工作原理:

1

  1. 当客户端向服务器发送请求一个servlet时,服务器收到后首先到容器中检索与请求匹配的Servlet实例是否存在。若不存在,则Servlet容器负责 加载和实例化 出该servlet的实例对象,接着容器框架负责调用 init() 方法进行一些相关的初始化工作,然后Servlet容器继续调用其 service() 方法。若存在,则直接调用该servlet实例的service()方法。然后判断请求的类型,调用doGet或doPost等方法。

Tomcat中的JSP引擎就是一个Servlet程序,负责解释执行JSP页面 处理流程: 1)客户通过浏览器向服务器端的JSP页面发送请求。 2)容器接受到客户请求后,会检查JSP文件对应编译后的Servlet文件(.class)是否存在。如果不存在,则跳转到第4)步,否则执行下一步。 3)容器检查JSP页面是否有更新(修改),没有更新,则跳转到第5)步,否则执行下一步。 4)容器将JSP文件转换为Servlet类源文件(.java)。(此步会检查和捕获JSP语法错误) 5)容器将Servlet源文件(.java)编译成相应的字节码(.class)文件。(会检查和捕获Java语法错误) 6)容器将字节码(.class)文件加载到内存。 7)容器实例化Servlet(调用构造函数),然后调用初始化方法(jspInit())初始化Servlet。到此为止,Servlet对象真正成为一个Servlet,准备就绪,可以处理客户的请求了。 8)容器创建一个新的线程来运行Servlet并运行Servlet的_jspService()方法处理客户的请求。 9)Servlet生成并向客户返回一个响应(或把请求转发给另一个Web应用组件处理)。

  1. 通常,一个Servlet在容器中只有一个实例,每当有请求来到时,则分配一条线程进行处理。
  2. 在处理请求时:



JavaBean学习

什么是javaBean,如何进行交互:

<jsp:useBean id="loginUser" class="com.po.Users" scope="page"></jsp:useBean>
<jsp:useBean id="userDao" class="Dao.UserDao"></jsp:useBean>
<jsp:setProperty name="beanName" property="propertyName" value="">

Bean的三大特性:

javaBean的三大核心部分:

事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中的一个适当的事件处理方法来处理这个事件。

javaBean的三大构件:



其他的常见问题:

优先级:Servlet中API设置 > 程序/web.xml设置 > Tomcat/conf/web.xml设置


//方式一:在web.xml中设置session-config
<session-config>
  <session-timeout>2</session-timeout>
</session-config>

//方式二:在Tomcat的/conf/web.xml中session-config,默认值为30分钟
 <session-config>
        <session-timeout>30</session-timeout>
 </session-config>

//方式三:在servlet中设置
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);//单位为秒