jsp
jsp页面元素构成:静态内容,指令,表达式,小脚本,声明,注释。
指令:
page指令:通常位于页面顶端,可以有多个
<%@page 属性1=“xxx”%>
属性language(jsp页面使用的脚本语言,默认java),import(引用脚本语言中用到的类文件),contentType(jsp页面用的编码方式)
include指令:将外部文件嵌入到当前jsp文件中,同时解析这个页面中的Jsp语句
taglib指令:使用标签库定义自定义标签,在jsp页面中使用该标签(启用定制行为 )
html注释客户端可见
jsp注释客户端不可见
jsp的注释<%--注释--%>
jsp脚本注释 // /**/
jsp脚本 在jsp页面中执行java <%java代码%>
jsp页面中定义变量或者方法
<%!
String s="str"
int add(int x,int y)
{
return x+y;
}
%>
jsp表达式 <%=表达式%>//没有分号
你好,<%=s %>
x+y=<%=add(10,5)%>
jsp页面生命周期
用户发出请求index.jsp
第一次请求----首先执行构造方法,jsp引擎把该jsp文件转换成为Servlet,生成字节码文件,并执行jspInit(),否则直接访问生成的字节码文件,然后解析执行jspService()[用于处理客户端的请求,对于每个请求,jsp引擎创建一个新的线程来处理该请求。多个客户端同时请求该jsp文件时,jsp引擎会创建多个线程。该Servlet始终驻于内存,所以响应快]
----------练习:用html和脚本输出9*9----------------
1 <%! 2 //返回九九乘法表对应的HTML代码,通过表达式来调用,在页面上显示 3 String printMultiTable1() 4 { 5 String s = ""; 6 for(int i=1;i<=9;i++) 7 { 8 for(int j=1;j<=i;j++) 9 { 10 s+=i+"*"+j+"="+(i*j)+" "; 11 } 12 s+="<br>"; //追加换行标签 13 } 14 return s; 15 } 16 17 //JSP内置out对象,使用脚本方式调用,打印九九乘法表 18 void printMultiTable2(JspWriter out) throws Exception 19 { 20 for(int i=1;i<=9;i++) 21 { 22 for(int j=1;j<=i;j++) 23 { 24 out.println(i+"*"+j+"="+(i*j)+" "); 25 } 26 out.println("<br>"); //追加换行标签 27 } 28 } 29 30 %> 31 <h1>九九乘法表</h1> 32 <hr> 33 <%=printMultiTable1()%> 34 <br> 35 <% printMultiTable2(out);%>
jsp内置对象:
是web容器创建的一组对象,不适用new关键字创建就可以使用。·
九大内置对象:request,response,out,application,session,PageContext,config,page,exception (前面5个常用)
<% int[] value={60,70,80}; for(int i:value{ out.println(i); } %>
web程序的请求与响应模式
缓冲区:buffer 用来保存临时数据的内存的一块区域
out对象是JSPWriter类的实例,是向客户端输出内容常用的对象,常用方法:
void println()向客户端打印字符串
void clear()清除缓存区的内容,在flush之后调用会抛出异常
void clearBuffer()清除缓冲区的内容,在flush之后调用不会抛出异常
void flush()将缓冲区内容输出到客户端
int getBufferSize()返回缓冲区以字节数大小,若不设缓冲区则为0
int getRemaining()返回缓冲区剩余可用量
boolean isAutoFlush()返回缓冲区满时,是自动清空还是抛出异常
void close()关闭输出流
<% out.println("<h2>静夜思</h2>"); //out.flush(); //out.clear();会抛出异常,后面的语句不会打印 %> 缓冲区大小<%=out.getBufferSize()%>byte<br> 缓冲区生于大小<%=out.getRemaining()%>byte<br> 是否自动清空缓冲区<%=out.isAutoFlush()%><br>