一、Servlet中的九大对象
1、out 对象:向客户端发送数据的对象,与”response”对象不同,通过out对象发送的内容是浏览器需要显示的内容,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件
作用域:page页面
创建out对象
PrintWriter out = response.getWriter();
out.print();
2、request对象:接收客户端发来的请求
常用方法:
request.setCharacterEncoding("utf-8");//设置请求的编码集,只针对post请求
String [] vlaues = request.getParameterValues("key");//获取请求参数为key的值集合,值类型为String数组
Map<String,String[]> map = request.getParameterMap();//获取所有请求参数的对象,返回一个map集合*/
String value1 = request.getParameter("name");//获取参数为name的值
String [] value4 = request.getParameterValues("love");//获取参数为love的值
//利用集合获取表单中所有的值
Map<String,String[]> map = request.getParameterMap();
Set<String> keys = map.keySet();
System.out.println(keys);
Collection<String[]> val = map.values();
for(String[] s:val){
System.out.println(Arrays.toString(s));
}
//向request集合中存放内容,第一个参数是String类型,第二个参数是Object类型的值
request.setAttribute("A","郑爽");
request.setAttribute("B",31415926);
//从容器中获取内容,参数为key,返回类型为key对应的值,是Object类型
Object obj1 = request.getAttribute("A");
Object obj2 = request.getAttribute("B");
System.out.println(obj1);
System.out.println(obj2);
//删除容器中指定的key内容
request.removeAttribute("A");
System.out.println(request.getAttribute("A"));//A的值被删除,这里输出null
request.setAttribute("C","1");
request.setAttribute("C",2);
request.setAttribute("C","3");
Object objects1 = request.getAttribute("C");
System.out.println(objects1);//重复键的值被最后一个值覆盖,这里输出3
//remote都是客户端的东西,Servlet都是服务短的东西
String user = request.getRemoteUser();//获取用户名
String reqUrl = request.getRequestURI();//获取请求的域名
String remoteAddr = request.getRemoteAddr();//获取客户端地址
String remotehost = request.getRemoteHost();//获取客户主机号
int remotePort = request.getRemotePort();//获取用户端口号
String scheme = request.getScheme();//获取使用的协议
String serNAme = request.getServerName();//获取服务器名称
String serPsth = request.getServletPath();//获取服务器地址
String methdName = request.getMethod();//获取使用的方法
//跳转到1.html页面
request.getRequestDispatcher("1.html").forward(request,response);//跳转到a.html页面(转发)
request的生命周期:
从服务端接收浏览器时请求开始,服务端对浏览器做出响应时请求结束
3、response对象:响应客户端的请求
常用方法
//设置响应的编码集,注意针对于out对象的输出
response.setCharacterEncoding("utf-8");
//获取到out对象的方法
PrintWriter out = response.getWriter();
//页面跳转到1.html
response.sendRedirect("1.html");
4、session对象:会话对象,HttpSession当前浏览器和服务器之间的一次通话(关闭浏览器后重新打开一次浏览器又是另外一次会话,每一次的sessionId是不同的)
常用方法:
//获取到session 对象
HttpSession session = request.getSession();
//获取session的编号
String seesionId = session.getId();
//获取当前session创建的时间(和1970年1月1日的时间差)
long creationTime = session.getCreationTime();
//获取session最后一次请求的时间(和997年1月1日的时间差)
long lastAccessedTime = session.getLastAccessedTime();
//获取到session的最大存活时间(默认30min)
long maxInactiveInterval = session.getMaxInactiveInterval();
//设置session的最大存活时间(设置-1代表永久)
session.setMaxInactiveInterval(3000);
//判断会话是否是新会话
boolean isNew = session.isNew();
//销毁当前session
session.invalidate();
//向session容器中存放内容
/*
第一个参数是:String类型,代表Key
第二个参数:Object类型,代表value
*/
session.setAttribute("A","张三");
session.setAttribute("B","李四");
session.setAttribute("B",99);
Object value1 = session.getAttribute("A");
Object value2 = session.getAttribute("B");
session.removeAttribute("A");
System.out.println(value1);//null
System.out.println(value2);//99
session生命周期:
开始:第一次请求时开始
结束:①服务器关闭
②浏览器关闭
③调用invalidate()方法销毁会话
④超时,超出了session最大存活时间(时间是和最后一次请求时间比较)
5、application对象:全局对象,ServletContext的实例
常用方法:
//获取application对象
ServletContext applicantion = request.getSession().getServletContext();
applicantion.setAttribute("A","张三");
Object value = applicantion.getAttribute("A");
System.out.println(value);//张三
生命周期:
服务器启动时开始
服务器关闭时结束
6、config对象:配置对象,ServletConfig的对象,进行Servlet的配置
//获取config对象
ServletConfig config = new ServletConfig();
7、exception对象:异常对象,等同与Java异常处理的对象,是Throwable的子类,exception只能在isErrorPage="true"页面中出现
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
出错原因是:
<%
out.print(exception.getMessage());
%>
</body>
</html>
8、page对象:当前对象,等同于this,是Object的一个类型
<%@ page import="java.text.SimpleDateFormat" %>
<%@page language="java" pageEncoding="UTF-8" errorPage="error.jsp" %>
<%--
page中包含的import指令:可以出现多次的指令,引入需要的包
page中包含的pageEncoding指令,设置当前页面的编码集
--%>
page生命周期:当前页面
9、pageContext对象:上下文对象,相当于管理层。PageContext的实例,获取其他对象,操作控制其他对象
二、request、response、session三大容器
(1)生命周期不同
a) request(HttpServletRequest):服务端接受请求时开始,服务端做出响应时结束
b) session(HttpSession):
开始:第一次请求时开始
结束: 服务器关闭(如果浏览器未关闭,重启服务器后有 些浏览器记录上次会话)
浏览器关闭(用户点击关闭时,服务器并不能实时获取)
调用invalidate()方法
超时,超出了session最大存活时间(和最后一次请求时间做比较)
c) application(HttpContext):服务器启动时开始,服务器关闭时结束
(2)数据有效范围
request:数据在本次请求时有效
session:会话结束,数据失效
application:会话结束,数据有效
(3)作用范围(由大到小)
application > session > request
(4)适用场景
session:保存当前用户信息,购物车
application:统计当前在线人数
request:接收客户端发来的请求