前面笔记讲的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实例。