基本结构
两个包:javax.servlet.* 和 javax.servlet.http.*
Servlet的顶层接口:javax.servlet.Servlet接口
在这个接口中有5个方法。其中最核心的是服务方法service()方法。
用户每次发送的请求其实都是调用一次service方法。
实现开发时:一般的Servlet继承HttpServlet类
在HttpServlet中service方法已经给出了实现,变成根据请求方式调用doGet和doPost方法。
所以我们要开发一个Servlet时,要继承HttpServlet类重写doGet和doPost方法。
在javax.servlet包中大多数的接口在javax.servlet.http包中有都是子接口
请求:request javax.servlet.ServetlRequest 和 javax.servlet.http.HttpServletRequest
响应:response javax.servlet.ServletResponse 和 javax.servlet.http.HttpServletResponse
get和post方法的区别
不同点一:
通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;
而post方式没有数据大小的限制,理论上传送多少数据都可以。
不同点二:
通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;
而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。
不同点三:
通过Get方式提交的数据安全性不高,而Post方式的更加安全。
get请求的东西(你页面输入的信息)会在地址栏显示所以不安全,post不显示,会好一点。
生命周期
Servlet中的使用的方法都是实例方法,没有static修饰符的方法,所以这些实例方法的调用必须先有实例。
实例必须通过new关键字进行实例化过程。
Servlet对象的生命周期都是在服务器端完成的
- 实例化 new Servlet是由服务器端实例化的
- 初始化 init() 初始化方法,只调用一次
- 服务阶段 service() 这是一个长期的方法,每接收一次用户的请求就调用一次服务方法
- 销毁 destroy() 当结束服务器时
作用域对象
放东西进去:void setAttribute("key",value);
取东西出来:value getAttribute("key");
页面级作用域对象:pageContext
这个容器只能一个页面中使用。
pageContext.setAttribute(name, value, scope); //第三个填写作用域常量
请求级作用域对象:request
HttpServletRequet类型,只能在一次请求中使用,所有客户端重定向会影响request对象中保存的数据。数据会消失。
两个接口,HttpServletRequest继承ServletRequest
String getParameter(String name); //获得请求参数,例如<input>标签
RequestDispatcher getRequestDispatcher(String url); //获得一个请求分发器对象
forward(request,response); //转发
include(request,response); //包含
HttpSession getSession(); //获得会话对象
void setCharacteEncoding("utf-8"); //设置请求的中文编码
void setAttribute(String key,Object obj); //将数据以k-v的方式保存到请求对象中
Object getAttribute(String key); //从请求对象中以k取v
会话级作用域对象:session
HttpSession类型,会话是一直保存在服务器端的容器对象,从第一次发送请求开始到退出整个web应用为止。
会话对象是每个用户都有一个自己的对象。
String name = request.getParameter("uname");
HttpSession s = request.getSession(); //在Servlet中获取session对象
s.removeAttribute("name"); //移除session中保存的对象
s.invalidate(); //移除session对象
在request对象中保存针对这次请求的临时性的数据。比如一次请求的错误信息。
在session对象中保存需要长期存储的用户个人信息。比如,登录成功时保存用户对象。
应用程序级作用域对象:application
ServletContext类型,应用程序级作用域对象,全网用户共用一个。
在整个应用程序中都能使用,从启动WEB应用开始到关闭WEB应用为止。
ServletContext c = getServletContext();
c.setAttribute(name, object);
c.getAttribute(name);