Servlet
Servlet
实现方式
1.实现Servlet接口
重新service方法
2.继承GenericServlet抽象类
重新service方法
3.继承HttpServlet抽象类(右键new一个Servlet)[重要]
重新doGet()和doPost()方法
继承体系
Servlet 接口
|
GenericServlet 抽象类 与协议无关的servlet,父类
|
HTTPServlet 抽象类 跟HTTP协议相关的(以后都是用的这个协议)
生命周期
1、初始化
默认情况,第一次被访问的时候,servlet被创建
配置标签让servlet在服务器启动的时候创建
2、服务
每访问一次servlet都会调用service方法
3、销毁
服务器关闭的时候,servlet被销毁
线程安全
1、出现的原因
如果有多个客户端并发的访问同一个servlet,web服务器会为每一个客户端的请求创建一个线程,在线程中调用servlet的service方法,如果多个线程并发的访问同样的数据,那么这个时候就会出现线程的安全问题
2、解决方案
尽量减少使用成员变量
把可能会出现问题的代码放到同步代码块中(不推荐,效率太低)
访问路径
1、完全路径匹配
比如:/hello /aaa/hello
特点:以/开头
2、路径匹配
比如:/* /aaa/* /aaa/bbb/*
特点:以/开头,以*结尾
3、扩展名匹配
比如:*.do *.action
特点:不能以/开头
4、优先级
完全路径匹配 > 路径匹配 > 扩展名匹配
ServletConfig[了解]
相关概念
是当前servlet的配置信息对象,在servlet初始化的时候,把一些配置信息传递给servlet
配置方式
1、web.xml方式
<servlet>
<servlet-name>servletConfigDemo</servlet-name>
<servlet-class>com.itheima.servlet.ServletConfigDemo</servlet-class>
<!--配置ServletConfig初始化参数-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>desc</param-name>
<param-value>This is ServletConfig</param-value>
</init-param>
</servlet>
2、注解方式
@WebServlet(value = "/ServletDemo01",initParams = {@WebInitParam(name = "username",value = "张三"),@WebInitParam(name = "password",value = "123")})
常用方法
1、获取方式
(1)通过init方法来获取,他会作为参数传进来
(2)调用getServletConfig方法来获取(推荐)
2、对象方法
方法 | 备注 |
---|---|
String getInitParameter(String name) | 获取Servlet指定的初始化参数 |
Enumeration getInitParameterNames() | 获取Servlet所有的初始化参数的名称 |
ServletContext getServletContext() | 获取ServletContext对象 |
String getServletName() | 获取Servlet的名称 |
ServletContext[重要]
相关概念
1、概念:
应用的上下文对象,他是在服务器启动的时候,会为每一个web项目创建一个单独的servletContext对象
他代表了当前的web应用,可以获取应用的全局初始化参数,也可以在多个servlet之间共享数据
2、域对象
其实就在这个对象里面保存的数据,有一定的时间范围和空间范围
3、servletContext对象范围
时间范围:服务器启动到关闭
空间范围:可以在整个web项目中共享
配置方式
只有web.xml的方式
<context-param>
<param-name>globalEncoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
<context-param>
<param-name>globalDesc</param-name>
<param-value>This is ServletContext</param-value>
</context-param>
常用方法
1、获取方式
this.getServletConfig().getServletContext()方法
this.getServletContext()方法(推荐)
2、对象方法
String getInitParameter(String name) 获取指定的web应用的初始化参数的值
String getContextPath() 获取当前应用的虚拟目录
String getRealPath(String path) 获取应用部署的真实路径
3、作为域对象的方法
setAttribute(key,value) 设置数据
getAttribute(key) 获取数据
removeAttribute(key) 移除数据
请求响应的流程
服务器会为用户的每一次请求创建一个请求对象和一个响应对象,用户提交过来的数据都封装在请求对象中,我们就可以通过请求对象(request)获取用户提交过来的数据,进行处理,然后把处理好的数据封装到响应对象(response)中,以响应消息的形式发给浏览器,然后浏览器再进行展示