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:异常对象。
