一、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内置对象及其含义

内部对象所属类型用途
requestjavax.servlet.httpServletRequest包含了请求方的信息
responsejavax.servlet.httpServletResponse封装了对客户端的响应
outjavax.servlet.jsp.JspWriter响应信息流的标准输出
sessionjavax.servlet.Http.HttpSession在同一请求中所产生的session资料,目前只对Http协议没有定义
applicationjavax.servlet.ServletContext提供安全信息
configjavax.servlet.ServletConfig提供配置信息
pageContextjavax.servlet.jsp.PageContext提供当前页面属性
pagejava.lang.Object同于java的this
exceptionjava.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。

持续更新,如果错误,欢迎大家指出,共同学习...

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