`
senton
  • 浏览: 206608 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

jsp常用的指令与标签

    博客分类:
  • Web
阅读更多

1.
Jsp指令:
语法:<%@ 指令名 属性="值"%>.

jsp指令负责告诉jsp引擎如何把页面翻译成servlet.

page指令:用于定义jsp页面的各种属性,最好放在jsp页面的起始位置,属性有language,extends,import,session,buffer,autoFlush,isThreadSafe,info,isErrorPage,contentType,pageEncoding,isELIgnored.

include指令:在后面与include标签对比讲解.

2.
out对象:这个out不是servlet里面的out.是PageContext.getWriter()方法返回的out对象.
实验1:
<%
 out.println("first");
 response.getWriter("second");
%>
结果如下:
second
first
为什么out的后输出?这是因为jsp引擎先把内容放到PageContext.getWriter()方法返回的out对象的缓冲区.写完后再交给servlet的response.getWriter()方法写到servlet引擎提供的缓冲区,缓冲区再把内容写到客户端.

实验2:
<%
 ServletOutputStream sos = response.getOutputStream();
 sos.println("hehe");
%>这里加上一个换行

运行结果报错了,为什么?上面说过,out最终会调用response.getWriter()方法返回的out对象,我们这个实验首先使用了response.getOutputStream()方法,记住我们写的所有的jsp页面都会翻译成Servlet的,然而在这里的代码中输出换行符时又去调用了response.getWriter()方法,而response的getWriter()和getOutputStream()不能同时在一个方法里面调用,所以报错了.注意:用了ServletOutputStream 就不能再使用out对象了.

实验3:
<%
 RequestDispatcher rd = application.getRequestDispatcher("/test.html");
 rd.forward(request,response);
%>在这里回车

结果报告有错.为什么?
实际上当调用forward方法时,是去找了一个缺省的servlet,这个缺省的servlet使用的是getOutputStream()方法,而这里的回车使用的是jsp的out对象打印出来的.这个out对象最终要使用的是getWriter(),而上面说过response的getWriter()和getOutputStream()不能同时使用,所以报错了.当然在前面加上回车也是一样的效果.

3.
pageContext对象:->request->session->application
pageContext对象代表此jsp页面,它是通过调用JspFactory.getPageContext方法返回的,在自定义标签用的非常多.
可以使用pageContext得到其他8大内置对象.

实验4:
这是一个换行
<%
 1.//RequestDispatcher rd = application.getRequestDispatcher("/test.html");
   //rd.forward(request,response);
 2. pageContext.forward("/test.html");
%>
第一种方法会出错,第二种不会,为什么?
第一种出错的原因我们在上面说过,第二种为什么不会出错呢?我们说过,pageContext包装了其他八大隐式对象,所以它的forward方法内部也是调用了request.getRequestDispatcher的forward方法,但是在执行RequestDispatcher的forward方法之前调用了out.clear()方法.这样就不会出错了,去掉前面的换行,在%>后面加一个换行,两种方法都会报错.

几个常用的方法:
setAttribute(String name,Object object);
setAttribute(String name,Object object,int scope);scope代表指定的范围(page,request,session,application)
getAttribute(String name);
getAttribute(String name,int scope);
removeAttribute(String name);
findAttribute(String name);此方法依次从page,request,session,appllication这四个范围去找,直到找到为止.如果没找到则返回null.

4.
jsp标签:
<%@ include file=""%>:静态包含,a包含b,编译过程中a会受到b的jsp指令的影响,例如,b中有一个isELIgnored指令,会影响b,效率更高,不仅仅是引入输出内容,引入共同的的编译元素,不会检查所含文件的变化,适用于包含静态页面
<jsp:include page=""/>:动态包含,a包含b,a在执行过程中调用b,page的值可以是变量.它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
<jsp:forward>:此forward调用的pageContext的forward然后return了
<jsp:param>:用于给上面两个标签传参数.

以下是jsp2.0里面才可以使用的标签:
<jsp:scriptlet>:相当于<%%>
<jsp:scriptlet>
 int x = 3;
 if(x < 5){
  out.println(x);
 }
</jsp:scriptlet>
会报错.因为在此使用了"<"这个符号,必须用
<![CDATA[
 代码
]]>

<jsp:declartion>
</jsp:declaration>相当于<%!%>

<jsp:expression>
</jsp:expression>相当于<%=%>

<jsp:directive.指令名 属性="值"/>相当于<%@ page 属性="值"%>

<%@ page contentType="text/html;charset=gb2312"%>
<%
 out.println("中国"); 
%>

<%
 response.setContentType("text/html;charset=gb2312");
 out.println("中国");
%>
的效果是不一样的.前者打印出了"中国"两字,后者打印出来的是乱码,为什么呢?
前者告诉jsp引擎按照指定的contentType去把jsp的内容翻译成servlet,因为charset指定为了gb2312,所以正常的输出了.
后者为什么是乱码呢?这是因为jsp源文件的中文字符在翻译成Servlet源文件时已经不是其正确的unicode编码了,当服务器把这两个字符按照gb2312输出正文时,出现的就是乱码了.

<jsp:setProperty name="date" property="time" param="time"/>

<jsp:setProperty name="date" property="time" value="<%=Integer.parseInt(request.getParameter("time"))%>"/>
意思是一样的.

自省机制:<jsp:setProperty name="date" property="*"/>
这种形式用于对javaBean实例对象中的多个属性赋值,它表示将请求消息中的参数逐一与javaBean实例对象中的属性进行比较,如果两个属性同名,则将该参数值赋值给该属性.注意:必须是同名的才赋值.

<jsp:useBean id="date" class="java.util.Date" scope="request"/>
这个jsp标签的含义为:
在指定范围(这里是request,如果不写,默认为page)内去找一个名字为date的对象,如果找到了则把它取出来,如果没找到则实例化一个新的类型为java.util.Date的名字为date的对象,并将它保存在request中,

<jsp:useBean id="date" class="java.util.Date" scope="request">
......
</jsp:useBean>
如果上面的语句这样写,其含义则为:
在指定范围(这里是request,如果不写,默认为page)内去找一个名字为date的对象,如果找到了则把它取出来,"......"地方的代码不再执行.如果没找到则实例化一个新的类型为java.util.Date的名字为date的对象,并将它保存在request中,还将执行"......"地方的代码.

5.
forward() 与redirect()的区别?
答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

 

分享到:
评论

相关推荐

    jsp学习常用标签!!!!!

    - **声明标签库**:在JSP页面顶部使用`&lt;%@ taglib %&gt;`指令来声明自定义标签库。 - **prefix**:指定前缀,用于引用该标签库中的标签。 - **uri**:指向标签库描述符(TLD)文件的URI。 - **编写Tag Handler类**:...

    jsp常用标签

    JSP常用标签 JSP(Java Server Pages)是一种动态网页技术,允许开发者在网页中嵌入Java代码,以生成动态内容。JSP提供了一些常用的标签,用于实现不同的功能。本文将介绍JSP中五种常用的标签:Include、Forward、...

    jsp标签大全

    【JSP标签大全】 JSP(JavaServer Pages)是一种服务器端的动态网页技术,它允许开发者将HTML代码与Java代码结合起来,以实现更强大的功能。其中,JSP标签是JSP的重要组成部分,提供了丰富的功能,包括调用...

    JSP 标准标签库(c标签库)

    **JSP标准标签库(JSTL)与C标签库详解** JSP(JavaServer Pages)标准标签库(JSTL)是Java EE平台的一部分,它提供了一套标准的标签来处理常见任务,如迭代、条件判断、XML处理等,以简化JSP页面的编写,提高代码...

    jsp自定义嵌套标签

    ### jsp自定义嵌套标签:定义与使用详解 在JavaServer Pages(JSP)技术中,自定义标签是扩展其功能的一种强大手段。而自定义嵌套标签,则是在此基础上进一步提升灵活性和重用性的机制。本文将深入探讨自定义嵌套...

    jsp2.0 自定义标签和自定标签函数

    在JSP页面中,通过`指令`引入自定义标签库,并使用`属性...&lt;/tag-name&gt;`的格式调用自定义标签。 **二、自定义标签函数** 自定义标签函数是在JSP 2.0中引入的一种新的特性,它允许开发者像使用EL(Expression ...

    jsp页面java标签库

    核心标签库中的标签通常分为不同的类别,包括动作标签、指令标签和脚本元素等。 动作标签主要用于页面流控制、数据迭代、页面跳转等。例如,&lt;jsp:forward&gt;标签可以将用户请求转发到新的页面或资源;&lt;jsp:param&gt;用于...

    JSP中文入门基础教程(包括常用标签)

    2. **JSP指令**: 用于配置页面信息,如导入包、定义页面编码等。例如,`; charset=UTF-8" pageEncoding="UTF-8"%&gt;`。 3. **JSP声明**: 用`! %&gt;`包围,可以在页面范围内声明变量或方法。 ### JSP生命周期 JSP经过...

    JSP扩展——自定义标签

    在JavaServer Pages (JSP)技术中,...标记处理类负责处理标签的逻辑,而TLD文件提供了元数据,将自定义标签与处理类关联起来。这个过程使得开发者可以创建具有特定功能的可重用组件,增强JSP页面的灵活性和可维护性。

    jsp自定义标签大全.rar

    在JSP页面中,可以通过`&lt;jsp:taglib&gt;`指令引入自定义标签库,然后使用定义的标签,如`&lt;mytag:customTag attribute="value"&gt;`。 本资源“jsp自定义标签大全”包含了一系列示例和详细教程,涵盖了从基础到高级的...

    jsp 自定义标签实例

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;jsp:taglib&gt;`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`&lt;myTag:myTag attribute1="value1" attribute2="value2"&gt;`。 在给定...

    JSP标准标签库

    - 标签是核心标签库中常用的输出标签,它能够输出表达式的结果,并提供了可选的属性如value(要输出的值)、default(当value为null时显示的默认值)和escapeXml(是否转义XML特殊字符)。 2. 变量操作标签:用于...

    JSP自定义标签实例与详细讲解

    本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP自定义标签概述 JSP自定义标签是类似于HTML标签的自定义组件,但它们提供了更强大的功能,可以封装Java代码,提供复杂的业务逻辑。自定义标签通过TLD(Tag...

    jsp 自定义标签的使用

    3. **在JSP页面中使用**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,然后就可以像使用内置标签一样使用自定义标签了。 二、分页封装 分页是网页应用中常见的需求,通过自定义标签可以方便地实现。...

    开发自定义JSP标签

    3. **JSP页面使用**: 在JSP页面中,我们通过`&lt;%@ taglib %&gt;`指令导入自定义标签库,并使用定义的标签。例如: ```jsp , World!"/&gt; ``` 在`studyRemark`目录中,你可以找到详细的教程和示例代码,这些资源将帮助你...

    掌握jsp自定义标签chm版

    在JSP页面中,可以通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,然后像使用标准JSP标签一样使用自定义标签。 7. **优点** - **提高可维护性**:自定义标签将业务逻辑与显示逻辑分离,使得代码更易于理解和维护。 -...

    动态网页JSP实验:标签

    1. JSP基本语法:包括脚本元素(scriptlets、表达式、声明),JSP指令(page、include、taglib)以及JSP动作标签(jsp:useBean、jsp:setProperty等)。 2. JSP自定义标签生命周期:了解标签的初始化、开始、结束等...

    JSP标签JSP 语法的基本原理

    **5.4 - 5.14 JSP指令和元素** JSP还包括一系列的指令,如`&lt;jsp:include&gt;`, `&lt;jsp:forward&gt;`, `&lt;jsp:setProperty&gt;`等,它们提供了更高级的功能,如页面包含、转发、操作bean属性等。例如: - **Include指令**:`...

    JSP标签样例

    - **松耦合**:标签与页面逻辑分离,便于组件的独立开发和测试。 5. **示例** `jsptag05`可能是一个包含JSP自定义标签样例的文件,可能包括了创建自定义标签的全过程,例如定义了一个用于格式化日期的自定义标签`...

    jsp常用方法整理,包括servlet等

    ### JSP常用方法整理:深入理解与应用 JSP(JavaServer Pages)是Sun Microsystems公司推出的服务器端技术,用于创建动态网页。它结合了HTML、XML标记语言与Java编程语言的功能,使得在Web应用程序中嵌入Java代码...

Global site tag (gtag.js) - Google Analytics