JSP——基本知识说明
JSP页面其实是一个Servlet。
JSP页面是在JSP容器种运行的。Servlet容器一般也是JSP容器。Tomcat就是一个Servlet/JSP容器。
JSP页面是在JSP容器种运行的。Servlet容器一般也是JSP容器。Tomcat就是一个Servlet/JSP容器。
第一次请求一个JSP页面时,Servlet/JSP容器要做两件事:
1.将JSP页面转换成为一个JSP页面实现类,这是一个实现javax.servlet.jsp.JspPage接口或其子接口javax.servlet.jsp.HttpjspPage的Java类。JspPage是javax.servlet.Servlet的子接口,这样会使每个JSP页面都成为一个Servlet。
2.如果转换成功,Servlet/JSP容器将会编译Servlet类。之后,容器加载和实例化Java字节码,并执行它通常对Servlet所做的生命周期操作。
对于同一个JSP页面的后续请求,Servlet/JSP容器会查看这个JSP页面自从最后一次转换以来是否修改过,如果修改过,就要重新转换编译并执行,如果没有,则执行内存中已存在的JSP Servlet。
在Tomcat中第一次调用完JSP页面后,就被转换为一个JSP Servlet。可以在Tomcat的work目录的子目录下查看所生成的Servlet文件。这个Servlet继承了org.apache.jasper.runtime.HttpJspBase,这是一个继承javax.servlet.http.HttpServlet并实现javax.servlet.jsp.HttpJspPage的抽象类。在转换成类名XXX_jsp的Servlet类中,JSP页面的主体被转换成为一个_jspService方法。这个方法在HttpJspPage中定义,并通过HttpJspBase中的service方法实现调用。
1.将JSP页面转换成为一个JSP页面实现类,这是一个实现javax.servlet.jsp.JspPage接口或其子接口javax.servlet.jsp.HttpjspPage的Java类。JspPage是javax.servlet.Servlet的子接口,这样会使每个JSP页面都成为一个Servlet。
2.如果转换成功,Servlet/JSP容器将会编译Servlet类。之后,容器加载和实例化Java字节码,并执行它通常对Servlet所做的生命周期操作。
对于同一个JSP页面的后续请求,Servlet/JSP容器会查看这个JSP页面自从最后一次转换以来是否修改过,如果修改过,就要重新转换编译并执行,如果没有,则执行内存中已存在的JSP Servlet。
在Tomcat中第一次调用完JSP页面后,就被转换为一个JSP Servlet。可以在Tomcat的work目录的子目录下查看所生成的Servlet文件。这个Servlet继承了org.apache.jasper.runtime.HttpJspBase,这是一个继承javax.servlet.http.HttpServlet并实现javax.servlet.jsp.HttpJspPage的抽象类。在转换成类名XXX_jsp的Servlet类中,JSP页面的主体被转换成为一个_jspService方法。这个方法在HttpJspPage中定义,并通过HttpJspBase中的service方法实现调用。
隐式对象
Servlet容器将几个对象传给它所运行的Servlet。例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig。此外,还可以通过在HttpServletRequest对象中调用getSession获得HttpSession。
在JSP中,可以通过使用隐式对象来获取哪些对象。例如,隐式对象request表示由Servlet/JSP容器传给Servlet的service方法的HttpServletRequest。可以像使用HttpServletRequest的变量一样使用request。
pageContext是指为页面创建的javax.servlet.jsp.PageContext。它提供了有用的context信息,并通过一些名如其义的方法来访问与Servlet有关的各种对象,例如:getRequest、getResponse、getServletContext、getServletConfig和getSession。但他们所返回的对象可以通过隐式对象request、response、session及application直接访问。
JSP隐式对象: request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
out javax.servlet.jsp.JspWriter
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
config javax.servlet.ServletConfig
pageContext javax.servlet.jsp.PageContext
page javax.servlet.jsp.HttpJspPage
exception javax.lang.Throwable
PageContext中getAttribute和setAttribute方法进行存取属性。属性可以保存在以下4种范围种:page、request、session和application。
指令
指令是第一种JSP句法元素,其指示JSP转换器应该如何将某个JSP页面转换成Servlet的命令。
指令:page、include、taglib、tag、attribute和variable。
page指令可以出现在页面的任何位置,当它包含contentType或者pageEncoding属性时,必须放到最前边。page指令可以多次出现,除import属性效果可以累积外,其它属性多次出现值必须唯一。
include指令可以将另一个文件的内容放到当前JSP页面中。<%@include file="url"%>当url以“/”开头则为绝对路径,不以“/”开头则是相对于当前JSP页面的路径。
脚本元素
Scriptlet是一个Java代码块,以<%开头,以%>结束。
<%
代码块,在一个Scriptlet中定义变量,在它后边的其它Scritplet中是可见的。
%>
表达式
表达式的运算结果会被填入隐式对象out的print方法中。表达式以<%开头,以%>结束。
<%=java.util.Calendar.getInstance().getTime()%>注意表达式后边不需要用分号。
声明
声明可以在JSP页面中定义变量和方法。声明要用<%!和%>包含。
可以利用声明jspInit方法和jspDestroy方法覆盖实现类中的init和destroy方法。
jspInit。该方法与javax.servlet.Servlet中的init方法类似,JSP页面被初始化时,就会调用jspInit。jspInit方法不带参数。
jspDestroy。该方法与Servlet中的destroy方法相似,当JSP页面要被销毁时,就会调用它。
关闭脚本元素
随着JSP2.0中EL的发展,建议做法是利用EL来访问服务器端的对象,而不是在JSP中编写Java代码。原本JSP2.0开启的脚本元素需要关闭。
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
动作
useBean(现在很少使用)
将创建一个与某个Java对象相关的脚本变量。它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一。
例:<body>
<jsp:useBean id="today" class="java.util.Date"/>
<%=today%>
</body>
setProperty和getProperty
setProperty:在一个Java对象中保存一个属性
getProperty:获取一个Java对象的属性
例:<body>
<jsp:useBean id="employee" class="app03a.Employee"/>
<jsp:setProperty name="employee" property="firstName" value="Abigail"/>
First Name: <jsp:getProperty name="employee" property="firstName"/>
</body>
include
include用于包含另一个资源,可以是另一个JSP页面、一个Servlet或者一个静态的HTML页面。
例:<body>
<jsp:include page="jspf/menu.jsp">
<jsp:param name="text" value="How are you?"/>
</jsp:include>
</body>
使用include动作时,文件扩展名必须为jsp,以便它能够作为一个JSP页面进行处理。
forward
forward动作用于当前页面跳转到另一个不同的资源。
例:<jsp:forward page="jspf/login.jsp">
<jsp:param name="text" value="Please login"/>
</jsp:forward>
错误处理
利用page指令的isErrorPage属性,把一个JSP页面变成一个错误处理页面。该属性值必须为true。
例:errorHandler.jsp页面
<%@page isErrorPage="true"%>
<html>
<head><title>Error</title></head>
<body>
An error has occurred. <br/>
Error message :
<%
out println(exception.tostring());
%>
</body>
</html>
在其它页面引用该错误处理页面:<%@page errorPage="errorHandler.jsp"%>
这样如果JSP页面抛异常,将会看到errorHandler.jsp页面信息。
Servlet容器将几个对象传给它所运行的Servlet。例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig。此外,还可以通过在HttpServletRequest对象中调用getSession获得HttpSession。
在JSP中,可以通过使用隐式对象来获取哪些对象。例如,隐式对象request表示由Servlet/JSP容器传给Servlet的service方法的HttpServletRequest。可以像使用HttpServletRequest的变量一样使用request。
pageContext是指为页面创建的javax.servlet.jsp.PageContext。它提供了有用的context信息,并通过一些名如其义的方法来访问与Servlet有关的各种对象,例如:getRequest、getResponse、getServletContext、getServletConfig和getSession。但他们所返回的对象可以通过隐式对象request、response、session及application直接访问。
JSP隐式对象: request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
out javax.servlet.jsp.JspWriter
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
config javax.servlet.ServletConfig
pageContext javax.servlet.jsp.PageContext
page javax.servlet.jsp.HttpJspPage
exception javax.lang.Throwable
PageContext中getAttribute和setAttribute方法进行存取属性。属性可以保存在以下4种范围种:page、request、session和application。
指令
指令是第一种JSP句法元素,其指示JSP转换器应该如何将某个JSP页面转换成Servlet的命令。
指令:page、include、taglib、tag、attribute和variable。
page指令可以出现在页面的任何位置,当它包含contentType或者pageEncoding属性时,必须放到最前边。page指令可以多次出现,除import属性效果可以累积外,其它属性多次出现值必须唯一。
include指令可以将另一个文件的内容放到当前JSP页面中。<%@include file="url"%>当url以“/”开头则为绝对路径,不以“/”开头则是相对于当前JSP页面的路径。
脚本元素
Scriptlet是一个Java代码块,以<%开头,以%>结束。
<%
代码块,在一个Scriptlet中定义变量,在它后边的其它Scritplet中是可见的。
%>
表达式
表达式的运算结果会被填入隐式对象out的print方法中。表达式以<%开头,以%>结束。
<%=java.util.Calendar.getInstance().getTime()%>注意表达式后边不需要用分号。
声明
声明可以在JSP页面中定义变量和方法。声明要用<%!和%>包含。
可以利用声明jspInit方法和jspDestroy方法覆盖实现类中的init和destroy方法。
jspInit。该方法与javax.servlet.Servlet中的init方法类似,JSP页面被初始化时,就会调用jspInit。jspInit方法不带参数。
jspDestroy。该方法与Servlet中的destroy方法相似,当JSP页面要被销毁时,就会调用它。
关闭脚本元素
随着JSP2.0中EL的发展,建议做法是利用EL来访问服务器端的对象,而不是在JSP中编写Java代码。原本JSP2.0开启的脚本元素需要关闭。
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
动作
useBean(现在很少使用)
将创建一个与某个Java对象相关的脚本变量。它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一。
例:<body>
<jsp:useBean id="today" class="java.util.Date"/>
<%=today%>
</body>
setProperty和getProperty
setProperty:在一个Java对象中保存一个属性
getProperty:获取一个Java对象的属性
例:<body>
<jsp:useBean id="employee" class="app03a.Employee"/>
<jsp:setProperty name="employee" property="firstName" value="Abigail"/>
First Name: <jsp:getProperty name="employee" property="firstName"/>
</body>
include
include用于包含另一个资源,可以是另一个JSP页面、一个Servlet或者一个静态的HTML页面。
例:<body>
<jsp:include page="jspf/menu.jsp">
<jsp:param name="text" value="How are you?"/>
</jsp:include>
</body>
使用include动作时,文件扩展名必须为jsp,以便它能够作为一个JSP页面进行处理。
forward
forward动作用于当前页面跳转到另一个不同的资源。
例:<jsp:forward page="jspf/login.jsp">
<jsp:param name="text" value="Please login"/>
</jsp:forward>
错误处理
利用page指令的isErrorPage属性,把一个JSP页面变成一个错误处理页面。该属性值必须为true。
例:errorHandler.jsp页面
<%@page isErrorPage="true"%>
<html>
<head><title>Error</title></head>
<body>
An error has occurred. <br/>
Error message :
<%
out println(exception.tostring());
%>
</body>
</html>
在其它页面引用该错误处理页面:<%@page errorPage="errorHandler.jsp"%>
这样如果JSP页面抛异常,将会看到errorHandler.jsp页面信息。

浙公网安备 33010602011771号