JavaWeb基础—Servlet

一、Servlet是什么

  是服务器上运行的Java小应用程序,并被称为JavaWeb三大组件之一

  通常我们把实现了Servlet的类,称之为Servlet

   Servlet作用主要是

              1.接收请求数据
            2.处理请求
            3.完成响应

二、Servlet的生命周期

  1.加载和实例化

  2.初始化 (#init()方法

  3.请求处理(#service()方法

  4.服务终止(#destroy方法

  简易的Servlet的运行流程:

  服务器接收到Servlet访问请求后,服务器检查是否是首次访问

    是首次访问,则创建Servlet实例(容器通过反射创建),调用实例对象的init()方法,再执行之后的操作

    非首次访问,则直接封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

    Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

三、如何编写Servlet

  实现servlet三种方式:
      1.实现javax.servlet.Servlet接口
      2.继承javax.servlet.GenericServlet类
      3.继承javax.servlet.http.HttpServlet类(此类继承2中类)
        需要重写的是doGet()、doPost();

  sun公司为我们提供了1的2 和3 两个默认实现类,通常我们应该采用方式3开发Servlet

  HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,

  如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,

  通常只需要覆写doGet或doPost方法,而不要去覆写service方法。

 在myeclispe中编写Servlet

  (在new webProject时注意next->next->勾选generate web.xml)

  可以直接 new 一个 Servlet,然后再向导中填写name(通常首字母大写并以Servlet结尾),勾选需要的doGet()或doPost()方法

 

在点击next后,Servlet name 和mapping ,当然是可以使用默认,但这里建议将mapping前的前缀/servlet干掉(访问时可以少写一层)

点击finish后,相关的class mapping配置会由工具自动在web.xml中配置好

<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,

分别用于设置Servlet的注册名称和Servlet的完整类名。 
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,

分别用于指定Servlet的注册名称和Servlet的对外访问路径。

之后正确输入访问地址即可访问了!(比如去掉/servlet前缀后的一个例子:http://localhost:8080/day09/HServlet)

servlet特性(小细节):
1.单例
2.线程不安全:当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用Servlet的service方法,因此service方法内如果访问了同一个资源的话,就有可能引发线程安全问题

(不在servlet创建成员,创建局部变量即可
可以创建无状态成员
可以创建有状态成员,但状态为只读(明星拍照举例))

3.效率高
4.servlet可以有多个访问路径,也可以使用通配符<url-parten>/servlet/*
(精确度越高,匹配越少,优先级越高,*只能放两边)

  

原文地址:https://www.cnblogs.com/jiangbei/p/6681949.html