Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于JAVA编程语言的WEB服务器端编程技术。一个Servlet程序就是一个实现了特殊JAVA接口的类,它由支持Servlet(具有Servlet引擎)的WEB服务器调用和启动运行。一个Servlet程序负责处理它所对应的一个或一组URL访问地址的请求,并接受客户端发出的访问请求信息和产生响应信息
Servlet作用:
获取客户端通过HTML的FORM表单传递的数据和URL后面的参数信息
创建对客户端的响应消息内容
访问服务器端的文件系统
连接数据库并开发基于数据库的应用
Servlet框架是由2个Java包组成:(1)javax.servlet和(2)javax.servlet.http
(1)javax.servlet包中定义了有Servlet类都必须实现的接口和类。
javax.servlet包的接口为:
ServletConfig接口 ---- 在初始化过程中由Servlet容器使用
ServletContext接口 ---- 定义Servlet用于获取容器信息的方法
ServletRequest接口 ---- 向服务器请求信息
ServletResponse接口 ---- 响应客户端请求
Servlet接口 ---- 定义所有Servlet必须实现的方法
javax.servlet包中的类为:
ServletInputStream类 ---- 用于从客户端读取二进制数据
ServletOutputStream类---- 用于将二进制数据发送到客户端
GenericServlet类 ---- 抽象类,定义一个通用的,独立于地层协议的Servlet。
(2)javax.servlet.http包中定义了采用HTTP通信的HttpServlet类。
javax.servlet.http包的接口为:
HttpServletRequest接口 ---- 提供http请求
HttpServletResponse接口 ---- 提供http响应
HttpSession接口 ---- 用于标识客户端并存储有关客户信息
HttpSessionAttributeListener接口 ----实现这个侦听接口用户获取会话的属性列表的改变的通知
javax.servlet.http包中的类:
HttpServlet类 ---- 扩展了 GenericServlet的抽象类,用于扩展创建Http Servlet
Cookie类---- 创建一个Cookie,用于存储Servlet发送给客户端的信息
.Servlet体系结构
Servlet-->GenericServlet-->HttpServlet-->用户自定义的Servlet
Serlvet生命周期的三个方法:init()-->service()-->destroy()
2>生命周期的各个阶段:
实例化:Servlet容器在接收到客户端请求后,如果需要创建Servlet,首先将客户请求封装与Request对象中,然后创建Servlet类的实例对象;
初始化:Servlet容器调用Servlet的init()方法,该方法只调用一次,所以可以用于防止一次性设置代码;
服务:服务器每次接收到对Servlet的请求,都会产生一个新的线程,调用Service()方法,Service()方法检查Http请求的类型(get,post,put,delete等)并相应的调用deGet(),doPost(),doPut(),doDelete()方法;一般在操作是直接选择覆盖某一Do方法,而不是直接覆盖Service()方法。Servlet对Request中传进的参数进行分析处理后将回馈消息封装与Response对象中,并将其传送给Servlet容器;
销毁:销毁实例之前调用destroy()方法
不可用:销毁实例并标记为垃圾处理
几个内建对象的作用范围:
Request和Response对象:时间上再一次请求中,在这次请求中把Request中的信息传给别的资源,空间上只能是发送请求的客户端有效
HttpSession:一次连接直到客户端关闭,时间上比上面的对象长一些,空间上一致
ServletCofig:是在一个servlet实例化,对任何客户端任何时间都有效,但是只对本servlet有效。
ServletContext:对任何客户端任何时间任何sevlet有效,是真正的全局变量。
ServletCofig和ServletContext是我们的程序更加灵活,避免了硬编码,就是配置文件
关于get请求方式和post请求方式:
get请求是浏览器请求的常见类型,用来请求web页面,用户在地址栏中输入URL,点击web页面的时候,或者提交有指定method为get方式的表单的时候,浏览器都调用get方式,get方式传送的参数是跟在url后面的,所以其经常用与传参小于1k和与口令无关的地方;
用户自定义Servlet一般扩展的是HttpServlet,依据发送方式的不同可以选择覆盖doGet方式或者doPost方式,如果希望对这两种方式采取同样的操作,则只需要让doGet()方法调用doPost()方法即可