JSP 页面元素构成
JSP 三大指令
1、page指令: 通常位于 jsp 页面的顶端,同一个页面可以有多个page指令
(默认的编码方式 ISO-8859-1 仅支持全英文,如果输入中文的话就会报错,可以改成utf-8)
2、include 指令: 将一个外部文件嵌入到当前的 jsp 文件中,同时解析这个页面中的 jsp 语句
3、taglib 指令: 使用标签库定义新的自定义标签,在 jsp 中启用定制行为
JSP 三种注释方式
- HTML注释,客户端可见: <!-- HTML注释,客户端可见 -->
- JSP注释,客户端不可见: <%-- JSP注释,客户端不可见--%>
- JSP脚本中的注释,客户端不可见: //JSP脚本中的单行注释,客户端不可见,/* JSP脚本中的多行注释 ,客户端不可见*/
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <h1>这是我的第一个jsp页面</h1> <hr> <!-- HTML注释,客户端可见 --> <%-- JSP注释,客户端不可见--%> <% //JSP脚本中的单行注释,客户端不可见 /* JSP脚本中的多行注释 ,客户端不可见*/ %> </body> </html>
运行结果:
JSP 脚本
在JSP页面中执行的 JAVA 代码,称之为脚本。
语法:
<% JAVA 代码 %>
示例:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <h1>这是我的第一个jsp页面</h1> <hr> <% out.println("Hello World!"); %> </body> </html>
浏览器中打开页面,发现执行了out.print这段脚本
JSP 声明
在 JSP 页面中定义变量或方法
语法:
<%! JAVA代码 %>
JSP 表达式
在 JSP 页面中执行的表达式
语法:
<% =表达式 %> // 注意:表达式不以分号结尾
示例:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <!-- JSP 声明 --> <%! String str = "小明"; // 声明了一个字符串类型变量 int sum (int a, int b) { // 声明了一个返回值是整型的求和方法 return a + b; } %> <!-- JSP 表达式 --> <h3>姓名:<%=str %></h3> <hr> <h3>10 + 5 = <%=sum(10, 5) %></h3> </body> </html>
页面展示:
JSP 生命周期
jspInit() 是一个初始化方法
jspService() 方法被调用来处理客户端的请求。对每一个请求,jsp 引擎创建一个新的线程来处理该请求;如果有多个客户端同时请求该 jsp 文件,那么,jsp 引擎会创建多个线程,每个客户端请求对应一个线程。
以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程编程带来的同步问题,由于该Servlet 始终驻于内存,所以响应是非常快的。
当页面被首次访问(或修改后首次访问)时,会在 " Tomcat -> work -> Catlina - > localhost -> project name -> org -> apache -> jsp " 目录下创建 Java的源文件和字节码文件,并为每个访问的用户创建一个线程
应用:打印九九乘法口诀表
方法一:使用表达式实现
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <!-- 使用表达式实现九九乘法表 --> <%-- 声明 --%> <%! String printMultiTable(){ String result = ""; for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { result += i + "*" + j + "=" + i * j + " "; } result += "</br>"; } return result; } %> <%-- 表达式:不能用分号结尾 --%> <%=printMultiTable() %> </body> </html>
方法二:使用脚本实现
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <%-- 脚本:out对象是JSPWriter类的实例,用于向客户端输出内容 --%> <% for (int i = 1; i <= 9; i++) { for (int j = 1; j <=i; j++) { out.print(i + "*" + j + "=" + (i*j) + " "); } out.println("</br>"); } %> </body> </html>
运行结果: