javaweb:servlet

本文深入探讨Servlet的生命周期,包括init、service和destroy方法的作用,解释如何通过继承HttpServlet简化Servlet开发。同时,分析web.xml中Servlet的配置方式,如通过<servlet>和<servlet-mapping>元素实现访问,以及使用<load-on-startup>进行自动加载。
摘要由CSDN通过智能技术生成

  1. 每一个servlet都必须实现Servlet接口,GenericServlet是个通用的,不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承了GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要集成HttpServlet父类即可。

   2. Servlet接口中定义了service方法,HttpServlet对该方法进行了实现,实现方式是将ServletRequest和ServletResponse转换为HttpServletRequest和HttpServletResponse.

   3. HttpServlet类中所提供的doGet, doPost等方法都是直接返回错误信息,所以我们需要在自己定义的service类中override这些方法。

 

 4. 在Servlet接口中,定义了五个方法,其中三个方法代表了Servlet的生命周期 :

      1). init方法,负责初始化Servlet对象

      2). service方法,负责响应客户的请求

      3). destroy方法,当Servlet对象退出声明周期时,负责释放占用的资源。

 

5. 某些Servlet在web.xml文件中只有<servlet></servlet>元素而没有<servlet-mapping></servlet-mapping>元素,这样我们就无法通过url地址的方式访问这个Servlet, 这种Servlet通过会在<servlet></servlet>元素中配置一个<load-on-startup></load-on-startup>子元素,让容器在启动的时候自动加载该Servlet,并且调用其init方法完成一些全局性的初始化工作

 

6. ServletContext和Web应用关系

   当Servlet容器启动Web应用时,并为每个web应用创建唯一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "CounterServlet")
public class CounterServlet extends HttpServlet {
    private int count = 0;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = request.getServletContext();
        Object obj = servletContext.getAttribute("count");
        if(null != obj){
            count = (int)obj;
        }

        count++;
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("utf-8");
        servletContext.setAttribute("count",count);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head> <title>计数器</title></head>");
        out.println("<body>访问人数:");
        out.println(count);
        out.println("</body>");
        out.println("</html>");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值