一、什么是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的更多相关文章

  1. JavaWeb学习笔记之JSP(一)

    1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...

  2. JavaWeb学习笔记之JSP(二)

    1.1.  JSP的指令: 1.   什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...

  3. JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象

    目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...

  4. JavaWeb学习笔记六 JSP

    JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java s ...

  5. JavaWeb学习笔记七 事务

    什么是事务?一件事情有n个组成单元 ,要么这n个组成单元同时成功,要么n个单元就同时失败.就是将n个组成单元放到一个事务中. mysql的事务 默认的事务:一条sql语句就是一个事务,默认就开启事务并 ...

  6. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  7. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  8. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  10. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. A Look at the Razor View Engine in ASP.NET MVC

    The biggest architectural difference that exists between ASP.NET MVC and ASP.NET Web Forms is the ne ...

  2. Reporting Service中配置oracle 数据连接

    一.安装配置报表服务器 数据源 1.安装oracle客户端32位“Oracle - OraClient11g_home1_32bit” 2.配置监听及tnsnames.ora 3.配置ODBC 添加一 ...

  3. Codeforces 919F——A Game With Numbers

    转自大佬博客:https://www.cnblogs.com/NaVi-Awson/p/8405966.html; 题意 两个人 Van♂ 游戏,每人手上各有 8'>88 张牌,牌上数字均为 [ ...

  4. dataTable写入数据库(大数据写入)

    例1: connectionStr,链接字符串dataTableName, 数据库中对应表名sourceDataTable DataTable 要写入数据库的DataTable字段要和表一致 publ ...

  5. c# 如何制作RealPlayer 视频播放器

      c# 如何制作RealPlayer 视频播放器 主要介绍了如何使用 RealPlayer G2 Control 控件 那么我们怎么获得到这个控件呢,很简单,操作方法如下 右单击工具箱对话框的[所有 ...

  6. 443. String Compression字符串压缩

    [抄题]: Given an array of characters, compress it in-place. The length after compression must always b ...

  7. Part10-C语言环境初始化-栈初始化lesson1

    1.概念解析 ARM系统使用的是满栈! ARM采用降栈!!! 栈帧 每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧.那么所有栈帧组成了整个栈. 子函 ...

  8. LightOJ 1248 Dice (III) (水题,期望DP)

    题意:给出一个n面的色子,问看到每个面的投掷次数期望是多少. 析:这个题很水啊,就是他解释样例解释的太...我鄙视他,,,,, dp[i] 表示 已经看到 i 面的期望是多少,然后两种选择一种是看到新 ...

  9. Build fat static library (device + simulator) using Xcode and SDK 4+

    155down votefavorite 185 It appears that we can - theoretically - build a single static library that ...

  10. EasyUI学习笔记(1)----Tree控件实现过程中.NET下无法访问json数据的解决办法

    直接调用官网的Demo中的方法 , 将json数据存储在同目录下,但是在运行之后树没有出现,用FireBug调试,错误如下 不允许访问json数据,刚开始以为是权限不够,然后又给解决方案所在的文件夹设 ...