servlet精华知识回顾

Servlet

什么是Servlet

Servlet是一个功能,如果你希望你的项目功能多一些,那就要多写一此Servlet;

Servlet是JavaWeb三大组件之一,也是最重要的组件!

Ø 三大组件:Servlet、Filter、Listener

Servlet是一个我们自定义的Java类,它必须要实现javax.servlet.Servlet接口。

Servlet是动态资源!

Servlet必须在web.xml中进行配置后,才能被访问。(把Servlet与一个或多个路径绑定在一起)

2如何实现Servlet

实现Servlet有三种方式:

Ø 实现Servlet接口;

Ø 继承GenericServlet类;

Ø 继承HttpServlet类(最佳选择)。

3Servlet的生命周期

3.1 生命周期相关方法

Servlet接口中一共是5个方法,其中有三个是生命周期方法。

Ø void init(ServletConfig):这个方法会在Servlet被创建后,马上被调用。只会被调用一次!我们可以把一些初始化工作放到这个方法中,如果没有什么初始化工作要做,那么这个方法就空着就可以了。

Servlet有两个时间点会被创建:一是在第一次被请求时,会被创建;二是Tomcat启动时被创建,默认是第一种,如果希望在tomcat启动时创建,这需要在web.xml中配置。

Ø void destroy():这个方法会在Servlet被销毁之前被调用。如果你有一些需要释放的资源,可以在这个方法中完成,如果没有那么就让这个方法空着。这个方法也只会被调用一次!

Servlet轻易不会被销毁,通常会在Tomcat关闭时会被销毁。

Ø void service(ServletRequest,ServletResponse):它会在每次被请求时调用!这个方法会被调用0~N次。

Ø String getServletInfo():它不是生命周期方法,也就是说它不会被tomcat调用。它可以由我们自己来调用,但我们一般也不调用它!你可以返回一个对当前Servlet的说明性字符串。

Ø ServletConfig getServletConfig():这个方法返回的是ServletConfig,这个类型与init()方法的参数类型相同。它对应的是web.xml中的配置信息,即<servlet>

3.2 ServletConfig、ServletContext、ServletRequest、ServletResponse

ServletRequest:封装了请求信息;

ServletResposne:用于向客户端响应;

ServletContext:它可以在多个Servlet中共享数据。

ServletConfig:它与<servlet>对应!

Ø 在<servlet>中可以配置<init-param>,即初始化参数,可以使用ServletConfig的getInitParameter(String),方法的参数是初始化参数名,方法的返回值是初始化参数值。

Ø getInitParameterNames(),该方法返回一个Enumeration对象,即返回所有初始化参数的名称。

Ø String getServletName(),它返回的是<servlet-name>元素的值

Ø ServletContext getServletContext(),它可以获取Servlet上下文对象。

4GenericServlet

它代理了ServletConfig的所有功能。所有使用ServletConfig才能调用的方法,都可以使用GenericServlet的同名方法来完成!

不能覆盖父类的init(ServltConfig)方法,因为在父类中该方法内完成了this.config=config,其他的所有ServletConfig的代理方法都使用this.config来完成的。一旦覆盖,那么this.config就是null。

如果我们需要做初始化工作,那么可以去覆盖GenericServlet提供的init()方法。

5HttpServlet

它提供了与http协议相关的一些功能。

只需要去覆盖doGet()或doPost()即可。这两个方法,如果没有覆盖,默认是响应405!

6Servlet细节

6.1 Servlet单例、线程不案例

Servlet是的单例的。所以一个Servlet对象可能同时处理多个请求;

Servlet不是线程安全的。

Ø 尽可能不创建成员变量,因为成员变量多个线程会共享!

Ø 如果非要创建,那么创建功能性的,只读!

6.2 Servlet的创建时间:第一次被请求、启动创建

* Servlet可以在第一次请求时被创建,还可以在容器启动时被创建。默认是第一次请求时!

* 在<servlet>添加一个<load-on-startup>大于等于0的整数</load-on-startup>

* 如果有多个Servlet在容器启动时创建,那么<load-on-startup>的值就有用了,创建的顺序使用它的值来排序!

6.3 <url-pattern>的配置

<url-pattern>中可以使用*表示所有字符,但它不匹配/。它的使用要求:

它要么在头,要么在尾。不能在中间;

如果不使用通配符,那么必须使用/开头。

如果一个访问路径,匹配了多个<url-pattern>,那么谁更加明确就匹配谁。

6.4 web.xml的继承

每个项目都有一个web.xml,但tomcat下也有一个web.xml,在${CATALINA_HOME}\conf\web.xml

conf\web.xml是所有项目的web.xml父文件,父文件中的内容等于同写在子文件中。

ServletContext

Servlet三大域对象:

ServletContext:范围最大,应用范围!

HttpSession :会话范围!

HttpServletRequest:请求范围!

域对象之一

域对象都有存取功能:

setAttribute(attrName, attrValue );//put

Object attrValue = getAttribute(attrName);//get

removeAttribute(attrName);//remove

1 ServletContext的作用

存取域属性,ServletContext是一个域对象;

可以用来获取应用初始化参数;

获取资源

2 ServletContext的生命周期

ServletContext在容器启动时就被创建了;

ServletContext在容器关闭时才会死!

一个项目只有一个ServletContext对象。

3 获取ServletContext

通过ServletConfig的getServletContext()方法来获取!

ServletConfig是init()方法的参数,那只能在init()方法中获取了;

GenericServlet代理了ServletConfig的所有方法,而且还提供了getServletConfig(),所以在GenericServlet的子类中可以使用如下方式来获取ServletContext对象:

this.getServletContext()

this.getServletConfig().getServletContext()

HttpSession也有这个方法,session.getServletContext()。

4 域对象:ServletContext

void setAttribute(String name, Object value):存储属性;

Object getAttribute(String name):获取属性;

void removeAttribute(String name):移除属性;

Enumeration getAttributeNames():获取所有属性名称;

5 获取初始化参数

一个 项目不只是可以配置servlet的初始化参数,还可以配置应用初始化参数

下面就是在web.xml中配置应用的初始化参数,这些参数需要使用ServletContext来获取

<context-param>

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

<param-value>v1</param-value>

</context-param>

<context-param>

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

<param-value>v2</param-value>

</context-param>

String getInitParameter(String name):通过参数名获取参数值;

Enumeration getInitParameterNames():获取所有参数的名称;

6 获取资源

获取真实路径:getRealPath(String path):路径必须以/开头!它相对当前项目所在路径的。

获取指定路径下的所有资源路径:Set set = sc.getResourcePaths(/xxx)

获取资源流:InputStream in = sc.getResourceAsStream(/xxx)

7 Class和ClassLoader获取资源

User.class如何变成Class<User>的呢,由ClassLoader完成的!把硬盘上的User.class加载到内存,变成Class对象。

使用它们获取资源流!它们相对类路径(classpath)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月19日

热门专题

云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
云南网站建设|云南网站制作,网站建设,云南网站开发,云南网站设计,云南网页设计,云南网站建设公司,云南网站建设
云南网站建设
昆明综合高中|昆明综合高中
昆明综合高中
大理科技管理学校|大理科技管理中等职业技术学校,大理市科技管理中等职业技术学校
大理科技管理学校
APP开发|app开发_app开发公司_app软件开发_专业app开发_云南app开发公司_app定制_原生app开发定制
APP开发

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部