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。