标签: servlet

Jetty 9 正式版发布!!!

jetty

Jetty 9 正式版来了!!!版本标签:Jetty 9.0.0.v20130308

Jetty 9 支持 SPDY 和 WebSocket。

下载地址:

http://download.eclipse.org/jetty/stable-9/dist/
Maven:

http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.eclipse.jetty%22%20AND%20v%3A%229.0.0..v20130308%22

<groupId>org.eclipse.jetty</groupId>
<version>9.0.0.v20130308</version>

Jetty 9.x 特性:

Completely overhauled I/O layer
Servlet API 3.0
JSP 2.2
SPDY/3
WebSocket (RFC-6455)
移植到 Jetty 9.x 的要求: 阅读详细 »

HttpServletResponse的addHeader与setHeader区别

setHeader(name,value) :如果Header中没有定义则添加,如果已定义则用新的value替换原用value值。

addHeader(name,value) :如果Header中没有定义则添加,如果已定义则原有value不改变。

Servlet线程安全问题

由于Servlet默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全问题。然而,很多人编写Servlet程序时并没有注意到多线程安全的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。

Servlet的多线程机制
 
  Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行,如图1所示。

servlet线程池

这样,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。所以在用Servlet构建的Web应用时如果不注意线程安全的问题,会使所写的Servlet程序有难以发现的错误。

  Servlet的线程安全问题

  Servlet的线程安全问题主要是由于实例变量使用不当而引起的,这里以一个现实的例子来说 阅读详细 »

web.xml 中的listener、 filter、servlet 加载顺序及其详解

一、概述

1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。

2、紧接着,容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。

3、容器将<context-param>转换为键值对,并交给servletContext。

4、容器创建<listener>中的类实例,创建监听器。

二 、 load-on-startup

load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。

在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

三  、加载顺序

首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:ServletContext -> listener -> filter -> servlet 阅读详细 »