之前我們在編寫HelloWorld項目時,在WEB-INF目錄下創建了一個web.xml文件。這個文件叫做部署描述文件,每個Servlet應用程序的部署描述文件的名稱都是web.xml。Web容器在啟動時讀取該文件,對應用程序進行配置。下面給出了部署描述文件中常用的元素
<servlet></servlet> 用來聲明一個Servlet的信息,主要有以下子元素
- <servlet-name> 用來定義Servlet的名稱,該名稱在整個應用中必須是惟一的
- <servlet-class> 用來指定Servlet的完全限定類名。
- <init-param> 用來定義參數,可有多個init-param。Servlet類中通過getInitParamenter(String name)方法訪問初始化參數。
- <load-on-startup> 指定當Web應用啟動時,裝載Servlet的次序。當值為正數或零時,Servlet容器先加載數值小的Servlet。當值為負或未定義時,Servlet容器將在Web客戶首次訪問這個Servlet時加載它。
<servlet-mapping><servlet-mapping>用來定義Servlet所對應的URL,包含兩個子元素
- <servlet-name> 指定要映射的Servlet的名稱。
- <url-pattern> 指定servlet所對應的URL。
使用@webservlet注解也可以實現相同的功能。下面給出了@webservlet注解的屬性以及與之對應的部署描述文件中的元素。
@webservlet的屬性 | 對應的部署描述文件中的元素 | 備注 |
---|---|---|
name | servlet-name | 如果沒有顯示指定,則取值即為Servlet類的完全限定類名 |
urlPatterns | url-pattern | |
value | url-pattern | 與urlPatterns不能共存 |
loadOnStartup | load-on-startup | |
initParams | init-param |
下面我們把之前的HelloWorld項目使用注解的方式重新寫一遍
package com.mc.hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "helloworld", urlPatterns = { "/hello" })
public class HelloWorldServlet implements Servlet{
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head><body>Hello World!" + getServletConfig().getServletName() +"</body></html>");
}
@Override
public void destroy() {}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public String getServletInfo() {
return "HelloWorld Servlet";
}
}