21. JSP

概念

jsp 全称为 java server pages。jsp 的本质是 servlet

运行原理

第一次访问 jsp 页面时,会执行以下步骤:

  1. 服务器将 jsp 翻译为 java 文件
  2. 将翻译好的 java 文件编译为 class 文件
  3. 运行

第二次运行,若 jsp 文件没有被修改则不会在进行翻译和编译了。若 jsp 被更改了则会进行翻译和编译。

基本语法

指令

<%@ %>

脚本片段

<% %>

作用是可以在里面书写 java 代码。最终会被翻译在 java 文件中的 _jspService() 方法中。

表达式

<%= %>

作用是输出数据到页面

声明

<%! %>

作用是可以在里面书写 java 代码。最终会被翻译在 java 文件中的 class 中。

注释

<!--  -->

指令

语法格式为 <%@ 指令名 属性=属性值 属性2=属性值2 %>。常用的有 page,include ,taglib 指令。

page

  1. language,表示支持的语言,默认为 java,也只支持 java

  2. contentType,与 respons.setContentType() 作用一致。

  3. pageEncoding ,jsp 页面编码

  4. import,导包

  5. errorPage,当前页面报错需要显示的错误页面。

  6. isErrorPage,设置当前页面是否为错误页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="ErrorPage.jsp"%>

include

  1. file,将目标页面包含到当前页面。特点是静态包含,即被包含的文件不会被翻译和编译。而是将内容放到当前页面中进行统一的翻译和编译。
<%@ include file="NewFile.jsp" %>

动作标签

语法格式为 <jsp: 标签名 属性=属性值></jsp:>, 常见的动作标签有转发和动态包含

转发

  1. 带参数的写法 (注意: 开始和结束标签之间不能有空格和内容)
<jsp:forward page="NewFile.jsp"></jsp:forward>
  1. 不带参数的写法
<jsp:forward page="NewFile.jsp">
    <jsp:param value="18" name="age"/>
</jsp:forward>

动态包含

特点是被包含页面会先被翻译和编译

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

JSP中九个隐含对象

隐含对象是指可以直接在 jsp 中使用的对象,不需要直接 new 实例,由服务器new,并存放在 _jspService 方法中。

application

  1. 类型:ServletContext
  2. 作用:域对象
  3. Servlet 中的获取方式:this.getServletContext()

session

  1. 类型:HttpSession
  2. 作用:域对象
  3. Servlet 中的获取方式:request.getSession()

request

  1. 类型:HttpServletRequest
  2. 作用:域对象(除此之外在 Servlet 中还可以获取初始化参数,获取虚拟路径,转发等)
  3. Servlet 中的获取方式:直接使用

pageContext

  1. 类型:PageContext
  2. 作用:域对象,可以通过 pageContext 在 jsp 中获取其他八个隐含对象
  3. Servlet 中的获取方式:无

response

  1. 类型:HttpServletResponse
  2. 作用:与 Servlet 中的 response 一致(响应文本/html,重定向)
  3. Servlet 中的获取方式:直接使用

page

  1. 类型:Object
  2. 作用:当前类的对象

out

  1. 类型:JspWriter
  2. 作用:与 Servlet 中的 PrintWriter 作用类似(都继承了 java.io.Writer)

config

  1. 类型:ServletConfig
  2. 作用:与 Servlet 中的 ServletConfig 作用类似
  3. Servlet 中的获取方式:this.getServletConfig()

exception

  1. 类型:Throwable
  2. 作用:接收处理异常信息

JSP 四个域对象

按照范围从大到小的顺序分别为:application(当前项目中有效),session(当前会话中有效),request(当前请求中有效),pageContext(当前页面)

域对象共有的方法:

  1. getAttribute()
  2. setAttribute()
  3. removeAttribute()
<body>
    当前页面设置
    <%
        application.setAttribute("name1", "san.zhang1");
        session.setAttribute("name2", "san.zhang2");
        request.setAttribute("name3", "san.zhang3");
        pageContext.setAttribute("name4", "san.zhang4");
    %>
    当前页面获取
    <%=application.getAttribute("name1")%> <!-- san.zhang1 -->
    <%=session.getAttribute("name2")%> <!-- san.zhang2 -->
    <%=request.getAttribute("name3")%> <!-- san.zhang3 -->
    <%=pageContext.getAttribute("name4")%> <!-- san.zhang4 -->
</body>

当转发到 NewFile2.jsp 时

<jsp:forward page="NewFile2.jsp"></jsp:forward>
<body>
    转发页面获取
    <%=application.getAttribute("name1")%> <!-- san.zhang1 -->
    <%=session.getAttribute("name2")%> <!-- san.zhang2 -->
    <%=request.getAttribute("name3")%> <!-- san.zhang3 -->
    <%=pageContext.getAttribute("name4")%> <!-- null -->
</body>

当使用超链接跳转到新的地址时

<a href="NewFile3.jsp">NewFile3.jsp</a>
<body>
    跳转页面获取
    <%=application.getAttribute("name1")%> <!-- san.zhang1 -->
    <%=session.getAttribute("name2")%> <!-- san.zhang2 -->
    <%=request.getAttribute("name3")%> <!-- null -->
    <%=pageContext.getAttribute("name4")%> <!-- null -->
</body>

 上一篇
22. EL 22. EL
EL简介Expression Language,即表达式语言。el 是 jsp 内置的表达式语言。用以访问页面的上下文(ServletContext)以及不同作用域中的对象。可以取得对象的属性,或执行简单的运算或者判断操作。 el 在得到某
2019-12-29
下一篇 
20. Servlet 2 20. Servlet 2
请求与相应请求定义客户端向服务器发送请求报文。 类型HttpServletRequest(这里以最终创建 Servlet 的方式讲解) 作用 获取请求参数。使用 getParamter(name),通过 name 获取请求参数。通过 get
2019-12-29
  目录