Servlet發佈的兩種方式以及優先級

標題裏說的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。而且存在這種衝突並不會引起異常。很奇怪,但是現實就是這樣。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章