概念
jsp 全称为 java server pages。jsp 的本质是 servlet
运行原理
第一次访问 jsp 页面时,会执行以下步骤:
- 服务器将 jsp 翻译为 java 文件
- 将翻译好的 java 文件编译为 class 文件
- 运行
第二次运行,若 jsp 文件没有被修改则不会在进行翻译和编译了。若 jsp 被更改了则会进行翻译和编译。
基本语法
指令
1 | <%@ %> |
脚本片段
1 | <% %> |
作用是可以在里面书写 java 代码。最终会被翻译在 java 文件中的 _jspService()
方法中。
表达式
1 | <%= %> |
作用是输出数据到页面
声明
1 | <%! %> |
作用是可以在里面书写 java 代码。最终会被翻译在 java 文件中的 class 中。
注释
1 | <!-- --> |
指令
语法格式为 <%@ 指令名 属性=属性值 属性2=属性值2 %>
。常用的有 page,include ,taglib 指令。
page
language,表示支持的语言,默认为 java,也只支持 java
contentType,与 respons.setContentType() 作用一致。
pageEncoding ,jsp 页面编码
import,导包
errorPage,当前页面报错需要显示的错误页面。
isErrorPage,设置当前页面是否为错误页面。
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
include
- file,将目标页面包含到当前页面。特点是静态包含,即被包含的文件不会被翻译和编译。而是将内容放到当前页面中进行统一的翻译和编译。
1 | <%@ include file="NewFile.jsp" %> |
动作标签
语法格式为 <jsp: 标签名 属性=属性值></jsp:>
, 常见的动作标签有转发和动态包含
转发
- 带参数的写法 (注意: 开始和结束标签之间不能有空格和内容)
1 | <jsp:forward page="NewFile.jsp"></jsp:forward> |
- 不带参数的写法
1 | <jsp:forward page="NewFile.jsp"> |
动态包含
特点是被包含页面会先被翻译和编译
1 | <jsp:include page="NewFile.jsp"></jsp:include> |
JSP中九个隐含对象
隐含对象是指可以直接在 jsp 中使用的对象,不需要直接 new 实例,由服务器new,并存放在 _jspService 方法中。
application
- 类型:ServletContext
- 作用:域对象
- Servlet 中的获取方式:this.getServletContext()
session
- 类型:HttpSession
- 作用:域对象
- Servlet 中的获取方式:request.getSession()
request
- 类型:HttpServletRequest
- 作用:域对象(除此之外在 Servlet 中还可以获取初始化参数,获取虚拟路径,转发等)
- Servlet 中的获取方式:直接使用
pageContext
- 类型:PageContext
- 作用:域对象,可以通过 pageContext 在 jsp 中获取其他八个隐含对象
- Servlet 中的获取方式:无
response
- 类型:HttpServletResponse
- 作用:与 Servlet 中的 response 一致(响应文本/html,重定向)
- Servlet 中的获取方式:直接使用
page
- 类型:Object
- 作用:当前类的对象
out
- 类型:JspWriter
- 作用:与 Servlet 中的 PrintWriter 作用类似(都继承了 java.io.Writer)
config
- 类型:ServletConfig
- 作用:与 Servlet 中的 ServletConfig 作用类似
- Servlet 中的获取方式:this.getServletConfig()
exception
- 类型:Throwable
- 作用:接收处理异常信息
JSP 四个域对象
按照范围从大到小的顺序分别为:application(当前项目中有效),session(当前会话中有效),request(当前请求中有效),pageContext(当前页面)
域对象共有的方法:
- getAttribute()
- setAttribute()
- removeAttribute()
1 | <body> |
当转发到 NewFile2.jsp 时
1 | <jsp:forward page="NewFile2.jsp"></jsp:forward> |
1 | <body> |
当使用超链接跳转到新的地址时
1 | <a href="NewFile3.jsp">NewFile3.jsp</a> |
1 | <body> |