0%

Servlet的使用和生命周期

前面笔记讲的Servlet,都是继承自javax.servlet.http.HttpServlet,是javax.servlet.GenericServlet的子类,主要用于处理http协议。一般的Servlet只需要继承javax.servlet.GenericServlet.

package pocketdigi;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Servlet extends GenericServlet {

    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        resp.setCharacterEncoding("UTF-8");
        //默认是iso-8859-1,中文会乱码
        PrintWriter out=resp.getWriter();
        out.println("");
        out.println("");
        out.println("");
        out.println("Hello,Servlet!我");
        out.println("");
        out.close();
    }

}

注册Servlet,在web.xml中添加:

    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>pocketdigi.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/Servlet</url-pattern>
    </servlet-mapping>

访问http://localhost:8080/HelloUser/Servlet 即可看到结果(假设项目名为HelloUser). Sevlet的生命周期: 1、init() 初始化 2、service() 处理客户端请求,返回结果 3、destory() 在Servlet容器卸载Servlet前调用,释放资源 初始化可能在以下情况下完成: 1、服务器启动时 2、浏览器第一次请求时 3、根据管理员配置 所以,并不是被用户请求,才会初始化Servlet,Servlet初始化到卸载Servlet期间没有处理任何请求也是可能的。 如果需要Servlet在服务器启动时初始化,可以在Web.xml中,servlet内增加load-on-startup,如

    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>pocketdigi.Servlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

load-on-startup的值必须是正整数,加载优先级从小到大。如果两个Servlet数值相同,由服务器自动选择。 卸载Servlet: 由于系统资源不足或其他原因,Servlet容器会卸载Servlet,这个操作由Servlet容器定义和实现,Servlet容器会在该Servlet处理完所有的请求后马上或指定时间后卸载Servlet,当再次被请求时,Servlet容器重新创建一个新的Servlet实例。