JSP指令元素,JSP内置对象及JSP标签

来源:互联网 发布:衢州市网络人才网 编辑:程序博客网 时间:2024/05/17 00:51

一,JSP脚本元素:

(1)声明标签(Declaration Tag):语法:<%!变量或方法的声明%> 作用:声明JSP内所使用的全局变量或方法;
(2)表达式(Expression Tag):语法:<%=表达式%> 作用:输出Java中变量或者表达式的值到页面上;
(3)程序代码标签(Scriptlet Tag):语法:<%程序代码%> 作用:编写Java程序代码,但不可以定义方法。

二,JSP页面注释
JSP注释:<%–…..–%>,转化阶段消失,只能被开发人员看到;
Java注释://(单行),/**/(多行),/***/(文档),编译阶段消失;
HTML注释:<!--...-->,不会消失,在页面中能看到。

<%–…..–%>与<!--...-->的区别:
<! -- -->:Tomcat不把它当注释,和其他东西一样,会发送到客户端。但浏览器不会去显示它,因为浏览器知道它是注释,但是可以通过在浏览器中右键查看源代码,查看<!-- … -->中的内容。;
<%----%>:Tomcat在生成Servlet时,就会忽略它,因为Tomcat认识它,知道它是注释。所以在Servlet中就没有它,也不会发现到客户端。也就是说,客户端永远看不到它!

三,JSP指令元素

JSP指令元素用于指示JSP执行某些步骤,用于指示JSP表现特定的行为;
语法格式为:<%@ 指令元素 属性名=属性值 %>
可以分为三类:page指令标记,include指令标记,taglib指令标记;

(1)page指令标记
page指令用来定义JSP文件的全局属性,page属性包含在”<%@page>”和”%>”之间,这些属性可以单独使用,也可以几个或多个同时使用,在JSP页面中,只有import可以出现多次,其他属性都只能出现一次。下面为page的一些属性:
1)language:JSP文件允许嵌入的语言,暂时只支持一种JAVA语言。(不需要改变)
2)extends:JSP翻译翻译Servlet文件,servlet继承的类。(不需要改变)
3)session:指定一个Http会话是否使用session对象。默认值是true,可以直接使用session。设置false,不能直接使用。
4)import:引入java的jar包(使用多次)
5)buffer:指定JSP对客户端缓冲区的大小。默认为8k
6)autoFlush:设置默认刷新缓冲区(不要修改),如果buffer溢出,设置为true时,正常输出;设置为false时,出现异常;
7)errorPage:处理异常事件时调用的JSP页面
8)contentType:服务器端输出所有内容采用的编码。
9)isErrorPage:设置此页是否可为其他页的errorPage目标,设置为true时,可以使用exception,设置为false时,不可以使用。
10)isELlgnored:用来指定EL(表达式语言)是否被忽略,true则忽略,false则计算表达式的值
11)pageEncoding:JSP页面字符编码,即JSP翻译成Servlet文件时采用的编码其优先权高与contentType

(2)include指令标记
include指令的作用是在JSP页面中静态包含一个文件,同时由JSP解析包含的文件内容,语法为<%@include file="filename"%>

静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。

(3)taglib指令标记
taglib指令用于在JSP页面中导入标签库,常用的标签库为JSTL。语法为:语法:<%@taglib uri=""... %>,taglib的常用属性有:
1)uri:标签文件的URI地址;
2)prefix:标签组的命名空间前缀。

四,JSP内置对象

JSP内置对象也称为隐含、隐藏对象,是指在JSP页面中无需创建就可以直接使用的变量,在JSP中一共 有9个这样的对象,分别是,括号中的为其对应的真实对象:
1)out(JspWriter):向客户端输出数据,管理服务器输出缓冲区,内部使用PrintWriter对象来输出文本级数据,通过page指令的buffer属性来调整缓冲区的大小,默认为8kb,最为常用的方法是print(),向页面输出,它与response.getWriter()基本相同;作用范围为:page

2)config(ServletConfig):在页面中基本没有什么用,但如果JSP在web.xml中存在配置,而且存在初始化参数,那么可以使用config来获取;通过getServletContext()、getServletName()、getInitParameter()方法来获取;

3)page(当前JSP的Servlet类型):page对象代表了正在运行的JSP文件产生的类对象,一般不建议使用,是指向当前JSP程序本身的对象this,其实是Java.lang.Object的实例对象。

