javaweb:servlet

  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>");
    }
}
发布了605 篇原创文章 · 获赞 47 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/105524148