从零开始的JSP(1)

JSP基础语法

JSP页面元素的构成:

静态内容、指令、表达式、小脚本、声明和注释

JSP指令
page指令:通常位于Jsp页面的顶端,同一个页面可以有多个page指令。

1
<%@ page language="java" contentType="text/html;charset=UTF-8" import="java.util.*" %>

include指令:将一个外部文件嵌入到当前的JSP文件中,同时解析这个页面中的JSP语句。
taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

JSP注释

1
<%-- 这是一个默认的注释方式 --%>

JSP脚本
在JSP页面中执行的java代码

1
2
3
<%
out.println("Hello World!");
%>

JSP声明
在JSP页面中定义的变量或者方法

1
2
3
4
5
6
<%!
String s = "PoackBandit";
int add(int x, int y){
return x + y;
}
%>

JSP表达式
在JSP页面中执行的表达式,表达式不以分号结尾

1
2
3
//分别调用上面声明的s变量和函数add()
<%=s %>
<%=add(3, 4) %>

JSP页面的生命周期
用户发出请求index.jsp,如果这是页面第一次被请求,那么JSP引擎把该JSP文件转换成为一个Servlet,并生成字节码文件,并执行jspInit(),再解析执行jspService();若页面不是第一次被请求,那么直接访问字节码文件。
jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每一个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程的带来的问题,由于该Servlet始终驻于内存,所以响应是非常快的。

使用JSP打印九九乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%!
void ffff(JspWriter out) throws Exception
{
for(int i = 1; i <= 9; ++i){
for(int j = 1; j <= i; ++j){
out.println(i + "*" + j + "=" + i*j + "&nbsp;&nbsp;&nbsp;&nbsp;");
}
out.println("<br/>");
}
}
%>
<%
ffff(out);
%>