1.概念
Servlet:服务器端小程序,是专门提供的一种服务器处理请求和响应结果的标准(接口)。
全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java应用的服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
2.servlet的工作原理
3.servlet的生命周期
Servlet实例由谁产生?
Servlet容器(tomcat、jboss、jetty)
Servlet实例什么时候产生?
一种是第一次访问一个请求的时候,产生对应的Servlet对象,只会产生一次。
另一种需要针对Servlet标签特殊配置
Servlet的入口:servlet配置完,怎么没有main方法呢?如何调用啊?
答:Servlet实际上是tomcat容器生成的,调用init方法可以初始化。他有别于普通java的执行过程,普通java需要main方法;但是web项目由于是服务器控制的创建和销毁,所以servlet的访问也需要tomcat来控制。通过tomcat访问servlet的机制是通过使用http协议的URL来访问,所以servlet的配置完想要访问,必须通过URL来访问,所以没有main方法。
4.servlet常用API
Servlet API由两个软件包组成,这两个包都在tomcat的servlet-api.jar包中。
-
Javax.servlet包:跟http请求无关的一般性servlet
-
Javax.servlet.http包:跟http协议相关的类
Servlet:
init()
service()
destroy()
HttpServlet:
常用接口: HttpServletRequest 接口 : 提供HTTP请求信息
HttpServletResponse 接口 : 提供HTTP响应
常用方法:doGet()
doPost()
实际上还有一些方法是不常用的。例如:doDelete和doPut
原因:就以我们最常用的Tomcat为例:tomcat的readonly参数默认是true,那也就是说默认情况下,是能接收“获取”的指令;然而delete指令是:通过http请求删除URL上的资源;put指令是:往服务器上传资源;不像get和post是专门用来获取资源的;所以不常用。
ServletConfig
常用方法:getInitParameter()
getInitParameterNames()
其他常用方法:
ServletRequest
ServletRequestWrapper extends ServletRequest
重写:getAttribute()
getParameter()
获取request对象的参数
Request.getParameter() 获取地址栏参数或表单字段值
Request.getAttribute() 获取作用域的属性值
5.Servlet示例程序
public class MyFirstServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("我处理http的GET请求");
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("我处理http的POST请求");
}
}
web.xml配置
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.edu.servlet.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>
6.过滤器
当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。
方法
- init:初始化过滤器
- destory:销毁过滤器
- doFilter:继续向后执行FilterChain的剩余部分
FilterChain是过滤器的链。以图为例我们可以认为:客户端请求到过滤器再到服务器、服务器响应从服务器到过滤器再到客户端;整个过程实际上是四个步骤,就是一条FilterChain。
7.监听器
监听器一般用来监听容器的创建和销毁。当然监听器也可以四大作用域对应的对象的创建和销毁,以及各自范围内参数的变化(包括:增、删、改)。
常见的监听器:
-
ServletContextListener
在日常工作当中比较常用,因为这个监听器在servlet初始化的时候,就能监听到;由于这个特征,我们常常用它来监听初始化状态,并且获取某些初始化的参数,例如:init-Parameter等。
-
ServletContextAttributeListener
-
HttpSessionAttributeListener
-
ServletRequestAttributeListener
属性监听器:xxxAttributeListener格式的监听器,用来监听四个作用域属性的增、删、改操作何时发生。以此特性,我们可以用它来生成日志:某时某分,某用户在某范围内增/删/改了某数据等。