学习笔记——JavaWeb Servelt
1.什么是Servlet
如果说JaveWeb程序是一块手表,那么Servlet就是其中齿轮。一个个Servlet实现程序中的不同功能,最终构成整个程序。在MVC设计模式中,Model是JavaBean,View是Jsp页面,而Controller就是Servlet。同时,Jsp的前身就是Servlet。Jsp页面是通过Servlet的“制作”出来的。
可以说,Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的驻留在服务器内存里的Servlet程序。
2.Servlet的生命周期
Servlet的生命周期如下:
装载—》初始化init()—》service()-》终止destroy()。
装载:
所有的Servlet都从装载入服务器开始。
装载有三种情况:
1.使用<loadon-startup>标签设置服务器启动时加载。
2.在serlvet被访问时加载。
3.当servlet文件被修改时,服务器自动加载。
Tip:
第一种情况下,须在web.xml中添加如下代码,其中<loadon-startup>标签中的数值越小,装载的优先度越高。
<servlet> <servlet-name>MyFirstServlet</servlet-name> <servlet-class>servlet.MyFirstServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
初始化init:
装载之后,自动运行init方法,该方法只运行一次,用于初始化其中的servlet中的一些变量。public void init() throws ServletException { // 初始化代码... }
service:
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }
终止destroy:
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:
public void destroy() { // 终止化代码... }
3.如何编写一个Servlet
1.继承HttpServlet
public class HelloServlet extends HttpServlet
2.重写doGet()或者doPost()方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //你的代码 }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //你的代码 }
3.在web.xml中注册Servlet
<servlet> <servlet-name>MyFirstServlet</servlet-name> <servlet-class>servlet.MyFirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyFirstServlet</servlet-name> <url-pattern>/servlet/MyFirstServlet</url-pattern> </servlet-mapping>
或者使用注释注册Servlet
@WebServlt(name="MyFirstServlet", urlPatterns={"/servlet/MyFirstServlet"}) public class MyFirstServlet extends HttpServlet { //你的代码 }
web.xml中的urlPattern和注释中的urlPatterns中的链接地址,是servlet在服务器中的虚拟地址。最前的 / 号表示项目根目录,然后是serlvet包的MyFirstServlet类。这样,客户端就能通过这个虚拟地址访问Servlet类,并传送数据。
4.初始化Servlet参数
在web.xml中设置初始化变量<servlet> <servlet-name>MyFirstServlet</servlet-name> <servlet-class>servlet.MyFirstServlet</servlet-class> <init-param> <param-name>变量名</param-name> <param-value>变量值(之后在serlvet中获取到的是String对象)</param-value> </init-param> </servlet>
在注释中设置初始化变量@WebServlet( displayName = "MyFirstServlet" , //描述 name = "MyFirstServlet", //servlet名称 urlPatterns = { "/servlet/MyFirstServlet" }, //url initParams = { @WebInitParam(name = "username", value = "张三") ,@WebInitParam(name="password", value="123")} )//初始化参数
获取初始化变量public class MyFirstServlet extends HttpServlet { private String username; private String password; @Override public void init(ServletConfig config) throws ServletException { //获取初始化信息: username = config.getInitParameter("username"); password = config.getInitParameter("password"); } }