昨天聊了一大堆乱七八糟的东西。今天给你们分享一下当初我学习JavaWeb的笔记吧。
Servlet技术是JavaWeb中的核心技术,emmmmmmmm。。。。
太枯燥了,仍是先从API开始说吧,
首先ServletAPI中有4个Java包:
一、javax.servlet:其中包含定义Servlet和Servlet容器之间契约的类和接口
二、javax.servlet.http:其中包含定义HTTPServlet和Servlet容器之间契约的类和接口
三、javax.servlet.annotation: 其中包含Servlet、Filter、Listener的标注,它还为被标注元件定义元数据
四、javax.servlet.descriptor :其中包含提供程序化登陆web应用程序的配置信息的类型。
二. Servlet技术概述
Servlet技术的核心是Servlet接口,他是全部Servlet类必须直接或间接实现的一个接口,在编写实现Servlet的Servlet类的时候是直接实现它,在扩展实现这个接口的类的时候就是间接实现它。
Servlet接口中定义了Servlet与Servlet容器之间的契约,这个契约归结起来就是:Servlet容器将Servlet类加载到内存,并在Servlet类的实例上调用具体的方法。在一个应用程序中每种Servlet类种只能有一个实例。
用户请求导致Servlet容器调用了Servlet类种的service方法,而且传入一个ServletRequest实例和一个ServletResponse的实例,ServletRequest中封装了当前的HTTP请求,
所以Servlet开发人员没必要解析和操做原始的HTTP请求数据.ServletResponse表示=当前用户的HTTP响,使得将响应发回客户端变得十分容易.
对于每个应用程序,Servlet容器还会建立一个Servlet Context的实例,这个对象中封装了上下文的环境详情,每一个上下文只有一个ServletContext.每一个Servlet示例也都有一个封装Servlet配置的ServletConfig
三, Servlet接口
Servlet接口中定义了5个方法:java
一、void init(ServletConfig config) throws ServletException
二、void service(ServletRequest request, ServletResponse response) throws ServletException,java.ioi.IOException
三、void destroy()
四、java.lang.String getServletInfo()
五、ServletConfig getServletConfig()
这里须要注意的是,在编写Java方法签名的时候,对于与包含该方法的类型不处于同一个包中的类型的时候要使用类的全名.因此在service方法中javax.servlet.ServletException的签名中能够不用写包的名称,可是java.io.IOException则要编写完整的类名称.
在这五个方法中,init、service和destroy是生命周期方法.Servlet容器根据如下规则调用这三个方法:
init: 当Servlet第一次被请求的时候Servlet容器会调用这个方法,在后续的请求中不会被再次调用
service: 每当请求Servlet的时候多会调用一次
destroy: 当销毁Servlet的时候,该方法被调用.web
1、ServletRequset接口
对于每个HTTP请求,Servlet容器都会建立一个ServletRequest实例,并将他传递给service方法。ServletRequset封装了关于这个请求的信息。
ServletRequset接口中定义了一些方法:
浏览器
getParameter是在ServletRequest中最经常使用的方法。该方法一般是用来返回HTML表单域的值,getParameter也能够用于获取查询字符串的值。
2、ServletResponse接口jvm
javax.servlet.ServletResponse接口表示一个Servlet响应,在调用service方法以前Servlet容器首先建立一个ServletResponse的实例,并将他做为第二个参数传入到service方法中,ServletResponse隐藏了像浏览器发送响应的复杂过程。
在ServletResponse接口中,定义的方法之一是getWriter方法,该方法返回了一个能够向客户端发送文本的java.io.aPrintWriter。默认的状况下该对象采用的是ISO-8859-1的编码方式。
3、ServletConfig
当Servlet容器初始化Servlet的时候,Servlet容器会给Servlet的init方法传入一个ServletConfig的实例,该实例中封装了能够经过@WebServlet或者部署描述符传递给Servlet的配置信息
这样传入的每一条信息就是一个初始参数,一个初始参数有key合 value两个元件
为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法,getInitParameter方法的签名以下:分布式
此外,getInitParameterNames方法则是返回全部初始化参数名称的一个Enumeration:学习
举个例子,当要获取contactName参数的值,要使用下面的方法签名编码
除了getInitParameter和getInitParameterNamespace以外,ServletConfig还提供了一个颇有用的方法:getServletContext。利用这个方法能够从Servlet内部获取ServletContext。spa
4、ServletContext
ServletContext表示Servlet应用程序,每一个应用程序只有一个上下文对象,当把一个应用程序同时部署到多个容器的分布式环境中的时候,每一个jvm上面的Web应用程序都会有一个ServletContext对象。
经过ServletConfig中调用getServletContext方法,能够得到ServletContext实例,有了ServletContext就能够共享从应用程序中全部资料处访问到的信息,而且能够动态的注册web对象,前者将对象保存在ServletContext内部的Map中,
保存在ServletContext中的对象被称做为属性
ServletContext中的如下的方法负责处理属性:对象
5、GenericServlet抽象类
GenericServlet实现了Servlet和ServletConfig两个接口,而且完成了如下任务:
一、将init方法中的ServletConfig付给一个类级的变量,以即可以经过调用getServletConfig获取,
二、将接口中的全部方法提供默认实现,
三、提供方法,包围ServletConfig中的方法接口
6、HttpServlet
HttpServlet类覆盖了javax.servlet.GenericServletl类,在使用HttpServlet的时候,还要借助分别表明Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。
HttpServletRequest接口扩展了javax.servlet.ServletRequest,HttpServletResponse接口扩展了javax.servlet.ServletResponse。
HttpServlet覆盖了GenericServlet中的service方法,而且经过下面的签名再添加一个service方法:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,java.io.IOException
新的service方法和javax.servlet.Servlet中的service方法之间的区别在于参数列表不一样
HttpServletRequest :表示Http环境中的Servlet请求,它扩展了javax.servlet.ServcletRequest接口,中年服装你并添加了几个扩展的方法
HttpServletResponse: 表示Http环境中的响应,该接口一样的扩展了javax.servlet.ServletResponse接口,新增了如下的几种方法:
Servlet小结
Servlet技术是javaEE技术的一部分,全部的Servlet都运行在Servlet容器中,容器和Servlet间的接口为javax.servlet.Servlet.javax.servlet包下还提供了一个名为GenericServlet的Servlet实现类,该类是一个辅助类。
以即可以更加方便的建立一个Servlet。不过因为大部分的Servlet都运行在Http的环境中,所以就派生出来了一个javax.servlet.http.HttpServlet的子类更加实用。注意,HttpServlet也是GenericServlet的子类。
emmmmm。。。。。。
必定很枯燥吧,可是没有办法,这些干货就是这样,学技术的话仍是要耐得住性子。好了,下一篇博客给你们用Servlet写一个小Demo,但愿能缓解一下你们的枯燥!