Servlet和JSP学习总结(六)-- 部署描述符与@webservlet注解

之前我们在编写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";
    }
}
posted @ 2017-08-19 09:11  hakunamata  阅读(2110)  评论(1编辑  收藏  举报