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/*
    (精确度越高,匹配越少,优先级越高,*只能放两边)

      

  • 相关阅读:
    XML常用操作
    关于C#的单斜杆和双斜杆
    XX驱动保护之KdDisableDebugger
    提供程序未返回 ProviderManifestToken 字符串 解决方案
    C# int转short
    C#_混淆/反混淆,逆向/反逆向之Dotfuscator
    mouseout和mouseover、mouseenter和mouseleave
    输入法下keypress、keyup失效的解决方案
    linux常用基本命令
    如何把已完成的项目部署到服务器
  • 原文地址:https://www.cnblogs.com/jiangbei/p/6681949.html
Copyright © 2011-2022 走看看