0.JSP内置对象
在jsp页面中可以不加声明和创建就可以在脚本中使用。
JSP脚本中包含9个内置对象:
1.out向客户端输出;
2.request 封装用户请求;
3.response 向用户做出响应 在servlet中使用;
4.session 客户和服务器间的会话;
5.application 于服务器启动时开始运行,用来存放全局变量,在用户间共享;
6.pageContext 用于访问page的各种对象;
7.exception 异常;
8.config 初始化要用的参数;
9.page JSP页面本身。
1.内置对象——out
1.out对象是javax.servlet.jsp.JspWrite的实例;
2.out = pageCintext.getOut();
3.该实例代表JSP页面的输出流,用于向客户端输出数据;
eg:<%out.print("< p>helloOut< /p>";%>
<%String str = “helloOut”;%>
<%out.print("< p>"+str+"< /p>";%>
注意:需要在WEB-INF下的lid包中导入jsp-api.jar包
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
jsp内置对象(属于java对象)
就是在jsp中,预先已经内置好的9个对象,我们可以直接使用。
1.javax.servlet.jsp.JspWrite out = null
out=pageContext.getOut()
作用:在服务器端向客户端输出数据
--%>
<%
out.write("out对象,是从服务器端向客户端响应内容");
%>
${"aa"}
</body>
</html>
2.JSP内置对象——request/response
1.request是javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。
2.response是HttpServletResponse类的实例,response对象包含了响应客户端请求的有关信息。
3.request实现请求转发:
- 请求转发是指将请求再转发到另一资源。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变;
- 请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另一个资源,并让该资源对浏览器的请求进行响应。
if(account.equals("admin") && password.equals("111")){
//request对象中可以用来存储数据
req.setAttribute("acc",account);//键值对的形式存储一组数据,键是String类型,值是Object类型
RequestDispatcher requestDispatcher = req.getRequestDispatcher("success.jsp");//获得请求转发对象
requestDispatcher.forward(req,resp);//执行转发动作
}else {
req.setAttribute("msg","账号密码错误!");
req.getRequestDispatcher("login.jsp").forward(req,resp);
}
4.request请求传递对象:
request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其他web资源处理:
- setAttribute(“name”,value)
- getAttribute(“name”)
- removeAttribute(“name”)
5.response实现请求重定向
- 重定向是指页面重新定位到某个新地址,之前的请求失败,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址。
- 重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求。
resp.sendRedirect("login.jsp");
3.内置对象——session
1.session对象是javax.servlet.http.HttpSession的实例,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
2.servlet API中,定义了HttpSession接口,用来封装会话对象。
3.HttpSession是接口,会话对象时Web容器创建的在servlet中使用,HttpServletRequest中的方法获得会话对象。
- public HttpSession getSession();获得跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回。
4.JSP文件中使用会话对象的方法: - JSP文件中有内置对象session,可以直接调用HttpSession接口中任意方法。
5.使用session实现会话机制的过程: - 当容器创建一个新的HttpSession对象后,即生成一个随机数,称为会话ID,并将ID值封装成一个名字为JSESSIONID的session,返回给客户端。
- 调用request.getSession方法获得会话对象时,容器先从request中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,返回使用。
- 如果没有获取到JSESSIONID值,认为当前的请求没有相关联的会话对象,重复第一个步骤。
6.HttpSession接口中定义了一系列的方法: - void setAttribute(String key,Object value):以key/value的形式保存对象值;
- Object getAttribute(String key):通过key获取对象值;
- void removeAttribute(String key):通过key删除属性;
- int getMaxInactiveInterval():获取session的有效非活动时间,以秒为单位;
- void setMaxInactiveInterval(int interval):设置session的最大非活动时间,以秒为单位,超时将被销毁;
- Stirng getId():获取session对象的编号;
- void invalidate():设置session对象失效;
- boolean isNew():判断一个session对象是不是一个新创建的会话对象。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/26
Time: 14:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
request对象的生命周期:开始于一次请求的发起,结束于一次请求的响应
session(会话)
session对象是用来管理会话的,(在会话的过程中回产生一些数据,使用session对象进行管理)
会话:就是客户端与服务器端的一次交互过程,开始于浏览器打开链接上服务器 到浏览器关闭
HttpSession session
session对象在会话中具体的作用:
1.客户端与服务器端的会话识别
2.在同一个会话中可以存储共享数据
session对象的生命周期:
创建:打开浏览器 第一次连接到服务器,在服务器端创建session对象
销毁:1.长期不使用的session对象,服务器将其自动销毁(默认是30分钟)
2.强制销毁session对象 invalidate() 安全退出
3.服务器关闭 需要注意(有的服务器会缓存,当服务器关闭时,服务器会将session对象序列化到文件中,服务器启动时再反序列化)。
浏览器关闭,session对象销毁。是错误的
浏览器关闭后,服务器端知道吗?不知道
服务器端的session对象并没有及时销毁,仍然存在与服务器端
--%>
<%
out.print(session.getId()+"<br/>");
out.print(session.isNew()+"<br/>");
//session.setMaxInactiveInterval(10);
//1800 服务器最长销毁时间
out.print(session.getMaxInactiveInterval());
session.setAttribute("name","admin");
request.setAttribute("age",22);
out.print(session.getAttribute("name"));
out.print(request.getAttribute("age"));
%>
</body>
</html>
7.会话对象生命周期:
会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。除了根据有效时间使会话对象失效外,还可以调用HttpSession中的invalidate方法,使会话失效,立即销毁会话对象。
创建:打开浏览器 第一次连接到服务器,在服务器端创建session对象
销毁:1.长期不使用的session对象,服务器将其自动销毁(默认是30分钟)
2.强制销毁session对象 invalidate() 安全退出
3.服务器关闭 需要注意(有的服务器会缓存,当服务器关闭时,服务器会将session对象序列化到文件中,服务器启动时再反序列化)。
8.设置会话时间:
- 可以在web.xml中进行配置,修改默认时间,例如,修改为50分钟销毁:
<session-config>
<session-timeout>50</session-timeout>
</session-config>
- 可以使用HttpSession接口中的setMaxIntervalTime设置,以秒为单位,如果参数是负数,表示永远不失效。例如:将会话的有效时间设置为两小时:session.setMaxInactiveInterval(26060)。
4.内置对象——exception
1.是java.lang.Throwable的实例:
该实例代表其他页面中的异常和错误。只有当页面是错误实例页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。
2.常用的方法有:
- exception.getMessage();返回异常信息字符串;
- exception.toString();异常信息简单描述。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/2/26
Time: 16:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
阿偶 程序走神了!
<%--开发期间需要显示异常信息--%>
<%
exception.printStackTrace();
out.print(exception.getMessage());
out.print(exception.toString());
%>
</body>
</html>
5.内置对象——page
page是java.lang.Object类的对象。