標題裏說的Servlet發佈是指寫完Servlet類後,把url與Servlet關聯的過程。在Servlet 2.5之前,因爲沒有註解,發佈Servlet需要修改web.xml。
具體例子如下:
<servlet>
<servlet-name>HelloYou</servlet-name>
<servlet-class>priv.lxh.java.web.HelloYou</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloYou</servlet-name>
<url-pattern>/HelloYou</url-pattern>
</servlet-mapping>
目前很多JSP的教材介紹的都是這樣發佈方式。
但是自從有了註解之後,我們還可以使用annotation的方式發佈Servlet,其效果是一樣的,如上面的例子,基於註解的方法爲:
package priv.lxh.java.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloYou
*/
<span style="color:#ff0000;">@WebServlet(description = "try servlet", urlPatterns = { "/HelloYou" })</span>
public class HelloYou extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloYou() {
super();
// TODO Auto-generated constructor stub
}
紅色字部分就可以完成Servlet的發佈。
既然有兩種發佈方式,那麼就會有一種疑問,哪一種的優先級會更加高?也就是說,如果urlPattern一樣的時候,註解方法在HelloYou,web.xml卻表明是HelloWorld,結果返回哪個Servlet的處理結果?
我做了一下實驗,發現註解是優先於web.xml。而且存在這種衝突並不會引起異常。很奇怪,但是現實就是這樣。