zoukankan      html  css  js  c++  java
  • Servlet详解

    Servlet的全称server applet

      servlet是一种动态资源.

    1.servlet干什么用的?
      处理请求,生成响应.

    2.我们如何创建一个Servlet呢?

    • 实现servlet接口即可.
    • 继承javax.servlet.GenericServlet
    • 继承javax.servlet.http.HttpServlet

    3.Servlet中的其他方法.

    • getServletInfo     获得servlet的信息(版本,作者,版权..),没用.
    • getServletConfig   返回servletConfig对象.

    4.ServletConfig对象是什么?
    封装了servlet在web.xml中的配置.
    方法:

    • getServletName    获得配置文件中 <servlet-name> 元素的内容
    • getInitParameter    根据 <init-param>中的 <param-name> 获得 </param-value>
    1 <init-param>
    2   <param-name>name</param-name>
    3   <param-value>tom</param-value>
    4 </init-param>
    • getInitParameterNames 返回所有<param-name> .
    • getServletContext 返回一个ServletContext

    5.其他实现server的方式
    GenericServlet:

    • 保管ServletConfig对象
    • 实现了ServletConfig接口    为调用方便

      注意: 不要重写servlet接口中的 init方法. 不然第一步优化就白做了. 我们要做初始化的动作,需要去重写GenericServlet提供的空参init方法.

    HTTPServlet:
      1.因为我们web项目基于HTTP协议,所以Service方法中传过来的request,response对象都是基于HTTP协议的. 也就是HttpServletReueqst,也就是HttpServletResponse. 它帮我们进行了强转.
      2.我们有可能在不同的请求方式时做不同的事情. 根据请求方式不同,调用不同的方法
         例如GET请求会调用doGet()方法,POST请求会调用doPost()方法;

    6.Servlet中的其他细节

    • 关于Servlet线程安全问题!

      因为在servlet运行期间只有一个servlet实例存在.可能会同时处理多个请求.那么我们在servlet中声明成员变量来存储用户数据是有线程安全问题的.我们应该如何解决呢?

    第一中是实现SigleThreadModel (不推荐了!),第二种是使用局部变量保存用户数据.(推荐使用!)

    • 关于servlet随着项目的启动而创建

          使用<load-on-startup>配置来实现.
      例如:

    1 <servlet>
    2     <servlet-name>AServlet</servlet-name>
    3     <servlet-class>cn.itcast.servlet.hello.AServlet</servlet-class>
    4     <load-on-startup>3</load-on-startup>
    5 </servlet>

    填写一个整数,整数越小优先级越高.如果优先级一样,启动顺序按照配置顺序.

    • 关于Servlet路径配置问题详解

          <url-pattern>
            路径匹配:
            /AServlet            http://localhost:8080/Day07-servlet/AServlet
            /ABC/AServlet         http://localhost:8080/Day07-servlet/ABC/AServlet
            /ABC/ABC/AServlet     http://localhost:8080/Day07-servlet/ABC/ABC/AServlet
            /ABC/ABC/*        http://localhost:8080/Day07-servlet/ABC/ABC/oasdojasdjioasd
            /*               http://localhost:8080/Day07-servlet/asdiojoiajsidojoasd
            /                 /*
    后缀名匹配:
    *.do ==> struts
    *.action ==> struts2
    *.html ==>
    注意:1.关于路径,配置的路径匹配范围越大优先级越低. 2.两种匹配模式不能混用. 例如错误的例子: /*.do

  • 相关阅读:
    DVD X Player 5.5 PRO
    Freefloat FTP Server 1.0漏洞分析
    基于约束的SQL攻击
    Commons-Collections漏洞
    Code-Audit-Challenges-php-2
    GSM Sniffer环境--c118+osmocombb
    XXE (XML External Entity Injection) :XML外部实体注入
    hyperledger fabric学习(1)
    zero to one (4)
    zero to one (3)
  • 原文地址:https://www.cnblogs.com/hanwen1014/p/6857191.html
Copyright © 2011-2022 走看看