Servlet入门(13)

一、Servlet简介

1、什么servlet

Servlet是运行在服务器端的java小程序,是sun公司提供的一套规范(即接口),用来处理客户端请求并将结果动态返回给浏览器。Servlet实质就是java代码,通过api动态地向客户端输出内容。

servlet规范:(1)Servlet技术
            (2filter技术——过滤器
            (3)listener技术——监听器

二、Servlet的API(生命周期)

(1)Servlet接口中的方法

1)init(ServletConfig config) 第一次访问的时候调用(Servlet对象创建的时候)
ServletConfig:代表的是该Servlet对象的配置信息(web容器会在创建servlet实例对象时将web.xml内的初始化参数封装到servletconfig中

2)Servlet(ServletRequest request,ServletResponse response)每次请求都会执行
ServletRequest:代表请求,可以理解为ServletRequest内部封装的是http请求的信息。
ServletResponse:代表响应,可以理解为ServletResponse内部封装的是要响应的信息。

3)destroy() Servlet销毁的时候执行

(3)Servlet的生命周期

1)Servlet何时创建:默认第一次访问Servlet时创建该对象
2)Servlet何时销毁:服务器关闭时
3)每次必然访问的方法:Servlet(ServletRequest request , ServletResponse response)

三、Servlet的访问过程

这里写图片描述


这里写图片描述

三、servlet配置

1、基本配置

web.xml中的配置中的url配置方式:
1、完全匹配。访问的资源与配置的资源完全相同才能访问。
2、目录匹配 格式:/虚拟目录../* (*代表可以访问该目录下的所有资源。)
3、扩展名匹配 格式:*.扩展名 (可以访问以该扩展名结束的所有资源)
注意:目录匹配与扩展名匹配不可一起使用。

2、服务器启动实例化Servlet配置

Servlet对象默认第一次启动时创建
可以对默认方式进行修改:在servlet配置中加上一个配置< load-on-startup >,这样servlet对象会在服务器启动时就创建。

3、缺省Servlet

可以将url-pattern配置成一个/ 代表该Servlet是缺省的Servlet(当访问的资源地址中所有的Servlet都不匹配时候即自动匹配缺省Servlet)

其实WEB应用中,所有的资源响应都是servlet负责,包括静态资源。(包括HTML,JSP等静态资源都是通过servlet访问的)例如:在WebContent下创建一个1.html文件,在查找该文件时也是由tomcat通过servlet进行查找,首先查找工程中的web.xml配置文件中,发现找不到,然后tomcat会去tomcat中位于config文件夹下的总配置文件web.xml中查找缺省Servlet,再由DefaultServlet类对WebContent文件夹下进行查找,找到1.html后,用write方法一句句的写出该静态资源中的内容。
下图为总配置文件web.xml中的缺省servlet
这里写图片描述

四、HttpServlet

现在多采用extend HttpServlet类来实现Servlet接口(可以通过jar包的源码找到继承树)

五、ServletContext

1、什么是ServletContext

ServletContext代表的是一个Web应用的环境(上下文)对象,内部封装的是该Web应用的信息。该对象每个Web应用只有一个(一个Web应用有多个Servlet对象)。

ServletContext的生命周期:Web应用被加载时创建,Web应用被卸载时销毁。

2、怎样获得ServletContext对象

1)ServletContext ServletContext=config.getServletContext();
2)ServletContext ServletContext=this.getServletContext();(此方法同方法一,通过继承方法)

3、ServletContext的作用

1)获得Web应用全局的初始化参数
在web.xml中配置初始化参数——< context-param>……< /context-param>
通过ServletContext对象获得参数——context.getInitParameter(name);(context为ServletContext对象)

2)获得Web应用中任何资源的绝对路径
方法:String path=context.getRealPath();(括号中为相对于该Web应用的相对地址)
有了这个可以得到相对于Web应用的相对路径后即使更换了发布环境,这个路径也永远都是正确的。
(如果是实际需要在非servlet环境下要读取资源文件时可以采用类加载器的方式)
3)ServletContext对象是一个域对象

什么是域?什么是域对象?
存储数据的区域就是域对象。如图,Servlet对象可以向域对象存取数据。

这里写图片描述

ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向域中存取数据,而且数据可以共享)
常用方法:
void setAttribute(String,Object);
Object getAttribute(String);
void removeAttribute(String);

4)实现Servlet的转发
请求重定向:302+Location(两次请求两次响应)例如:甲找乙借钱,乙让甲去找丙借。
请求转发:服务器内不进行资源流转 (一次请求一次响应,来实现资源流转)例如:甲找乙借钱,乙去找丙借钱给甲。
在doGet方法中:
RequestDespatcher dispatcher=this.getServletContext().getRequestDispatcher(“url”);//参数为虚拟路径
dispatcher.forward(request,response);//将跳转到虚拟路径对应的类中执行。


在创建Servlet对象时,tomcat会自动调用GenericServlet类中的init(ServletConfig config)方法,读取web工程下的web.xml文件并将其中的信息打包传给这个参数,然后在此方法中将参数保存在GenericServlet类中的私有成员变量config中。如果程序员想要重写init方法,只需选择空参的init方法即可,因为在有参数的init方法中会调用空参的init方法。这样就保证了带参数的init方法正常执行(即保存了config成员变量),又保证了重写的init方法可以被执行。(Ps:如果重写带参数的init方法,为了保证config成员变量的存在,必须在方法体第一句写:super.init(config);)

  public void init(ServletConfig config)
        throws ServletException
    {
        this.config = config;
        init();
    }

    public void init()
        throws ServletException
    {
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值