JSP全称Java Server Pages,是一种动态网页开发技术,本质就是一个Servlet。它会在客户端首次访问时解析出Java代码(翻译),并进行编译,通过IO流将动态内容传递到客户端浏览器。因为其实就是一个Servlet,所以具有Servlet的一切特征,如生命周期、内置对象等,并由服务器生成对象并启动。
JSP产生的Java类,其类名为org.apache.jsp.Name_jap,其中Name为.jsp文件的文件名;它继承了HttpJspBase,而HttpJspBase又继承了HttpServlet;它也具有初始化、执行和销毁时调用的方法,包括_jspInit、_jspService(request, response)和_jspDestroy,这些方法都间接调用了Servlet中的方法。JSP页面中的HTTP部分由IO流对象out直接写出,其余部分进行编译后再写出。
元素
JSP能够执行Java代码的部分包括指令元素(directive element)、动作元素(action element)和脚本元素(script element)。
指令元素能够指导JSP页面的相关信息和设置相关属性,如网页的编译语言、编码、是否采用Session、异常处理、导包、引入标签库等。
<%@page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page errorPage="./error.jsp" isErrorPage="false" %>
<%@page import="java.util.List" session="true" %>
<%@page import="java.util.UUID" %>
<%@include file="./ErrorPage.jsp" %> <%-- 静态导入(直接把其他JSP页面复制一份到当前页面中) --%>
动作元素能够指导客户端请求JSP页面时调用相应的组件,如服务器跳转、动态包含、对象包装等。
页面跳转:
<jsp:forward page="target.jsp"></jsp:forward>
跳转的同时还可以传参数:
<jsp:forward page="target.jsp?name=tom">
</jsp:forward>
或者专门用来传参数:
<jsp:forward page="target.jsp">
<jsp:param value="tom" name="name"/>
</jsp:forward>
动态包含:
<jsp:include page="foot.jsp">
<jsp:param value="lisi" name="name"/>
</jsp:include>
脚本元素能够将代码翻译为类中不同地方的Java代码进行执行。有三种脚本元素:
- 脚本
<% %>
:解释为_jspService方法中的代码。可以在此进行流程处理。 - 表达式
<%= %>
:解释为类中的代码。可以在此打印HTTP语句。以上两种需要注意顺序。 - 声明
<%! %>
:解释为_jspService方法中的out.print()中的参数,不受顺序影响。可以在此定义方法和全局变量。 ```java <%! private String name; public String go(){ System.out.println(“hello world “+name); return “this is go()”; } %>
- 脚本
<%
Student s = new Student();
String name = “tom”;
String username = s.getName();
List
<%= “hello” %> <%= student.getName() %> 代码会被解释成: out.print(“hello”); out.write(“\r\n”); out.write(“\r\n”); out.print(student.getName()); ```
JSP除了可以在HTML部分使用HTML注释和在脚本中使用Java注释以外,也具有特有的注释:
<%-- --%>
。内置对象
可以在JSP的脚本元素中使用内置对象,这些内置对象有一些是JSP特有的,有一些是Servlet中也有的。这些内置对象包括(左边是对象类型,右边是对象名,带*能够传递数据):
HttpServletRequest request*:请求对象。
- HttpServletResponse response:响应对象。
- HttpSession session*:Session对象。
- ServletContext application*:Application对象。
- PageContext pageContext*:上下文对象,作用范围为整个页面。
- ServletConfig config:Servlet配置对象。
- JspWriter out:IO流对象。
- Object page:页面对象,表示当前的JSP类的对象本身(即this)。
- Throwable exception:异常对象。