之前我们在编写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所对应的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";
}
}