Servlet概述

1.什么是Servlet

  servlet是Java Web的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

  *接收请求数据;

  *处理请求数据;

  *完成响应。

  例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

2.实现Servlet的方式(由我们自己来写!)

  实现Servlet有三种方式:

    *实现javax.servlet.Servlet接口;

    *继承javax.servlet.GenericServlet类;

    *继承javax.servlet.http.HttpServlet类;

 

  通常我们会继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。

Servlet.java---五个方法

 1 public interface Servlet{
 2  public void init(ServletConfig config)throws ServletException;
 3 
 4  public ServletConfig getServletConfig();
 5 
 6  public void service(ServletRequest req,ServletResponse res)
 7      throws ServletException,IOException;
 8 
 9  public String getServletInfo();
10 
11  public void destroy();  
12 }

 批注:Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!

自己写的Servlet源码

 1 package one.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Servlet;
 6 import javax.servlet.ServletConfig;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 
11 public class AServlet implements Servlet {
12 
13     /*
14      * 它是生命周期方法--由Tomcat来调用
15      * 它会在Servlet被销毁之前调用,并且它只会被调用一次!
16      * */
17     @Override
18     public void destroy() {
19         System.out.println("destory()...");
20     }
21 
22     /*
23      * 可以获取Servlet的配置信息
24      * */
25     @Override
26     public ServletConfig getServletConfig() {
27         System.out.println("getServletConfig()...");
28         return null;
29     }
30 
31     /*获取Servlet的信息*/
32     @Override
33     public String getServletInfo() {
34         System.out.println("getServletInfo()...");
35         return null;
36     }
37     /*
38      * 它是生命周期方法--由Tomcat来调用
39      * 它会在Servlet对象创建之后马上执行,并只执行一次!
40      * 
41      * 
42      * */
43     @Override
44     public void init(ServletConfig servletConfig) throws ServletException {
45         //第一个被Tomcat调用,然后会给它传参数ServletConfig
46         System.out.println("init()...");
47     }
48 
49     /*
50      * 它是生命周期方法--由Tomcat来调用
51      * 它会被调用多次!!
52      * 每次处理请求都是在调用这个方法!
53      * */
54     @Override
55     public void service(ServletRequest servletRequest, ServletResponse servletResponse)
56             throws ServletException, IOException {
57         System.out.println("service()...");
58     }
59 
60 }

浏览器访问Servlet:

1.给Servlet指定一个Servlet路径!(让Servlet与一个路径绑定在一起)

 2.浏览器访问Servlet路径

    给Servlet配置Servlet路径!

    这需要在web.xml中对Servlet进行配置

web.xml

<servlet>
 <servlet-name>XXX</servlet-name>//随便写
 <servlet-class>com.one.Aservlet</servlet-class>//Servlet的全路径
</servlet>


<servlet-mapping>//mapping的英语意思:映射
 <servlet-name>XXX</servlet-name>//跟上面的名字一样
 <url-pattern>/xx.servlet</url-pattern>//必须以 “/” 开头,后面可以随便写,但是可以没有扩展名,或直接写  “/AServlet”
</servlet-mapping>

原理图:

配置Servlet的路径

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 3         xmlns="http://java.sun.com/xml/ns/javaee" 
 4         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
 5         id="WebApp_ID" version="3.0">
 6       
 7       <servlet>
 8           <servlet-name>xxx</servlet-name>
 9           <servlet-class>one.servlet.AServlet</servlet-class>
10       </servlet>
11       
12       <servlet-mapping>
13           <servlet-name>xxx</servlet-name>
14           <url-pattern>/AServlet</url-pattern><!-- url的模式,即以什么样来访问,最终浏览器访问 -->
15       </servlet-mapping>
16   
17 </web-app>

http://localhost:8080/XJS_Servlet1/Aservlet请求两次后控制台的结果:

 

说明init()方法只在第一次请求时调用,也就是服务器给创建了它的对象

 当关闭服务器时,会执行destroy()方法(通俗地讲,就是servlet在第一次请求时生,在服务器关闭时死),且该servlet是单例的,只有一个对象。

 总结:

  生命周期方法:

    *void init(ServletConfig):出生之后(1次);

    *void service(ServletRequest request,ServletResponse response):每次处理请求时都会

    被调用

    *void destroy():临死之前(1次);

   特性:

    *单例,一个类只有一个对象;当然可能存在多个Servlet类!

    *线程不安全的,所以它的效率是高的!

  Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。

 

 

posted @ 2019-04-23 17:47  微微亮  阅读(229)  评论(0编辑  收藏  举报