【我的javaEE学习】Servlet笔记简单小结

一、Servlet概述

1、什么是Servlet

      Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应。

2Servlet中的方法

       public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException

       ServletRequest req:代表着请求对象,该对象中有HTTP协议的请求部分的所有内容。它的实现类由服务器提供的,封装数据也是服务器来做的。

       ServletResponse res:代表着响应对象,该对象中由我们写数据HTTP协议的响应部分)进去。它的实现类也是由服务器提供的。

       service:由服务器调用,每次请求都会调用一次。服务器采用的是多线程机制。

二、Servlet的执行过程

 

三、Servlet的编写方式

实现javax.servlet.Servlet的接口或者继承javax.servlet.GenericServlet或者继承javax.servlet.http.HttpServlet

1javax.servlet.GenericServlet:通用的Servlet实现,抽象类 

2、javax.servlet.http.HttpServlet:HTTP协议有关的,抽象类

      注意:HttpServlet是继承GenericServlet的,不要覆盖service方法,需要覆盖doGetdoPost方法。 

   如果代码里没有doGet方法的话,服务器访问servlet是调用service方法,其实是调用httpservlet里的Service方法,最后是http里面的doGet方法。

     Httpservlet(HttpServletRequest、HttpServletResponse)继承GenericServlet(ServletRequest、ServletRespone)

     GenericServlet继承Servlet(接口)

3、Servlet规范中的核心接口类图

 

4、映射文件web.xml

   <servlert>

        <servlert-name>Servlet名字</servlert-name>

        <servlert-class>Servlet所属类</servlert-class>

   </servlet>

   <servlert-mapping>

        <servlert-name>Servlet名字</servlert-name>

        <url-pattern>Servlet访问路径</url-pattern>

   </servlet-mapping>

四、Servlet的生命周期

1Servlet对象的生命周期

      ●诞生:用户第一次访问时,由容器创建他的实例。Init(Servlet ServlertConfig)

      ●活着:一旦创建就驻留内存(单例),内存中一个servlet的实例只有一个每次用户的访问,容器都会调用sevice方法发出响应(多线程)。doPost(),doGet()

      ● 死亡:应用被卸载或者Tomcat关闭了.destory()

2、具体实现

       void init(ServletConfig sc)-----void service(ServletRequset req,ServletRespone res)----void destory()

五、Servlet的线程安全

因为内存中一个servlet的实例只有一个,定义实例变量的时候,每次访问service(ServletRequset req,ServletRespone res)方法,会出现一个线程安全问题。

所以尽量使用局部变量,不要使用实例变量。

如果必须使用实例变量,只能做同步处理了,会对访问限制,就变成了一个单例应用了。

 

六、Servlet的一些细节

1、一个Servlet可以被映射到多个地址上

 

也可以:

 

2、可以使用地址通配符*

  写法一:*.do结尾 。必须以*开头比如*.do

  写法二(比一优先级略高):以/开头,必须以*结尾     比如/action/*

 

3、默认的Servlet(tomcat默认自带的)

   默认的Servlet的映射路径是<url-pattern>/</url-pattern>。不需要大家配,因为默认的Servlet负责处理用户的请求URL找不到匹配的处理工作。一切都是Servlet

4、应用在启动时就完成Servlet的实例化和初始化

   在web.xml里进行配置<load-on-startup></load-on-startip>使其在应用加载时就完成实例化和初始化,避免第一个访问servlet访问太慢了。

   注意这里的顺序只能从2开始,因为1已经用在默认的servlet里了,也就是tomcat里面自带的默认serclet.

 

七、ServletConfigServlet的参数配置

1ServletConfig:代表着针对当前Servlet的参数配置(web.xml)

 

2、如何得到ServletConfig对象的引用:在初始化Servlet时,由容器(服务器)产生,并传递给你

 

  关于test2里的方法中paramName的是值是param-name里的值。而config.getInitParameter(paramName)获取的是param_value里的值。

  注意:每一个Servlet对象都有一个ServletConfig配置。

ServletContext

1ServletContext代表着当前应用(个人认为是应用就是项目)。每个应用只有一个ServletContext对象的实例,由容器提供。是一个域(范围)对象。

2、如何获取ServletContext的实例:

      ServletConfig.getServletContext();或者直接获取getServletContext()。

      ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。

3ServletContext的生命周期

       诞生:应用被加载时就由容器创建好

      活着:应用不挂就一直活着

      死亡:应用挂了,就挂了

4、域(存活范围)对象:

      ServletContext称为应用范围域对象。

 

     servletContext 是javaWeb的四大域对象中最大的域对象

5、配置全局的web.xml参数(又叫配置应用级的参数)

    也是用servletContext 来取这个值。


猜你喜欢

转载自blog.csdn.net/suqi356/article/details/78970857