zoukankan      html  css  js  c++  java
  • 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/*
    (精确度越高,匹配越少,优先级越高,*只能放两边)

      

  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/jiangbei/p/6681949.html
Copyright © 2011-2022 走看看