4)pageContext(PageContext):也是域对象,代表当前的页面范围,在当前页的页面范围内获取数据,可以通过该对象获取其他8个内置对象。方法有setAttribute(),getAttribute()。
具体讲:pageContext对象可以直译为“页面上下文”对象,代表的是当前页面运行的一些属性,它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法,pageContext对象提供了对JSP页面所有的对象以及命名空间的访问;提供利润page范围的存取方法:
Object getAttribute(String name)
void removeAttribute(String name)
void setAttribute(String name,Object value)
并且可以通过pageContext获得其他8个对象:
getException方法返回exception隐式对象 ;
getPage方法返回page隐式对象;
getRequest方法返回request隐式对象;
getResponse方法返回response隐式对象;
getServletConfig方法返回config隐式对象;
getServletContext方法返回application隐式对象;
getSession方法返回session隐式对象;
getOut方法返回out隐式对象;

5)exception(Throwable):exception对象是java.lang.Trowable类的实例,用来处理JSP文件在执行时所有发生的错误与异常,可以和page指令一起使用,通过指定某一个页面为错误处理页面,对错误进行处理。使用的前提是把isErrorPage=”true”。方法有:getMessage()。

6)request(HttpServletRequest):与Servlet中的request一样,没有区别;方法有setAttribute(),getAttribute()。

7)response(HttpServletResponse):与Servlet中的response一样,没有区别,方法有addCookie(),getWriter()。

8)application(ServletContext):就是ServletContext对象,方法有setAttribute(), getAttribute()

9)Session(HttpSession):就是HttpSession对象,方法有:setAttribute(),getAttribute()。

JSP四个域对象
1,pageContext
在Servlet中不能使用它,它表示的当前页面中可以使用,是最小的范围,可以使用pageContext对象操作所有域对象,在getAttribute(),setAttribute()、removeAttribute()三个方法中多添加一个参数,int scope来指定范围。在PageContext类中包含四个int类型的常量表示四个范围:
PAGE_SCOPE:pageContext范围
REQUEST_SCOPE:request范围
SESSION_SCOPE:session范围
APPLICATION_SCOPE:application范围
void setAttribute(String name, Object value, int scope):设置数据到指定的范围中,例如:pageContext.setAttribute(“hello”,“hello world”, PageContext.REQUEST),这个方法调用等同与:request.setAttribute(“hello”, “hello world”);
Object getAttribute(String name, int scope):获取指定范围的数据;
void removeAttribute(String name, int scope):移除指定范围的数据;
Object findAttribute(String name):在所有范围内查找数据,依次为page、request、session、application。如果在前一个范围内查找到数据,那么就返回,而不会在到下一个范围中去查找。

2,request域对象:是一次请求范围

3,session域对象:一次会话范围

4,ServletContext域对象:整个web应用范围。

Servlet中有三个域,而JSP有四个域。JSP中多了pageContext的域范围,代表当前页面范围。

五,JSP标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成JSP页面难以维护,常用的标签有:

1)<jsp:useBean>:使用一个ID和一个给定作用范围和同一ID的JavaBean相关联;
2)<jsp:setProperty>:设置JavaBean的属性值;
3)<jsp:getProperty>:取得JavaBean的属性值;
4)<jsp:include>:页面的包含(动态包含),属性:page 要包含的页面;
5)<jsp:forward>:在JSP的页面中完成转发,属性:page 要转发的页面;
将请求传递给另一个JSP页面
6)<jsp:param>:需要写在的中间,属性:name:参数名称 value:参数值。

<jsp:include>标签与include指令的比较:
标签是动态引入,标签涉及到2个JSP页面会被翻译成2个servlet,这2个servlet内容在执行时进行合并;而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行的合并。概括起来差别有:
1)执行时间上:
<%@ include file=“relativeURI”%> 是在翻译阶段执行;
<jsp:include page=“relativeURI” flush=“true” /> 在请求处理阶段执行。

2)include动作在页面中声明的变量不能用于另一个文件,除非将变量放在request,session,application作用域中;而include指令中,当前页面和被包含的页面可以共享变量。
3)include动作修改被包含的文件,会立即生效;include指令修改被包含的文件,但不会立即生效,除非修改的是主页面或者删除主页面的类。

不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现在重复的HTML全局架构标签,否则输出给客户的内容将会是一个格式混乱的HTML文档。

0 0
原创粉丝点击