JavaEE常见面试题
- 一、Servlet&JSP
- Servlet
- 1.如何实现Servlet的单线程模式
- 2.Servlet的生命周期
- 3.Servlet和JSP的区别和联系
- JSP
- 1.JSP的执行过程
- 2.JSP的9内置对象及其含义
一、Servlet&JSP
Servlet
1.如何实现Servlet的单线程模式
实现Servlet的单线程的jsp命令是:<% page isThreadSafe="false" %>
。默认isThreadSafe
的值是true。
属性isThreadSafe=false
时,表示它是以Singleton(单例)模式运行,该模式实现了接口SingleThreadSafe
,该模式同一时刻只有一个实例,不会出现信息同步与否的概念。
若多个用户同时访问一个这种模式的页面,那么先访问者完全执行完该页面后,后访问者才开始执行。
属性isThreadSafe=true
模式表示它以多线程的方式运行。该模式的信息同步,需访问同步方法(用Synchronized标记)来实现,一般格式如下:
public synchronized void syncmethod(...){
while(...) {
this.wait();
}
this.notifyAll();
}
2.Servlet的生命周期
- 1、加载
在下列时刻会加载Servlet(只执行一次):
- 如果已经配置自动加载选项,则在启动服务器时自动加载web.xml文件中设置的
<load-on-start>
; - 服务器启动之后,客户机首次向Servlet发出请求时会加载;
- 重新加载Servlet时会进行一次加载;
- 2、实例化
加载Servlet后,服务器创建一个Servlet实例。(只执行一次); - 3、初始化
调用Servlet的init()
方法。在初始化阶段,Servlet初始化参数被传递给Servlet配置对象ServletConfig。(只执行一次); - 4、请求处理
对于到达服务器的客户机请求,服务器创建针对此次请求的一个"请求"对象和一个"响应对象"。
服务器调用Servlet的service()
方法,该方法用于传递"请求"和"响应"对象。service()
方法从"请求"对象获得请求信息、处理该请求并用"响应"对象的方法将响应回传给客户端。service()
方法可以调用其他方法来处理请求,例如doGet()、doPost()
或其他方法。
每次请求都会执行该步骤; - 5、销毁
当服务器不需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的destroy()
方法。(只执行一次);
3.Servlet和JSP的区别和联系
区别:
- 1)JSP是在HTML代码里面写Java代码;而Servlet是在Java代码中写HTML代码,Servlet本身是个Java类;
- 2)JSP使人们将显示和逻辑分隔称为可能,这意味着两者的开发可以并行进行;而Servlet并没有将两者分开;
- 3)Servlet独立地处理静态表示逻辑与动态业务逻辑,任何文件的变动都需要对此服务程序重新编译;JSP允许使用特殊标签直接嵌入到HTML页面,HTML内容与JAVA内容也可放在单独文件中,HTML内容的任何变动会自动编译装入到服务程序;
- 4)Servlet需要在web.xml中配置;而JSP无需配置;
- 5)目前JSP主要用在视图层,负责显示;而Servlet主要用在控制层,负责调度;
联系:
- 1)都是SUN公司推出的动态网页技术;
- 2)先有Servlet,针对Servlet缺点推出JSP。JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例,JSP页面由系统翻译成Servlet,Servlet再负责响应用户的请求。
JSP
1.JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求之后,如果是第一次访问某个JSP页面,Web服务器对它进行一下三个操作:
- 1)翻译
由.jsp变为.java,由JSP引擎完成。 - 2)编译
由.java变为.class,由Java编译器实现。 - 3)执行
由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并最终返回给客户端。
如果不是第一次访问某个JSP页面,则只执行第三步,所以第一次访问JSP较慢。
2.JSP的9内置对象及其含义
内部对象 | 所属类型 | 用途 |
request | javax.servlet.httpServletRequest | 包含了请求方的信息 |
response | javax.servlet.httpServletResponse | 封装了对客户端的响应 |
out | javax.servlet.jsp.JspWriter | 响应信息流的标准输出 |
session | javax.servlet.Http.HttpSession | 在同一请求中所产生的session资料,目前只对Http协议没有定义 |
application | javax.servlet.ServletContext | 提供安全信息 |
config | javax.servlet.ServletConfig | 提供配置信息 |
pageContext | javax.servlet.jsp.PageContext | 提供当前页面属性 |
page | java.lang.Object | 同于java的this |
exception | java.lang.Throwable | 异常处理 |
- 1.request 表示HttpServletRequest对象。它包含了有关浏览器请求的信息。
- 2.response 表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法。
- 3.out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
- 4.pageContext 表示一个javax.servlet.jsp.PageContext对象。是用于方便存取各种范围的名字空间。
- 5.session 表示一个请求的javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。
- 6.application 表示一个javax.servlet.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。
- 7.config 表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
- 8.page 表示从该页面产生的一个servlet实例。
- 9.exception 对象用来处理错误异常;如果使用exception,则必须指定page中的isErrorPage为true。