JSP本身就是一个servlet,所谓九大内置对象,是jsp已经提前定义好的对象,可以在jsp页面中直接拿出来使用。
-------------------------------------------------------分割线-----------------------------------------------------------------
一、九大内置对象详解
1.Request请求对象(最常用)
Requset表示一次请求,可以在jsp中直接使用request.XXXX直接进行操作。例如,我们获取请求的参数,那么我们可以直接在jsp页面中使用request.getParamter("name");

request常用方法:
request.getParamter(String key); 获取客户端传过来的参数。
request.setAttribute(String key,Object value); 通过键值对的方式存储数据。
Object request.getAttribute(String key); 通过key获取对应的数据,通常与setAttribute()一块儿使用。
举例:页面转发时携带参数跳转到新页面。
后端代码:


通过浏览器访问test1.jsp,页面将输出88.
知识点:通过request进行页面跳转,服务器地址栏信息不变,程序内部进行跳转,该场景是用在登录页面时,用户输入密码错误,跳转到当前页。
2.Response响应对象
核心功能:给浏览器返回数据、跳转、cookie、编码设置。
Response常用方法:
1.重定向(登录成功后跳转页面)
response.sendRedirect(request.getContextPath+"/xxx.html");
2.设置cookie
Cookie cookie = new Cookie("user","admin");
cookie.setMaxAge(60*60);
response.addCookie(cookie);
3.设置编码格式
response.setContentType("text/html;charset=utf-8");
4.输出js弹窗跳转
reponse.getWriter.print("<script>alert("成功");location.href(index.html)</script>");
5.使用场景
登录成功后重定向;(重定向浏览器地址信息会更改)
写入cookie用户信息;
文件下载,输出二进制流;
前端弹窗提示跳转;
3.pageContext页面上下文
作用域:当前页面,离开当前页面即失效;
核心:存取值,可以使用该对象获取其他八个内置对象信息;
pageContext常用方法:
1.存取值
pageContext.setAttribute("title","首页");
String title = (String)pageContext.getAttribute("title");
2.获取其他内置对象
pageContext.getRequets();
pageContext.getResponse();
pageContext.getSession();
pageContext.getApplication();
pageContext.getOut();
pageContext.getPage();
pageContext.getConfig();
pageContext.getException();
3.一键转发/包含页面
pageContext.forward("/index.html");
pageContext.include("/head.html");
4.使用场景
页面内临时变量(仅当前页面使用)。
封装工具类,获取其他内置对象。
el表达式底层取值逻辑。
4.session会话对象
作用域:同一浏览器请求会话共享,关闭浏览器会话结束。
常用方法:
1.保存登录用户信息
session.setAttribute("user","xiaoniuwang");
String user = (String)session.getAttribute("user");
2.销毁登录用户信息
session.invalidate();
3.设置session超时时间
session.setMaxInactiveInterval(30*60);--30分钟超时时间
4.使用场景
登录成功后保存用户信息;
校验当前请求是否登录;
退出时销毁登陆信息;
5.application全局对象
作用域:整个项目运行期间,所有用户共享,直到服务注销;
使用示例:
--统计登录次数
int count = application.getAttribute("visitCount");
if(num == null){
count = 0
}
count ++;
application.setAttribute("visitCount",count);
out.print("当前登录次数:"+count);
使用场景:
网站全局统计(访问量,在线人数);
全局参数设置(常量);
读取项目资源文件路径;
6.out页面输出流
作用:向页面输出文本、html,等价于<%=%>
使用示例:
<%
out.print("hello jsp</br>");
out.println("换行文本");
out.flush();刷新缓存区
out.clear();清空缓存区
%>
使用场景:
日常html内输出文本;
循环输出表格、列表数据;
日常很少使用,优先使用el表达式${变量}
7.page当前页面对象
当前页面对象,将页面转为servlet实例。日常开发很少使用;
<%
Object page = this;
%>
8.config servlet配置对象
读取web.xml中的配置信息.
使用示例:
<servlet>
<servlet-name> login </servlet-name>
<jsp-file>/login.jsp</jsp-file>
<init-param>
<param-name>pageDesc</param-name>
<param-value>登录页面</param-value>
</init-param>
</servlet>
config.getInitparam("pageDesc");
使用场景:
读取配置参数。
9.exception异常对象(特殊:仅erroPage使用)
1.普通页面抛出异常页面
<%@ page errorPage=("/error.jsp")%>
2.错误页面开通接收异常
<%@ page isErrorPage = "true"%>
使用示例:
<%@ page isErrorPage="true"%>
<%
out.print("错误信息:"+exception.getMessage());
exception.printStackTrace();//打印栈堆
%>
使用场景:
统一页面捕获系统异常。
二.四大作用域对象对比
| 对象 | 作用域 | 生命周期 | 适用场景 |
| pageContext | 当前页面 | 当前页面渲染完毕销毁 | 存储当前页面临时变量 |
| request | 一次请求 | 请求结束销毁 | 请求传参、转发传值 |
| session | 单个浏览器会话 | 浏览器关闭/超时销毁 | 用户登录、校验 |
| application | 所有用户,整个项目 | 服务器启停 | 网站统计、全局配置 |
三、总结
- 开发最常用 4 个:
request、response、session、pageContext; application做全局统计,exception统一错误页;out/page/config日常业务极少使用;- 数据传递优先按作用域从小到大使用:page < request < session < application,避免全局存临时数据。
四、最后
该篇文章是jsp最后一篇文章,下篇我将记录使用servlet+html+js搭建一个简单的用户管理系统,从servlet到springboot逐步迭代,一步步搞定web开发中的关键技术节点,前端我计划从简单的html+js逐步迭代到vue3 + element plus,中间逐渐加入redis、nginx、mq等相关中间件。
路虽远,行则将至。让我们一起加油。
1697



被折叠的 条评论
为什么被折叠?



