• servlet知识点


    1.什么是servlet

    Servlet是sun公司提供的一门用于开发动态web资源的技术。servlet 基于request - response 请求模型 (http协议) Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口。 2.把开发好的Java类部署到web服务器中。

    servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。
      使用servlet的基本流程如下:
      ·客户端(很可能是Web浏览器)通过HTTP提出请求。
      ·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
      ·servlet将接收该HTTP请求并执行某种处理。
      ·servlet将向Web服务器返回应答。
      ·Web服务器将从servlet收到的应答发送给客户端。

    2.servlet的优点

      ■servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。
      ■servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。
      ■servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。

    3.servet对URL的匹配过程

    当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了

    4.servlet生命周期

    Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。包括加载实例化初始化处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init,  service 和 destroy 方法表达。

    描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法

    5、ServletJsp的区别?

    Servlet是直接执行的文件,Jsp是要被通过编译形成Servlet后才执行。

    6.servlet继承体系

    7.servlet的线程安全问题

    不要在servlet中写成员变量

    8.何让Servlet在服务器启动时,加载创建对象(servlet优化)

    9.四大共享范围

    apage 当前页面。

    bsession 同一个用户内。

    crequest 从上一页到下一个页面。

    dapplication 同一个网站内。

    10.servletContext对象

    应用一:全局初始化参数配置 (所有Servlet都可以访问)

    ServletConfig 配置初始化参数 区分开 

    1) 配置全局初始化参数(web.xml的一个servlet中写)

    <!-- 全局初始化参数 -->

      <context-param>

       <param-name>name</param-name>

       <param-value>张三</param-value>

      </context-param>

    2) 获得ServletContext对象 ServletContext context = getServletContext();

    3) 通过 String getInitParameter(String name)  获得全局参数

    应用二:多个Servlet之间可以共享数据 (ServletContext唯一的)

    共享全局唯一数据 :站点访问次数、数据库连接池 ,static 

    setAttribute(name,object)

    getAttribute(name)

    应用三:读取web工程中资源文件 

    day5工程中创建四个文件

    1、在day5工程根目录 创建 1.txt

    2、在WebRoot下 创建2.txt

    3、在WEB-INF下 创建3.txt

    4、在src下创建 4.txt 

    1.txt因为在WebRoot 外面 不会发布到tomcat服务器,无法端读取

    2.txt --- > getServletContext().getRealPath("/2.txt");

    3.txt --- > getServletContext().getRealPath("/WEB-INF/3.txt");

    4.txt 位于src下,复制到WEB-INF/classes下 ---> getServletContext().getRealPath("/WEB-INF/classes/4.txt");

    11.servletConfig对象

    Servlet的初始化 init 

    init(ServletConfig) ----- ServletConfig 对象 Servlet配置对象,用来在Servlet初始化阶段向Servlet传递信息 

    * GenericServlet中将 ServletConfig对象保存成员变量,同时提供getServletConfig方法 

    自定义Servlet中 通过 getServletConfig() 获得ServletConfig 对象 

    String getInitParameter(String name)  根据参数名称 获得 值 

    企业级应用: load-on-startup 结合 init-param 使一个Servlet在服务器启动时执行初始化,第一时间加载配置文件 ====> Struts 框架 

    struts1中应用

      <servlet>

        <servlet-name>action</servlet-name>

        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

        <init-param>

          <param-name>config</param-name>

          <param-value>

              /WEB-INF/struts-config.xml,

              /WEB-INF/struts-config-Wildcard.xml

           </param-value>

        </init-param>

        <load-on-startup>2</load-on-startup>

      </servlet>

    *** ServletConfig 配置参数 相当于当前Servlet 局部变量,无法被其它Servlet访问的 

    12.Servlet的基本架构 

    public class ServletName extends HttpServlet {
      public void doPost(HttpServletRequest request,HttpServletResponse response) throws
      ServletException, IOException {
      }
      public void doGet(HttpServletRequest request,HttpServletResponse response) throws
      ServletException, IOException {
      }
    }

    13.统计网站实现次数

    思路:

    具体代码实现:

  • 相关阅读:
    after change the pltask.cfg
    C++ map的基本操作和用法
    const char * char * const 以及char const *
    遇到segmentation fault 错误
    编译和链接通过生成可执行文件,但运行时找不到动态库
    Invalid Issuer
    数据库的相关操作
    Go项目实战:打造高并发日志采集系统(六)
    Go项目实战:打造高并发日志采集系统(五)
    Go项目实战:打造高并发日志采集系统(四)
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4871651.html
Copyright © 2020-2023  润新知