https://www.w3cschool.cn/jsp/jsp-architecture.html

JSP结构

JSP学习 - 图1

  • 浏览器发送HTTP请求给服务器
  • 服务器将请求传递给jsp引擎(通过url或者.jsp文件)
  • jsp引擎从磁盘中载入JSP,转化为servlet
  • 把servlet.java编译成class,传递回去
  • web组件调用servlet引擎载入并执行,生成HTML格式的输出,以HTTP response形式上交给web服务器
  • web服务器以静态html形式将HTTP response返回到浏览器中
  • 浏览器处理网页

JSP网页就是在网页里写java。

JSP语法

脚本

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
脚本程序的语法格式:

  1. <% 代码片段 %>

声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。
JSP声明的语法格式:

  1. <%! declaration; [ declaration; ]+ ... %>

例子:

  1. <%! int i = 0; %>
  2. <%! int a, b, c; %>
  3. <%! Circle a = new Circle(2.0); %>

表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
JSP表达式的语法格式:

  1. <%= 表达式 %>

注释

JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉。
JSP注释的语法格式:

  1. <%-- 这里可以填写 JSP 注释 --%>

判断语句

  1. <%! int day = 3; %>
  2. <html>
  3. <head>
  4. <title>IF...ELSE Example</title>
  5. </head>
  6. <body>
  7. <% if (day == 1 | day == 7) { %>
  8. <p> Today is weekend</p>
  9. <% } else { %>
  10. <p> Today is not weekend</p>
  11. <% } %>
  12. </body>
  13. </html>

运行后得到以下结果:

  1. Today is not weekend

现在来看看switch…case块,与if…else块有很大的不同,它使用out.println(),并且整个都装在脚本程序的标签中,就像下面这样:

  1. <%! int day = 3; %>
  2. <html>
  3. <head>
  4. <title>SWITCH...CASE Example</title></head>
  5. <body>
  6. <%
  7. switch(day) {
  8. case 0:
  9. out.println("It\'s Sunday.");
  10. break;
  11. case 1:
  12. out.println("It\'s Monday.");
  13. break;
  14. case 2:
  15. out.println("It\'s Tuesday.");
  16. break;
  17. case 3:
  18. out.println("It\'s Wednesday.");
  19. break;
  20. case 4:
  21. out.println("It\'s Thursday.");
  22. break;
  23. case 5:
  24. out.println("It\'s Friday.");
  25. break;
  26. default:
  27. out.println("It's Saturday.");
  28. }
  29. %>
  30. </body>
  31. </html>

运行后得出以下结果:

  1. It's Wednesday.

循环语句

在JSP程序中可以使用Java的三个基本循环类型:for,while,和 do…while。
让我们来看看for循环的例子:

  1. <%! int fontSize; %>
  2. <html>
  3. <head>
  4. <title>FOR LOOP Example</title>
  5. </head>
  6. <body>
  7. <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
  8. <font color="green" size="<%= fontSize %>">
  9. JSP Tutorial
  10. </font><br />
  11. <%}%>
  12. </body>
  13. </html>

运行后得到以下结果:
JSP Tutorial
JSP Tutorial
JSP Tutorial
将上例改用while循环来写:

  1. <%! int fontSize; %>
  2. <html>
  3. <head>
  4. <title>WHILE LOOP Example</title>
  5. </head>
  6. <body>
  7. <%while ( fontSize <= 3){ %>
  8. <font color="green" size="<%= fontSize %>">
  9. JSP Tutorial
  10. </font><br />
  11. <%fontSize++;%>
  12. <%}%>
  13. </body>
  14. </html>

运行后得到同样的结果:

JSP Tutorial
JSP Tutorial
JSP Tutorial

指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
语法格式如下:

  1. <%@ directive attribute="value" %>

Page指令

Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
Page指令的语法格式:

  1. <%@ page attribute="value" %>

下表列出与Page指令相关的属性:

属性 描述
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件就相当于直接被复制到了这个位置。
Include指令的语法格式如下:

  1. <%@ include file="相关url" %>

Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:

  1. <%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。
我没用过。

JSP动作

https://www.w3cschool.cn/jsp/jsp-actions.html

隐式对象

JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
JSP所支持的九大隐式对象:

对象 描述
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象