Servlet

本文详细介绍了Servlet技术的基础概念、实现方法及生命周期,探讨了在MyEclipse中的开发流程,并深入解析了ServletConfig与ServletContext的作用,同时提供了优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 概念  Servlet ==>Server Applet  ==>  服务器端的小程序

     Servlet 技术的三大组件之一

     Servlet    动态资源

     Filter     过滤器

     Listener  监听器

  Servlet 就是一个接口 接口里面定义了一些方法,这些方法分为生命周期方法和另外一部分没有用的方法‘’

   二 实现方法

         *实现接口

        * 继承GenericServlet

        * 继承HTTPServlet


三 在MyEclipser中开发Servlet

     1创建项目

     2创建类并实现Servlet接口

    3.编译并将编译后的class文件方知道WEB-INF/classes目录下(Myeclipse会自动做这件事)

     4.配置Servlet

 四 Servlet 生命周期详解

           *Servlet创建的时间? 第一次访问Servlet的时候

           *Servlet对象创建的特点? 通过只在第一次调用init的对象,一个servlet实例在服务器中只有一个.

          *当请求访问Servlet时候 servlet方法会处理请求

           *当服务器要关闭是,服务器会销毁服务器中Servlet对象,在真正销毁之前调用destory方法.

五.Servlet 中其他方法

          getServletInfo==>没用

          getServletConfig==>获得启动信息

六.ServletConfig 

        string  getInitParameter(String name) 获得配置信息  根据键获得值

         Enumeration     getInitParameterNames()获得配置的所有键

        String    getServletName()         获得Servlet的名称  <servlet-name>AServlet</servlet-name>

ServletContext getServletContext() 该方法返回ServletContext对象.


七.Servlet的优化.GenericServlet
1.init方法 妥善的保存config对象
2.空参init方法,为了防止开发人员重写 原生init方法
3.service方法空实现=> 声明城抽象
4.destory方法空实现 
5.实现getServletInfo,getServletConfig
6.实现了servletConfig接口. 接口中的方法直接调用config实现类实现.

八.HTTPServlet => 在GenericServlet基础上进一步优化
1.强转
2.根据不同的请求方式调用不同的方法

九 Servlet细节

             Servlet的线程安全问题

            Servlet的实例在服务器运行期间只有一个实例存在所以是线程不安全的

             线程不安全:如果使用成员变量来接受线程参数,如果发生并发那么就会出现线程问题(覆盖)

             解决方法 将装载线程参数的变量放置到方法中去 编程局部变量

            *Servlet 的创建实例时机

              默认情况:第一次访问Servlet时候

            让Servlet实例随着服务器的启动而启动

添加一个配置即可:<load-on-startup></load-on-startup>

在该配置中填入一个整数即可实现.
数字的数值,在有多个servlet需要随着服务器启动而启动时,决定启动顺序.
数字越小优先级越高. 最小就是0. 一般0~5.  3.
如果数字一样,谁先配置谁先创建.

Servlet 的路劲配置

<url-pattern></url-pattern>

该配置,配置方式有两种
路径匹配:  一定以"/"开头
/AServlet
/ABC/AServlet
/ABC/BCD/AServlet
/ABC/*
/*
/
后缀名匹配: 以*开头
*.do
*.action
*.html
注意:
匹配范围越大,优先级越低.
后缀名匹配和路径匹配不能同一配置中混合使用. 例如:  /*.do
一个servlet可以配置多个路径. 直接在<servlet-mapping>元素中添加多个<url-pattern>配置即可.
优先级: /AServlet > /abc/*  >  *.do  >  /* 
*tomcat/conf/web.xml 文件理解(了解)
该文件可视为所有项目中web.xml的父配置.

十.ServletContext

      ServletContext 对象可以看做是web项目的法人.

       一个web项目只有一个ServletContext

       创建 随着项目的创建而创建

       销毁  随着项目的销毁而销毁

获得:通过ServletConfig对象的 getServletContext方法获得.


功能 :获得项目参数        是servlet技术三个域对象之一       获得项目内部的资源

//-----------------------------------------------------------------------------------

功能:

        1>获得项目参数

             String getInitParameter(String name)

              Enumeration getInitParameterNames()

//-----------------------------------------------------------------------------------

          2>域功能

            Servlet三大域

                          application          request            session

           jsp技术的域 page

        域实际上是服务器组件之间的通讯

        域的实质就是map.

*操作域的方法:
void setAttribute(String key,Object value);
Object getAttribute(String key);
Enumeration<String> getAttributeNames();
void removeAttribute(String key);


//--------------------------------------------------------------------------------------
3>获得项目内资源
//  该方法使用相对路径获得 资源的流   其中  "/" ==> 项目根下 WebRoot 
InputStream sc.getResourceAsStream(); 
// 使用相对路径获得绝对路径
String  sc.getRealPath("/student.xml");

// "/"开头        : "/"=>代表classes目录
// 不以"/"开头:  会以当前class所在包为根
InputStream is = c.getResourceAsStream("student.xml");
System.out.println(is);
//获得web-inf/classes下的student.xml的流
InputStream is2 = c.getResourceAsStream("/student.xml");
System.out.println(is2);

//也可以获得绝对路径
URL url =  c.getResource("/student.xml");

System.out.println(url.getPath());







            


 

       











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值