servlet研究

来源:互联网 发布:淘宝开店虚拟充值类目 编辑:程序博客网 时间:2024/05/17 01:18
 

 

[T1] Servlet的技术特点:Servelt方面的研究:

Servlet是一个类。Servlet可以处理客户端传来的http请求,并返回一个响应。

Servlet有以下优势:

1、可移植性

2、功能强大。可扩展性和灵活性

3、安全、简洁、高效耐久。

4、Servlet常用接口的使用。

Servlet的生命周期包含了下面4个阶段:

(1)加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

(2)初始化

在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而UnavailableException异常用于通知容器Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出UnavailableException异常向容器指出它暂时或永久不可用。

(3)请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。在service()方法执行期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常。如果UnavailableException异常指示了该实例永久不可用,Servlet容器将调用实例的destroy()方法,释放该实例。此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用)响应。如果UnavailableException异常指示了该实例暂时不可用,那么在暂时不可用的时间段内,对该实例的任何请求,都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。

(4)服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。下面给出Servlet整个生命周期过程的UML序列图,如图2-16所示。

 

(点击查看大图)图2-16  Servlet在生命周期内为请求服务

1、说一说Servlet的生命周期? 
答:Servlet有良好的生存期的定义,包括加载和实例化初始化处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 

2、Servlet版本2.3 何2.4 的新特性? 

Servlet规范2.3

