JSP(2) JSP的内置对象&JSP常用标签

1 JSP的内置对象

1.1 JSP中的9个内置对象

JSP中的内置对象,指的是Tomcat在翻译JSP页面成为Servlet程序后,内部可供使用的9个对象,称为内置对象

回看一个JSP页面被翻译成Servelt程序的核心方法_jspService代码:

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

    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
        return;
      }
    }

    final javax.servlet.jsp.PageContext pageContext;
    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;

JSP的内置对象包含:

    request         请求对象

    response        响应对象

    pageContext     jsp的上下文对象

    session         会话对象

    application     ServletContext对象

    config          ServletConfig对象

    out             jsp输出流对象

    page            指向当前jsp的对象

    exception       异常对象(需要在页面的page指令中开启 isError="true" 才能使用该对象)

在JSP页面中的表达式脚本和代码脚本都可以直接使用上述的对象

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>About_JSP</title>
</head>
<body>

    <%=
        request.getParameter("")
    %>
    <%=
        out.print("xxx")
    %>

    <%
        for(int index = 0; index < 10; index++) {
            out.print(request.getParameter(""));
        }
    %>

</body>
</html>

1.2 JSP的4个域对象及其存取范围

域对象就是可以像Map一样存取数据,如ServletContext对象和request对象一样,JSP的9个内置对象中有4个具有域对象的功能,它们都可以用来存取数据,但是它们对数据的存取范围却不同

	pageContext(PageContextImpl类)
        其存取范围 当前jsp页面范围内有效

    request(HttpServletRequest类) 
        其存取范围 一次请求有效

    session(HttpSession类) 
        其存取范围 一个会话范围内有效(打开浏览器访问服务器 直到关闭浏览器)

    application(ServletContext类)
        其存取范围 整个web工程范围内都有效(只要web工程不停止 数据都在)

虽然4个域对象都可以存取数据,但是使用上却有优先顺序,在使用时优先级的选择从小到大

pageContext -> request -> session -> application

1.3 JSP中的out和response输出的区别

使用关于JSP的API,需要导入相关的依赖

		<dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>

JSP页面通常通过out对象和response对象来向客户端返回内容

out对象
	直接给用户的页面输出内容

response对象
	设置返回给客户端的内容

使用out和response向页面中写数据:
在这里插入图片描述
上述JSP页面中先进行out.write(),再进行response.getWriter.write(),但是结果却是response.getWriter.write()的内容先出现,这是因为

out和response对象都具有自己的缓冲区,会先将数据存储到各自的缓冲区内,当JSP页面中所有代码执行完毕后,会

1,执行out.flush()操作,将out缓冲区中的数据写入到response缓冲区末尾

2,将response缓冲区内的数据全部写入到页面中

在JSP页面中,使用out.print()向页面输出数据最合适

2 JSP常用标签

2.1 包含

考虑如下的应用场景,一个网站由许多网页组成,每个网页的底部都有页脚的部分,用来显示版权,联系方式,友情链接等内容,如果现在需要增加一个友情链接,那么该网站中的所有组成网页中的页脚内容都需要修改

这样重复的修改是繁杂且无意义的,可以将页脚的内容抽出来,单独做成一个网页,让其余的网页引用这个页脚网页即可,这样只用修改页脚页面,就可以完成对所有网页页脚内容的维护,JSP可以通过静态包含/动态包含来完成

在这里插入图片描述

2.1.1 静态包含

<%@include file="xxx.jsp"%>
(如果出现响应码为500的情况,将包含页面和被包含页面的page指令统一即可)

静态包含的特点:

1,静态包含不会将被包含的页面翻译为Servlet程序

2,静态包含的本质是把被包含页面中的代码拷贝到
	被包含页面中的预定位置直接输出

2.1.2 动态包含

<jsp:include page="xxx.jsp"></jsp:include>

动态包含和静态包含的效果相同,但实现原理不同

动态包含的特点:

1,动态包含会将被包含的页面翻译为Servlet程序

2,动态包含底层代码通过
	JspRuntimeLibrary.include(request, response, "/include/xxx.jsp", out, false);实现
	本质是包含页面将自己的9个内置对象传递到被包含页面中
	被包含页面使用包含页面中的内置对象完成输出

3,动态包含还可以传递参数
	<jsp:include page="/pageUp.jsp">
    	<jsp:param name="userName" value="coisini"/>
   	</jsp:include>
   	
    <%=request.getParameter("userName")%>

2.2 请求转发

<jsp:forward page="xxx.jsp"></jsp:forward>

其功能与request.getRequestDispatcher(“xxx”).forward(request, response); 相同

JSP中请求转发的使用:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值