前言
- 特别推荐(web.xml详解): https://blog.csdn.net/believejava/article/details/43229361
Servlet的生命周期
- 当servlet被部署在应用服务器中(应用服务器中用于管理Java组件的部分被抽象成为容器)以后,由容器控制servlet的生命周期。
- 除非特殊制定,否则在容器启动的时候,servlet是不会被加载的,servlet只会在第一次请求的时候被加载和实例化。
- servlet一旦被加载,一般不会从容器中删除,直至应用服务器关闭或重新启动。但当容器做内存回收动作时,servlet有可能被删除。也正是因为这个原因,第一次访问servlet所用的时间要大大多于以后访问所用的时间。
Servlet的工作原理
- 当客户端向服务器发送请求一个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应用组件处理)。
- 通常,一个Servlet在容器中只有一个实例,每当有请求来到时,则分配一条线程进行处理。
- 在处理请求时:
-
Servlet容器会创建一个请求对象ServletRequst,其中封装了用户请求的信息,以便处理客户端请求,此外还会创建一个响应对象ServletResponse,用于响应客户端请求,想客户端返回数据。
-
然后Servlet容器把创建好的ServletRequst和ServletResponse对象传给用户所请求的Servlet。
-
Servlet利用ServletResponse包含的数据和自身的业务逻辑处理请求,并把处理好的结果写在ServletResponse中,最后Servlet容器把响应结果传给用户。
JavaBean学习
什么是javaBean,如何进行交互:
- JavaBean是一种用JAVA语言编写的可重用的组件,用户可以使用javaBean进行业务逻辑及数据库操作的打包,其他开发者可以通过Jsp,Servlet,其他javaBean,Applet等对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的三大核心部分:
- 属性(properties)
- 方法(method)
- 事件(event)
事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中的一个适当的事件处理方法来处理这个事件。
javaBean的三大构件:
-
Session bean: 会话构件,是短暂的对象,运行在服务器上,并执行一些应用逻辑处理,它由客户端应用程序建立,其数据需要自己来管理。分为无状态和有状态两种。
-
Entity bean: 实体构件,是持久对象,可以被其他对象调用。在建立时指定一个唯一标示的标识,并允许客户程序,根据实体bean标识来定位beans实例。多个实体可以并发访问实体bean,事务间的协调由容器来完成。
-
MessageDriven Bean: 消息构件,是专门用来处理JMS(Java Message System)消息的规范(EIB2.0)。JMS是一种与厂商无关的API,用来访问消息收发系统,并提供了与厂商无关的访问方法,以此来访问消息收发服务。JMS客户机可以用来发送消息而不必等待回应。
其他的常见问题
- Session用哪些方法设置超时时间?
优先级: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);//单位为秒
- session存取对象分别用什么方法?
request.getSession.getAttribute()
request.getSession.setAttribute()
- Web.xml文件的位置?
WebContent/WEB-INF/
- 创建一个监听类,需要实现什么接口?
监听不同的类型的类需要实现不同的接口,如HttpSessionListener
- Response对象的什么方法可以将cookie写入会话中重写URL接口?
response.encodeRedirectURL(“”)
- Filter控制生命周期的方法是哪三个?
init(),doFilter(),destroy()