a. 可以在web.xml文件中注册相应的事件监听器
b. 能够在web.xml文件中注册Filter 
c. 安装扩展库的依赖关系
d.国际化支持(在ServletRequest中增加了一个新的方法setCharacterEncoding()
e. 定义了Web应用的类装载器规范
f.Servlet 2.3应用程序分发描述符的DTD

Servlet规范2.4
1、XML Schema定义Web查询部署描述文件

2、servlet 2.4版在事件监听器中加入了ServletRequest监听器,包括:ServletRequestListener,ServletRequestAttributeListener和其他相关类。这些类可以用来管理和控制与ServletRequest动作有关的事件。
3、 增强了filterrequest dispatcher的配合功能,这样过滤器可以根据请求分发器(request dispatc
her)所使用的方法有条件地对Web请求进行过滤。
4、增强的国际化功能 (Servlet 2.4增加了Web程序国际化功能,在web.xml中可以定义网站的字符编码方式。)
5、增加了logout和login方法方便安全管理

3、JAVA SERVLET API中forward() 与redirect()的区别? 
   (ResquestDispatcher 和 sendRedirect的区别?)

答: 前者仅是(服务端)容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则
  
是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看
  
到跳转后的链接地址。

Forword()跳转不产生新的request和 response对象, redirect则产生新的request和response对象
  
第2次request将丢失第一次的attributs/parameters等。

所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,
  
这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使
  
用sendRedirect()方法。 

4、How do I find whether a parameter exists in the request object?
怎样确定一个请求参数在不在request对象中

boolean hasFoo = !(request.getParameter(\"foo\") == null
         || request.getParameter(\"foo\").equals(\"\"));
或者
  
boolean hasParameter =
                 request.getParameterMap().contains(theParameter); //(适用于 Servlet 2.3+)

JSP方面

1、jsp有哪些内置对象?作用分别是什么? 
答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 
request            用户端请求,此请求会包含来自GET/POST请求的参数 
response           网页传回用户端的回应 
pageContext        网页的属性是在这里管理 
session            与请求有关的会话 
application        正在执行的应用程序 
out                用来传送回应的输出 
config servlet     包含Servlet(JSP编译后产生的)相关信息的ServletConfig对象 
page JSP           网页本身 
exception          针对错误网页,未捕捉的异常

2、jsp有哪些动作(即行为元素)?作用分别是什么? 
答:JSP共有以下6种基本动作 
jsp:include:在页面被请求的时候引入一个文件。 
jsp:useBean:寻找或者实例化一个JavaBean。 
jsp:setProperty:设置JavaBean的属性。 
jsp:getProperty:输出某个JavaBean的属性。 
jsp:forward:把请求转到一个新的页面。 
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记  

[T2] 3、JSP中动态include与静态include的区别? 
答:动态include用jsp:include动作实现,在运行期,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 例如:
<jsp:include page="included.jsp" flush="true" />(用于加载动态页面)
静态include在JSP翻译期间实现,不会检查所包含文件的变化,适用于包含静态页面,例如: 
<%@ include file="included.htm" %> (用于加载静态文件)

4、两种跳转方式分别是什么?有什么区别? 
答:有两种,分别为: 
<jsp:include page="included.jsp" flush="true"> 
<jsp:forward page= "nextpage.jsp"/> 
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.
后者完全转向新页面,不会再回来。相当于go to 语句。 

5、ServletContext 和 PageContext的区别?
 ServletContext: 提供关于容器的信息.
 PageContext: 提供关于请求的信息

6、request.getRequestDispatcher() 和 context.getRequestDispatcher()的区别?
request.getRequestDispatcher(path):为了调用它创建dispatcher对象,我们需要提供资源的相对路径。
context.getRequestDispatcher(path): 为了调用它创建dispatcher对象,我们需要提供资源的绝对路径。

7、怎样从一个JSP中传递信息到另一个被包含的JSP?
 使用<jsp:param> .

8、JSP怎样处理运行时异常?

用page指令的errorPage属性,并在“错误页面”中设定 isErrorPage=true   /在主页面设置 errorPage="error.jsp"

 

9、JSP的隐含对象out与System.out 有什么区别?

1.JSP的隐含对象out主要用来向客户端输出各种格式的数据,并且管理应用服务器上的输出缓冲区(是有缓冲的!),Out对象的基类是javax.servlet.jsp.JspWriter类。

2.System类的对象out的类型是java.io.PrintStream, 代表标准输出,不做缓存可以用System类的setOut方法重定向。

[T3] 模式与MVC

1、   什么是模式?有哪些模式?谈谈你对MVC模式的理解

   MVC是一种开发模式。及model、view、controller在很大程度上减轻了客户端页面的压力。

2、   请选择项目依次填入图中,该图为MVC模式简图

[T4] 2.4   Servlet生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过:java.servlet.Servlet的init()和service()和destory()方法。

4--》》servlet实现相关:GenericServlet、httpservlet。

Servlet配置:

  <servlet>

    <servlet-name>uuus</servlet-name>

    <servlet-class>com.jstt.uuus</servlet-class>

    <init-param>    //配置参数

       <param-name>encoding</param-name>

       <param-value>gbk</param-value>

</init-param>

</servlet>

ServletConfig声明:getInitParameter(String name)

getInitParameterNames()

getServletContext()获取servlet上下文对象的引用。

Servlet异常相关:ServletException、UnavailableException。

请求和相应相关:httpServletRequest、httpServletResponse。

会话跟踪相关:httpSession、

Servlet上下文:ServletContext。

启动优先级:-------------------》》

<servlet>

      <servlet-name>NewUserServlet</servlet-name>

      <jsp-file>newUser.jsp</jsp-file>

      <load-on-startup>10</lod-on-startup>   //启动装入优先级

</servlet>

Servlet映射---------------------------》》

<servlet-mapping>

  <servlet-name>CounterServlet</servlet-name>

  <url-pattern>/count/*</url-pattern>

</servlet-mapping>

Web应用过滤器:Filter开发。

Web引用中的过滤器截取从客户端进来的请求,并做出处理答复。他可以说是web进入网关的第一道关,可以验证用户是否来自可信网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置信息,可以过滤网站信息,可疑验证用户是否已经登录、用户浏览器是否支持此应用。

 


技术特点

动/静include区别

开发模式MVC

Servlet生命周期