Servlet简介

  Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。  

  使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态

  Servlet的技术功能

    Servlet通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应的服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应。

  如图所示:

    

 

 

Servlet快速入门

  Servlet技术的核心是Servlet,它是所有Servlet类必须直接或者间接实现的一个接口。在编写实现Servlet的Servlet类时,直接实现它。在扩展实现这个这个接口的类时,间接实现它。

  Servlet接口实现类

    1、Servlet接口SUN公司定义了默认实现类:HttpServlet。

    2、HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写

Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

    3、HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post

请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。

  Servlet代码结构:

 1 public class Servlet02 extends HttpServlet {
 2 
 3     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 4         response.getWriter().write("hello dandan...");
 5     }
 6 
 7     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 8         doGet(request, response);
 9     }
10 }

  一般过程如图所示:

     

 

 

  用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是

由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

  ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作

ServletResponse对象就能把响应轻松的发回给用户。

  对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个

Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

Servlet生命周期

  servlet接口中的方法:

    1.void init(ServletConfig).当Servlet对象被服务器创建时调用,仅调用一次。

    2.void service(ServletRequest, ServletResponse).可被服务器调用多次。

    3.void destroy().服务器关闭连接之前调用,仅一次。

   servlet基本配置:

    基本由servlet类的配置和servlet虚拟路径配置组成。

      

 

     两个配置中的<servlet-name>的值必须相同,以通过虚拟路径找到类。

  ServletConfig接口:

    当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init( )方式传入一个ServletConfig对象

    其中几个方法如下:

    

 

 

ServletContext对象

  ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。一个项目只有一个ServletContext对象,服务器会为每个应用创建一个ServletContext对象,我

们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据,与Tomcat同生同死。

  生命周期:

    服务器启动时完成ServletContext对象的创建;

    服务器关闭时完成ServletContext对象的销毁。

  ServletContext对象的作用是在整个Web应用的动态资源直接共享数据。例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就

是数据共享。ServletContext是一个域对象。

  获取servletcontext对象:getServletContext()

    1.先获取servlet配置对象,再获取servletcontext对象。

      

 

     2.直接获取servletcontext对象

      

 

   获取文件的绝对路径:getRealPath()

    String patha=context.getRealPath("WEB-INF/a.txt");

    String pathb=context.getRealPath("b.txt");

    String pathc=context.getRealPath("WEB-INF/classes/c.txt");
    

 

   域对象的功能

     所有域对象都是有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:

      setAtrribute(String name,Object obj);   存储一个对象,参数分别为域的属性名和属性值,如果多次调用该方法,并且使用相同的name,那么就会覆盖上一次的值

        

      getAttribute(String name);  获取ServletContext中的数据,当前在获取之前需要先存储。

        

      removeAttribute(String name); 移除ServletContext中的域属性,如果参数name不存在,那么该方法什么都不做。

 

 

 

 

 

 

posted on 2019-11-27 15:01  仰望星空77  阅读(162)  评论(0编辑  收藏  举报