什么是jsp?jsp的内置对象有哪些?

什么是jsp?jsp的内置对象有哪些?
这里是修真院前端小课堂,每篇分享文从

本篇分享的是:【什么是jsp?jsp的内置对象有哪些?】

1、背景介绍

百度百科是这么介绍jsp的:“jsp是一种动态网页技术标准。它出现的根本原因是为了简化servlet的设计,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。”

从以上的介绍可以得出,servlet是先出的,jsp是后出的。

所以,想要了解jsp,先学习一下servlet。

在地址栏输入"test3"访问该servlet,浏览器返回结果如下。

如果你右键查看网页源代码,可以看到是非常普通的HTML代码。

也就是,在servlet中,各种拼接HTML代码,最终返回给客户端一个HTML页面。
我们想要做的动态的网站,如果所有的HTML页面都通过这样的方式来形成,那岂不太繁琐了。
于是,诞生了jsp。

那么jsp是啥样的呢?

去浏览器访问的结果:

可以看到,jsp页面中的

<% for(int i=0; i<4;i++) {
等嵌入的长得像java代码都消失了。而helloworld这句话出现了4次。于是猜测,jsp是否就是HTML页面嵌入java代码,然后通过某种机制去执行这些java代码,最终返回给我们想要生成的HTML页面?

在系统的某个路径下,你可以找到被tomcat解析成java类的jsp页面。而且一个是.class文件,另一个是java文件。
这不正是我们所熟悉的java类和它被编译成.class字节码文件吗?

打开test_jsp文件看一下,发现关键的部分:

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {

final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;

try {
response.setContentType(“text/html;charset=UTF-8”);
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write(" 测试\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write(" ");
for(int i=0; i<4;i++) {

out.write("\r\n");
out.write(" helloWorld!
\r\n");
out.write("\r\n");
out.write(" “);
}
out.write(”\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
2、知识剖析:
来看一下jsp的执行流程:

注意,只有jsp是新创建或是修改后第一次访问时,jsp parser才会将其编译成servlet程序。之后调用JSDK将对应的servlet程序编译成servlet字节码。

而且,它并非是将页面本身发送给客户端,而是把页面执行的结果发送给客户端。
客户端收到这个文件后,就可以正常显示在客户端了。

比如我要要访问test.jsp,然后利用Tomcat的解析器,他会将jsp文件转化为java文件,这个java文件就是servlet,
所以jsp本质上就是servlet。
jsp能实现的,servlet也能实现。不管你最终写的是一个多么复杂的jsp文件,它最后总能转化为一个html文件。

jsp的9个内置对象和4个作用域:

request 请求对象  类型 javax.servlet.ServletRequest 作用域 Request
response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page
pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page
page 页面对象 类型 javax.lang.Object 作用域 Page
exception 例外对象 类型 javax.lang.Throwable 作用域 page
同样 来看一个例子:
这里有两个jsp页面,page01和page02。

jsp useBean 标签表示 创建一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上。
那这里我创建了4个字符串缓冲类的实例,他们的作用域分别是page, request, session,application。

<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

<jsp:useBean id=“pageVar” scope=“page” class=“java.lang.StringBuffer”/>
<jsp:useBean id=“requestVar” scope=“request” class=“java.lang.StringBuffer”/>
<jsp:useBean id=“sessionVar” scope=“session” class=“java.lang.StringBuffer”/>
<jsp:useBean id=“applicationVar” scope=“application” class=“java.lang.StringBuffer”/>

JSP内置对象作用域

<%
pageVar.append(“page01”);
requestVar.append(“page01”);
sessionVar.append(“page01”);
applicationVar.append(“page01”);
%>
<jsp:forward page=“page02.jsp”/>

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> JSP内置对象作用域 这里是page02,是从page1转来的
name <% pageVar.append("page02"); requestVar.append("page02"); sessionVar.append("page02"); applicationVar.append("page02"); %>

page

= <%=pageVar.toString()%>

request

= <%=requestVar.toString()%>

session

= <%=sessionVar.toString()%>

application

= <%=applicationVar.toString()%>
jsp forward 标签表示 当走到这里的时候,页面会跳转到page02.jsp。 这刚好就是一个会话的场景,

现在我们刷新一下页面,可以看到,page作用域变量的输出的值为page02,原本它的page01已经不见了。

request作用域的变量只在当前请求的中有效,当前的请求就是从page01到page02的一次跳转。
所以它的值把page01和page02都显示出来了。

session作用域的变量为当前会话,也就是只要浏览器不关闭,page02能一直叠加到上去。
application 对所有应用有效,也就是只要这个应用启动着,都要叠加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  JSP共有以下9个内置的对象:   request 用户端请求,此请求会包含来自GET/POST请求的参数   response 网页传回用户端的回应   pageContext 网页的属性是在这里管理   session 与请求有关的会话期   application servlet 正在执行的内容   out 用来传送回应的输出   config servlet的构架部件   page JSP网页本身   exception 针对错误网页,未捕捉的例外      request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。    response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)    out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。    pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。    session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息    applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息    config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。    page表示从该页面产生的一个servlet实例
JSP内置对象是指在JSP页面中无需进行任何声明即可直接使用的一些特殊对象。JSP中共有9个内置对象,它们是: 1. request:封装客户端请求的所有信息,如请求头、请求参数等。 2. response:封装服务器响应给客户端的所有信息,如响应头、响应数据等。 3. pageContext:封装了访问JSP页面的所有信息,包括其他内置对象。 4. session:封装了客户端与服务器之间的会话信息,如用户登录状态、购物车等。 5. application:封装了整个Web应用的全局信息,如Web应用的初始化参数、计数器等。 6. out:表示输出流,可以向客户端输出数据。 7. config:封装了当前JSP页面的配置信息,如JSP页面的初始化参数等。 8. exception:封装了当前页面发生的异常信息。 9. page:当前JSP页面本身,相当于Java中的this关键字。 它们各自的作用如下: 1. request对象:用于获取客户端请求的信息,如请求参数、请求头等。 2. response对象:用于向客户端发送响应,如设置响应头、向客户端输出数据等。 3. pageContext对象:封装了所有JSP页面相关的信息,包括其他内置对象。 4. session对象:用于在不同请求之间保存会话信息,如用户登录状态、购物车等。 5. application对象:用于在整个Web应用中共享数据,如Web应用的初始化参数、计数器等。 6. out对象:用于向客户端输出数据。 7. config对象:用于获取JSP页面的配置信息,如JSP页面的初始化参数等。 8. exception对象:用于获取当前页面发生的异常信息。 9. page对象:表示当前JSP页面本身,相当于Java中的this关键字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值