Servlet总结

serlvet总结:
servlet的体系结构:


Servlet:接口
|
GenericServlet:抽象类
|
HttpServlet:抽象类
|
自定义servlet

servlet常用方法:


void init(ServletConfig config):初始化
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
void destroy():销毁

ServletConfig getServletConfig() :获取当前servlet的配置对象

GenericServlet常用方法:


除了service方法没有显示,其他都实现了
空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可

HttpServlet常用方法:


service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
doGet和doPost方法



servlet生命周期 ★★★


void init(ServletConfig config):初始化
* 初始化方法
* 执行者:服务器
* 执行次数:一次
* 执行时机:默认第一次访问的时候
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
* 服务
* 执行者:服务器
* 执行次数:请求一次执行一次
* 执行时机:请求来的时候
void destroy():销毁
* 销毁
* 执行者:服务器
* 执行次数:只执行一次
* 执行时机:当servlet被移除的时候或者服务器正常关闭的时候



serlvet是单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.


url-pattern的配置:★


方式1:完全匹配 必须以"/"开始 例如: /hello /a/b/c
方式2:目录匹配 必须"/"开始 以"*"结束 例如: /a/* /*
方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp *.do *.action

优先级:


完全匹配>目录匹配>后缀名匹配


练习:


有如下的一些映射关系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do


问题:


当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2.
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。


在servlet标签有一个子标签 load-on-startup
作用:用来修改servlet的初始化时机
取值:正整数 值越大优先级越低



当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息



路径的写法:
相对路径:
当前路径 ./ 或者 什么都不写
上一级路径 ../
绝对路径:(我们使用)
带主机和协议的绝对路径(访问站外资源)
http://www.itheima.com/xxxx
http://localhost:80/day09/hello
不带主机和协议的绝对路径
/day09/hello(经常使用)



案例3-统计登录成功的总人次,
需求:
在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次
技术分析:
ServletContext



ServletContext:
上下文(全局管理者)
常用的方法:
setAttribute(String key,Object value);//设置值
Object getAttribute(String key);//获取值
removeAttribute(String key)://移除值
获取全局管理者:
getServletContext():



步骤分析:
1.在项目启动的时候,初始化登录次数
在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
3.然后将次数+1,让后将值设置回去
4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可



ServletConfig:(了解)
servlet配置对象
作用:
1.获取当前servlet的名称
2.获取当前servlet的初始化参数
3.获取全局管理者
方法:
String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)

String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
初始化参数是放在 web.xml文件
servlet标签下子标签 init-param

★getServletContext():获取全局管理者
servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象
传递给servlet,由servlet的getServletConfig方法获取



ServletContext:理解
上下文(全局管理者)
一个项目的引用.代表了当前项目.
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
作用:
1.获取全局的初始化参数
2.共享资源(xxxAttribute)
3.获取文件资源
4.其他操作
获取servletcontext:
方式1:了解
getServletConfig().getServletContext()
方式2:
getServletContext()
常用方法:
1.了解
String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
在根标签下有一个 context-param子标签 用来存放初始化参数
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
2.xxxAttribute
3.
String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
getRealPath("/"):D:javaToolsapache-tomcat-7.0.52webappsday09
InputStream getResourceAsStream(String path):以流的形式返回一个文件
4.获取文件的mime类型 大类型/小类型
String getMimeType(String 文件名称)



域对象:★★★
servletcontext
当成map集合
常用方法:
xxxAttribute()
servletcontext创建和销毁:
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
存放:
共享的数据



获取文件的路径:
通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以
类.class.getClassLoader().getResource("2.txt").getPath()

原文地址:https://www.cnblogs.com/10zhang/p/9471583.html