2008-6-4 jsp_day01 星期三 langna
-----------------------------------------------------------------------------
一, jsp指令: <%@... ....%>
1, 页面指令
2, 包含指令
3, 标签库指令
指令发生在转换阶段: 把jsp翻译生成java代码;
告诉jsp容器, 生成这样的servlet; 不能用请求对象等;
用的都是静态内容;
1, 页面指令
<%@page language="java"%>指定JSP的脚本语言,现在只能写java,一般不用写;
<%@page extends="className"> 指定翻译后代码类型的父类,最好不要使用这个指令;
<%@page import="..."%> 引入包 例:<%@page import="java.util.*,ent.* "%>(可出现多次)
<%@page session="true|false"%>指定是否自动创建Session,最好不自己指定,使用默认值true;
jsp自动创建了一个会话;供我们使用;
如果不想用,在每个jsp页面上都置成false;
如果: <%@page session="false"%> request.getSession(false)=null;
直接访问了jsp会自动创建一个会话;
判断是否登陆的话, 直接判断session存在与否是不行的,
因为如果用户事先访问了一个jsp页面的话,会自动生成一个session;
解决方法:
登陆后在session中设置一个属性,在别的地方判断有没有这个属性即可;
<%@page buffer=".." autoflush="true|false"%>设置输出的缓存和是否自动刷新缓存,
一般情况下都使用默认值,缓存的默认值为8KB, 自动刷新也为true;
<%@page isThreadSafe="true|false"%>是否线程安全,默认为true,也就是线程安全,
只使用默认值。false指在单线程下运行;已经不这么用了.
<%@page errorPage=""%>指定异常处理跳转的页面
<%@page isErrorPage="true|false"%>设定本页面就是异常后跳转的页面
<%@page isELIgnored="true|false"%>设定本页面是否忽略JSP2.0种EL表达式;false为支持;
缺省值不确定,看你的jsp版本; 我们这里是false;
<%@page pageEncoding="GBK"%> 设定页面显示的字符集;告诉转换器,用指定的字符集翻译成java代码;
编辑器和服务器的字符集不一致的时候需要指定,一般不用;
<%@page contentType="text/html;charset=GBK"%>设置输出流的编码方式和文件格式;
告诉浏览器我这里有中文;
相当于设置 : response.setContextType("text/html;charset=GBK");
注意:输出的字符集编码方式要和页面显示的字符集相同,一般定义输出流的编码方式;
注意以
上两个页面指令在JSP中最好只出现一次。注意在请求中传送的参数的值是中
文的话需要调用请求request的setCharacterEncoding("..")方法设置相应的编码方式;
页面指令会影响 getpageContext(this,request,response, "error.jsp", session/true, 8k, autoflush/false)
的参数;
2, 包含指令: 生成
源代码时包含进来; 任意的文件都行; 静态合并; 逐行解析;
<%@include file="...."%> 包含指令,包含指令会将要包含的文件代码原样输出
到本页面(在翻译时把包含文件的内容引入并合并),不进行翻译,
file属性制定要包含的文件的名字(注意要包含的文件的路径),这个指令可以实现页面的复用。
注意:<%@include file=" " %>要包含的
JSP文件中不能定义重名的变量,
如果不使用包含指令,那么JSP中的最小转换单元就是JSP文件,
使用了包含指令就会将多个jsp的结果合并到一起。
两个jsp不能保证变量重复声明;会出错.这时就可以用jsp动作. 动态包含.
3, <%@taglib ..%> 标签库指令,用于引入自定义标签库;
注:
jsp类实例, 重新装载后, 静态变量也会重新初始化.
计数器一直累加.可以使用ServletConfig application这个变量.
设置一个属性, 并且要加同步.
二, jsp动作:
运行时将执行包含的页面, 被包含的页面将生成单独的java文件, 并将结果一并发送到客户端;
在本jsp的页面只有一个调用:例如:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "head.jsp", out, false);
1 , 动态包含:
xml:namespace prefix = jsp />
include 动作是在翻译和编译