JavaWeb学习笔记(七)—— JSP
一、什么是JSP
JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别, JSP文件的扩展名为 ".jsp" 。
JSP技术所开发的Web应用程序是基于Java的, 它可以用一种简捷的方法从Java程序生成Web页面, 在使用上具有以下一点的特征:
- 跨平台: 由于JSP是基于Java语言的,他可以使用Java API, 所以他也是跨平台的, 可以应用于不同的系统中,如Windows, Linux 等. 当从一个平台移植到另一个平台时,JSP和JavaBean 的代码并不需要重新编译, 这是因为Java的字节码是与平台无关的(java的运行环境即jre),说跨平台其实也就是jre是跨平台的,java站在jre上,自然java也是跨平台的了. 举个栗子: jre就相当于一个多功能套街头,你java只要符合jre的规范,就能套上这个 多功能接头了.自然也就能跨平台了.
- 业务代码相分离: 在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开,使用HTML 来设计界面,使用JSP标签和脚本来动态生成页面上的内容. 在服务器端,JSP容器(tomcat,jboss,weblogic等的服务器)负责解析JSP标签和脚本程序,生成所请求的内容,并将这执行结果以HTML页面的形式返回到浏览器.(这是jsp的初衷, 但是在前辈们的使用中发现jsp中会出现大量的业务代码,导致业务逻辑等不清楚,开发完成后维护起来也不容易,后来就尽量将业务逻辑写在后台了,使用 MVC模式 这样逻辑更加清晰)
- 组件重用: JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型, 在JSP页面中, 甚至在整个项目中, 都可以重复使用这个JavaBean, 同时,JavaBean也可以应用到其他Java应用程序中.
- 预编译: 预编译也就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译.编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码.这样不仅节约了服务器的CPU资源, 还大大的提升了客户端的访问速度。
二、JSP的基本语法
2.1 JSP脚本元素
JSP脚本元素是指嵌套在<%和%>之中的一条或多条Java程序代码。通过JSP脚本元素可以将Java代码嵌入HTML页面中,所有可执行的Java代码,都可以通过JSP脚本来执行。(不建议在jsp页面中嵌入java代码)
JSP脚本元素主要包含如下三种类型:
- JSP Scriptlets:<%...%>在这个里面书写内容等同于在方法中书写代码
Java语句;方法中能放什么,它就能放什么。如果在这个元素里面定义了一个变量,那么此时他就是一个局部变量!
- JSP声明语句:<%!...%> 在这个里面书写内容等同于在类中书写代码
Java定义类成员;没人会用它!有人会考它!定义类的成员!类能包含什么,它就可以包含什么。声明中没有9大内置对象!
- JSP表达式:<%=…%> 里面的代码会被输出!
Java表达式;等同与resopnse.getWriter().print()。写到这里的东西,都是用来输出的!
【JSP Scriptlets】
JSP Scriptlets是一段代码段。当需要使用Java实现一些复杂操作或控制时,可以使用它。JSP Scriptlets的语法格式如下所示:
<% java代码(变量、方法、语句等)%>
在JSP Scriptlets中声明的变量是JSP页面的局部变量,调用JSP Scriptlets时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。
【JSP声明语句】
JSP的声明语句用于声明变量和方法,它以“<%!”开始,以“%>”结束,其语法格式如下所示:
<%!
定义的变量或方法等
%>
在上述语法格式中,被声明的Java代码将被编译到Servlet的_jspService()方法之外,即在JSP声明语句中定义的都是成员方法、成员变量、静态方法、静态变量、静态代码块等。在JSP声明语句中声明的方法在整个JSP页面内有效。
在一个JSP页面中可以有多个JSP声明语句,单个声明中的Java语句可以是不完整的,但是多个声明组合后的结果必须是完整的Java语句。
【JSP表达式】
JSP表达式(expression)用于将程序数据输出到客户端,它将要输出的变量或者表达式直接封装在以“<%=” 开头和以“%>”结尾的标记中,其基本的语法格式如下所示:
<%=expression %>
在上述语法格式中,JSP表达式中的将“expression”表达式结果输出到浏览器。需要注意的是:
- <%=”和“%>”标记之间插入的是表达式,不能插入语句。
- “<%=”是一个完整的符号,“<%”和“=”之间不能有空格。
- JSP表达式中的变量或表达式后面不能有分号
2.2 JSP注释
同其它各种编程语言一样,JSP也有自己的注释方式,其基本语法格式如下:
<%-- 注释内容 --%>
需要注意的是,Tomcat将JSP页面编译成Servlet程序时,会忽略JSP页面中被注释的内容,不会将注释信息发送到客户端。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP注释</title>
</head>
<body>
<%--这是个JSP注释--%>
<!--这是个HTML注释-->
</body>
</html>
上述代码中,包含HTML注释和JSP两种注释方式。启动tomcat服务器,访问该页面,可以看到该页面什么都不显示,接下来右键【查看页面源代码】:
从图中可以看出,JSP的注释信息没有显示出来,而只显示出了HTML注释。这是因为Tomcat编译JSP文件时,会将HTML注释当成普通文本发送到客户端,而JSP页面中格式为"<%-- 注释信息 --%>"的内容则会被忽略,不会发送到客户端。
JSP注释、Java注释、HTML注释对比:
<%--JSP注释--%>
<% //java注释 %>
<!--HTML注释-->
2.3 JSP运行原理
【Web服务器是如何调用并执行一个jsp页面的?】
浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet。
JSP的运行过程具体如下:
(1)客户端发出请求,请求访问JSP文件
(2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果发现JSP文件中存在任何语法错误,则中断转换过程,并向服务器和客户端返回出错信息
(3)如果转换成功,则JSP容器将生成的Java源文件编译成响应的字节码文件*.class。该class文件就是一个Servlet,Servl容器会像处理其它Servlet一样处理它。
以HelloWorld.jsp为例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<%
out.print("Hello World");
%>
</body>
</html>
当用户第一次访问HelloWorld.jsp页面时,该页面会先被JSP容器转换为一个名称为HelloWorld_jsp.java的源文件,然后将源文件编译为一个名称为HelloWorld_jsp.class字节码文件。如果项目发布在Tomcat的webapps目录中,源文件和.class文件可以在Tomcat服务器的work\Catalina\localhost\项目名\org\apache\jsp目录下找到。而使用IDEA开发工具时,idea的web项目不是直接将webapp放在tomcat容器中。而是将生成的webapp与tomcat按照idea的“技术”形成连接,这样减少了很大的配置tomcat的时间,一次配置,一劳永逸。jsp编译后的class和java文件在C:/Users/登录名/.IntelliJIdea2017.2/system/tomcat/Tomcat-pure_工程名/work/Catalina/localhost/appcontext名称/org/apache/jsp目录下:
从图中可以看出,HelloWorld.jsp已被转换为源文件和.class文件。打开HelloWorld_jsp.java文件,可查看转换后的源代码:
public final class HelloWorld_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
...
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
} public void _jspDestroy() {
} public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null; try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out; out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>Hello World</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write(" "); out.print("Hello World"); out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
可以看出HelloWorld.jsp文件转换后的源文件m没有实现Servlet接口,但继承了org.apache.jasper.runtime.HttpJspBase类。在Tomcat源文件中查看HttpJspBase类的源代码
从HeepJspBase的源码中可以看出,HttpJspBase类是HttpServlet的一个子类,由此可见,HelloWorld_jsp类就是一个Servlet。结论:JSP就是一个Servlet。
当浏览器访问服务器上的HelloWorld.jsp页面时,其实就是在访问HelloWorld_jsp这个Servlet,index_jsp这个Servlet使用_jspService这个方法处理请求。
【jsp页面中的html排版标签是如何被发送到客户端的?】
浏览器接收到的这些数据:
都是在_jspService方法中使用如下的代码输出给浏览器的:
在jsp中编写的java代码和html代码都会被翻译到_jspService方法中去,在jsp中编写的java代码会原封不动地翻译成java代码,如<%out.print("Hello World");%>直接翻译成out.print("Hello World");,而HTML代码则会翻译成使用out.write("<html标签>\r\n");的形式输出到浏览器。在jsp页面中编写的html排版标签都是以out.write("<html标签>\r\n");的形式输出到浏览器,浏览器拿到html代码后才能够解析执行html代码。
【jsp页面中的java代码服务器是如何执行的?】
在jsp中编写的java代码会被翻译到_jspService方法中去,当执行_jspService方法处理请求时,就会执行在jsp编写的java代码了,所以Jsp页面中的java代码服务器是通过调用_jspService方法处理请求时执行的。
【Web服务器在调用jsp时,会给jsp提供一些什么java对象?】
查看_jspService方法可以看到,Web服务器在调用jsp时,会给Jsp提供如下的8个java对象
其中page对象,request和response已经完成了实例化,而其它5个没有实例化的对象通过下面的方式实例化
这8个java对象在Jsp页面中是可以直接使用的,如下所示:
<%
session.setAttribute("name", "session对象");//使用session对象,设置session对象的属性
out.print(session.getAttribute("name")+"<br/>");//获取session对象的属性
pageContext.setAttribute("name", "pageContext对象");//使用pageContext对象,设置pageContext对象的属性
out.print(pageContext.getAttribute("name")+"<br/>");//获取pageContext对象的属性
application.setAttribute("name", "application对象");//使用application对象,设置application对象的属性
out.print(application.getAttribute("name")+"<br/>");//获取application对象的属性
out.print("Hello Jsp"+"<br/>");//使用out对象
out.print("服务器调用index.jsp页面时翻译成的类的名字是:"+page.getClass()+"<br/>");//使用page对象
out.print("处理请求的Servlet的名字是:"+config.getServletName()+"<br/>");//使用config对象
out.print(response.getContentType()+"<br/>");//使用response对象
out.print(request.getContextPath()+"<br/>");//使用request对象
%>
运行结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2IAAAFQCAIAAABS4FpKAAAgAElEQVR4nOzdeZwb9Z0n/NLua/94dl77zO4zs7Pz7JKEcBsIMCFDBhISbxiw8W237RjCME8ODJkwkwEMtA04xjc4JjhAxs1hd2O3u9vudrda6m51676lUukulY5SXaoqSaX7arX6kP38UaWru31AmCyTkV7vl16lX/2qSi2/JH38/dVPBXSdGTz2/ievH/r1P738+t/99Lkbblpxw8133nDznV+55a6v3HLXV2658yu33PmVm++8YRkrbrh5xQ03rfhfN60Qlm9e0dzhq7fc9dVb7/rqrXd97bZvXMvdX7v17q/eejffvwnfePfXbrtb6NZi8X5uvP0bN95+T6trHvozuPH2e2680vP/4o6y3M6X/3uFp/QFu7dmmbVf593Bu/emO+69acW9N6249+YV9918530333nfLXf+1S13/tUtdwluveubfxjCce/8q5tX3LfUTfxTbWtra2tra7uqnTt3dnZ2vvPOOx9//HF/fz/w9nsfd+47+osXd99w84qbb7/7vZOn8tNz+fIVTC8yW5drkl/GXGF5s3VCz9Kym1/T8vtf9ql+BqVFz6f1Ty59Tln+vtisskhmWYVKptC6IJhtKMymC7PpQuVKUl+02p5n042nMZcpzWVKc9kvTuZa0m1tbW3/dlzzM+1fW3Z6/vPJXUV5sfxnUaibubqFRYqt5uarP/7pMwtf9O299z/4Ynf4L//0xT/Jz3370apH5haq//Jxz2133XvTHfc8//zzR44cOXnyJLDnwLF/eKHzz/7if/7uo24qUTQHuCkXO+WKyt0xuTs2xXNFW7FTLnbKyU46mSkHM+lkJh30pIOecjBTDmbKychdrMLFKlxRhTum9MRUdd7FlN6Y0htVeqNKT1ThZhVuRl6jcLMKN6twRxUeVuGJKj0xnqJFtGWVN67wxpVNFN54c395nbsuKndH5a5mrJz/AxsW/fnRSSdbJ3MwMgczIWB543ambszOSCFaCtESGy210RIbLbHRo7YIT2yLiMGGYQvV7KKAHDKTQ2Zy0EQOmshBMzloIi/wzBS/cN5EnTdSA0ZqwEj2G8h+A9nH05Pn9ESvTnBWi5/V4me0+BkNflZLnKnTCAufaolPNcQZDfGphvhUg/eo8e46FdajwrpVWLcS61FhPSqs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" alt="" />
三、JSP三大指令
3.1 page指令
在JSP页面中,经常需要对页面的某些特征进行描述,例如,页面的编码方式,JSP页面采用的语言等。这时,可以通过page指令来实现。page指令的具体语法格式如下所示:
<%@ page 属性名1=“属性值1” 属性名2=“属性名2”...%>
在上面的语法格式中,page用于声明指令的名称,属性用来指定JSP页面的某些特征。page指令提供了一系列与JSP页面相关的属性:
【pageEncoding和contentType】
pageEncoding指定当前JSP页面的编码!这个编码是给服务器看的,服务器需要知道当前JSP使用的编码,不然服务器无法正确把JSP编译成java文件。所以这个编码只需要与真实的页面编码一致即可!
contentType属性与response.setContentType()方法的作用相同!它会完成两项工作,一是设置响应字符流的编码,二是设置content-type响应头。例如:<%@ contentType=”text/html;charset=utf-8”%>,它会使“真身”中出现response.setContentType(“text/html;charset=utf-8”)。
无论是page指令的pageEncoding还是contentType,它们的默认值都是ISO-8859-1,我们知道ISO-8859-1是无法显示中文的,所以JSP页面中存在中文的话,一定要设置这两个属性。
【import属性】
指定在JSP页面翻译成的Servlet源文件中导入的包或类。一个import属性可以引入多个类,中间用英文逗号隔开:
<%@page import=”java.net.*,java.util.*,java.sql.*”%>
import是唯一可以声明多次的page指令属性:
<%@page import=”java.util.*” import=”java.net.*” import=”java.sql.*”%>
但是,我们一般会使用多个page指令来导入多个包:
<%@ page import=”java.util.*”%>
<%@ page import=”java.net.*”%>
<%@ page import=”java.text.*”%>
【errorPage和isErrorPage】
我们知道,在一个JSP页面出错后,Tomcat会响应给用户错误信息(500页面)!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!也就是自定义错误页面,例如:<%@page errorPage=”xxx.jsp”%>。这时,在当前JSP页面出现错误时,会请求转发到xxx.jsp页面。
a.jsp
<%@ page import="java.util.*" pageEncoding="UTF-8"%>
<%@ page errorPage="b.jsp" %>
<%
if(true)
throw new Exception("哈哈~");
%>
b.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<body>
<h1>出错啦!</h1>
</body>
</html>
在上面代码中,a.jsp抛出异常后,会请求转发到b.jsp。在浏览器的地址栏中还是a.jsp,因为是请求转发!
而且客户端浏览器收到的响应码为200,表示请求成功!如果希望客户端得到500,那么需要指定b.jsp为错误页面。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<html>
<body>
<h1>出错啦!</h1>
<%=exception.getMessage() %>
</body>
</html>
注意,当isErrorPage为true时,说明当前JSP为错误页面,即专门处理错误的页面。那么这个页面中就可以使用一个内置对象exception了。其他页面是不能使用这个内置对象的!而且,一旦转发到错误页,那么Tomcat会把状态码设置为500,而不再是200了。
【autFlush和buffer】
buffer表示当前JSP的输出流(out隐藏对象)的缓冲区大小,默认为8kb。
authFlush表示在out对象的缓冲区满时如果处理!当authFlush为true时,表示缓冲区满时把缓冲区数据输出到客户端;当authFlush为false时,表示缓冲区满时,抛出异常。authFlush的默认值为true。
这两个属性一般我们也不会去特意设置,都是保留默认值!
【isELIgnored】
isElIgnored属性表示当前JSP页面是否忽略EL表达式,默认值为false,表示不忽略(即支持)。
【language】:只能是Java
【session】:默认为true,表示当前JSP页面可以使用session对象,如果为false表示当前JSP页面不能使用session对象;
需要注意的是:page指令对整个页面都有效,而与其书写的位置无关,但是习惯上把page指令写在JSP页面的最前面。
3.2 include指令
include指令表示静态包含!即目的是把多个JSP合并成一个JSP文件!
include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。
静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。
很明显,在lo.jsp中使用username变量,而这个变量在hel.jsp中定义的,所以只有这两个JSP文件合并后才能使用。通过include指定完成对它们的合并!
3.2 taglib指令
在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。
四、JSP九大内置对象
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用 。
名称 |
类型 |
描述 |
pageContext |
javax.servlet.jsp.PageContext |
JSP的页面容器 |
request |
javax.servlet.http.HttpServletRequest |
得到用户的请求 |
response |
javax.servlet.http.HttpServletResponse |
服务器向客户端的回应信息 |
session |
javax.servlet.http.HttpSession |
用来保存用户的信息 |
application |
javax.servlet.ServletContext |
所有用户的共享信息 |
config |
javax.servlet.ServletConfig |
服务器配置,可以获得初始化参数 |
out |
javax.servlet.jsp.JspWriter |
用于页面输出 |
page |
java.lang.Object |
指当前页面转换后的Servlet类的实例 |
exception |
java.lang.Throwable |
表示JSP页面所发送的异常,在错误页中才起作用 |
request,response,session,application,config这些对象在前面都已经作了详细的介绍,而page对象在JSP页面中很少被用到。所以这里重点介绍一下剩下的pageContext对象,out对象。
4.1 pageContext对象
在JavaWeb中一共四个域对象,其中Servlet中可以使用的是request、session、application三个对象,而在JSP中可以使用pageContext、request、session、application四个域对象。JSP这四个域的范围为:
PageContext常量名 |
描述 |
作用域名称 |
域对象类型 |
PageScope |
当前页面中有效 |
pageContext |
PageContext |
RequestScope |
一次请求范围 |
request |
HttpServletRequest |
SessionScope |
一次会话范围 |
session |
HttpSession |
ApplicationScope |
应用范围 |
application |
ServletContext |
- page:表示当前页,通常没用。jsp标签底层使用。
- request:表示一次请求。通常一次请求就一个页面,但如果使用请求转发,可以涉及多个页面。
- session:表示一次会话。可以在多次请求之间共享数据。
- application:表示一个web应用(项目)。可以整个web项目共享,多次会话共享数据。
在JSP页面中,使用pageContext对象可以获取JSP的其他8个隐式对象。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法:
方法名 |
功能描述 |
JspWriter getOut() |
获取out内置对象 |
ServletConfig getServletConfig() |
获取config内置对象 |
Object getPage() |
获取page内置对象 |
ServletRequest getRequest() |
获取request内置对象 |
ServletResponse getResponse() |
获取response内置对象 |
HttpSession getSession() |
获取session内置对象 |
ServletContext getServletContext() |
获取application内置对象 |
Exception getException() |
获取exception内置对象 |
上表中列举了pageContext获取其他隐式对象的方法,这样,当传递一个pageContext对象后,就可以通过这些方法轻松地获取到其他8个隐式对象了。
pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据是通过操作属性来实现的:
方法名称 |
功能描述 |
void setAttribute(String name, Object value, int scope) |
在指定范围中添加数据 |
Object getAttribute(String name, int scope) |
获取指定范围的数据 |
void removeAttribute(String name, int scope) |
移除指定范围的数据 |
Object findAttribute(String name) |
从4个域对象中查找名称为name的属性 |
上表列举了pageContext对象操作属性的相关方法,其中,参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext对象的作用范围有4个值,具体如下:
- PageContext.PAGE_SCOPE :表示页面范围
- PageContext.REQUEST_SCOPE:表示请求范围
- PageContext.SESSION_SCOPE:表示会话范围
- PageContext.APPLICATION_SCOPE:表示Web应用程序范围
需要注意的是,当使用 findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到就停止查找,并返回属性的名称,否则返回null。接下来通过一个案例来演示pageContext对象的使用:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>pageContext</title>
</head>
<body>
<%
// 获取request对象
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
// 设置page范围内属性
pageContext.setAttribute("str", "Java", pageContext.PAGE_SCOPE);
// 设置request范围内属性
req.setAttribute("str", "Java Web");
// 获得page范围属性
String str1 = (String) pageContext.getAttribute("str", pageContext.PAGE_SCOPE);
// 获得request范围属性
String str2 = (String) pageContext.getAttribute("str", pageContext.REQUEST_SCOPE);
%>
<%="page范围:"+str1%><br>
<%="request范围:"+str2%> </body>
</html>
浏览器的显示结果如下:
从显示结果可以看出,通过pageContext对象可以获取到request对象,并且还可以获取不同范围内的属性。
4.2 out对象
out对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
- 设置page指令的buffer属性关闭了out对象的缓存功能
- out对象的缓冲区已满
- 整个JSP页面结束
接下来,通过一张图来描述JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系:
从图中可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。为了验证上述说法是否正确,接下来通过一个具体的案例来演示out对象的使用。
创建out.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>out</title>
</head>
<body>
<%
out.println("first line<br>");
response.getWriter().println("second line<br>");
%>
</body>
</html>
启动服务器,访问该页面,显示如下:
从图中可以看出,尽管out.println语句位于response.getWriter().println语句之前,但它的输出内容却在后面。由此可以说明,out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即:first line)才真正写入到Servlet引擎提供的缓冲区中,而 response.getWriter().println语句则是直接把内容(即:second line)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。
五、JSP动作标签
JSP动作标签是用来控制JSP的行为,执行一些常用的JSP页面动作。通过动作标签可以实现使用多行Java代码能够实现的效果,如包含页面文件,实现请求转发等。
5.1 jsp:include
<jsp:include>标签的作用是用来包含其它JSP页面的!你可能会说,前面已经学习了include指令了,它们是否相同呢?虽然它们都是用来包含其它JSP页面的,但它们的实现的级别是不同的!
include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。
include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!
hel.jsp
<body>
<h1>hel.jsp</h1>
<jsp:include page="lo.jsp" />
</body>
lo.jsp
<%
out.println("<h1>lo.jsp</h1>");
%>
5.2 jsp:forward
forward标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。
hel.jsp
<body>
<h1>hel.jsp</h1>
<jsp:forward page="lo.jsp"/>
</body>
lo.jsp
<%
out.println("<h1>lo.jsp</h1>");
%>
注意,最后客户端只能看到lo.jsp的输出,而看不到hel.jsp的内容。也就是说在hel.jsp中的<h1>hel.jsp</h1>是不会发送到客户端的。<jsp:forward>的作用是“别在显示我,去显示它吧!”。
5.3 jsp:param
还可以在<jsp:include>和<jsp:forward>标签中使用<jsp:param>子标签,它是用来传递参数的。下面用<jsp:include>来举例说明<jsp:param>的使用。
a.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>a.jsp</title>
</head>
<body>
<h1>a.jsp</h1>
<hr/>
<jsp:include page="b.jsp">
<%--给被包含的页面b.jsp传递参数。--%>
<jsp:param name="username" value="zhangsan"/>
</jsp:include>
</body>
</html>
b.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>b.jsp</title>
</head>
<body>
<h1>b.jsp</h1>
<hr/>
<%
// 获取参数
String username = request.getParameter("username");
out.print("你好:" + username);
%>
</body>
</html>
参考:https://www.cnblogs.com/xdp-gacl/p/3764991.html
JavaWeb学习笔记(七)—— JSP的更多相关文章
- JavaWeb学习笔记之JSP(一)
1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...
- JavaWeb学习笔记之JSP(二)
1.1. JSP的指令: 1. 什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...
- JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象
目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...
- JavaWeb学习笔记六 JSP
JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java s ...
- JavaWeb学习笔记七 事务
什么是事务?一件事情有n个组成单元 ,要么这n个组成单元同时成功,要么n个单元就同时失败.就是将n个组成单元放到一个事务中. mysql的事务 默认的事务:一条sql语句就是一个事务,默认就开启事务并 ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- Java虚拟机(三):垃圾收集器
一.串行(Serial)收集器 最古老,最稳定 效率高 可能会产生较长的停顿 -XX:+UseSerialGC 新生代.老年代使用串行回收 新生代复制算法 老年代标记-压缩 二.并行收集器 1. Pa ...
- Unity3d平台信息设置
[Unity3d平台信息设置] 通过"Edit" -> "Project Settings" -> "Player"菜单选项.打 ...
- Catalan数计算及应用
Catalan数列是非常奇妙的一列数字,因为很多问题的解就是一个Catalan数.知道了这一规律,很多看似复杂的问题便可迎刃而解.那么什么是Catalan数,什么样的问题的解是Catalan数呢? 1 ...
- day58-activiti 02-历史数据查询
Activity 笔记 第二天 今天内容安排: 1.历史数据查询 办过多少个任务, 这些历史数据有时候我们也需要去查询一下. 本身day02这个项目就没有导jar包,有点类似于maven,在你的项目 ...
- Linux Valgrind命令
一.简介 C/C++程序,最常见的错误之一就是内存泄露.Valgrind 是一款 Linux下的内存调试工具,它可以对编译后的二进制程序进行内存使用监测找出内存泄漏问题. Valgrind通常包括如下 ...
- 获取HTML元素位置--js学习笔记
对于不同的元素,不同的浏览器,offsetParent含义不同,有时,指的是直接包含的元素,有时指的是HTML元素,有时不存在offsetParent. 如果所研究的元素没有offsetParent, ...
- dev初识 拖动分组
1.前台代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm ...
- javascript总结8:JavaScript 类型转换
1 JavaScript 数据类型转换 1.1 数字类型转字符串 n1 = 10;var n2 =String(n1); 或者 var n3 = n1.toString(n1); 1.2 字符串转数字 ...
- mysql 全文搜索 FULLTEXT
到 3.23.23 时,MySQL 开始支持全文索引和搜索.全文索引在 MySQL 中是一个 FULLTEXT 类型索引.FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE ...
- XE下的FMX中压缩图片
用FMX压缩图片,发现FMX里的canvas没有draw,stretch,cliprect类,FMX里程序创建时会自动引用FMX.Graphics, 而这个单元内的TBitmap类的Canvas没有S ...