JSP 编译指令和动作指令



jsp中的指令分为两大类,编译指令和动作指令。

编制指令 <%@ inlcude file=” “%>和 <%@ page 属性1 属性2 %>  和<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>
动作指令 <jsp:include><jsp:forward><jsp:useBean>

一、JSP编译指令

(1)page

是针对当前页面的指令

pag指令常用属性

属性 定义
language =“语言” 主要指定JSP 容器 要用什么语言来编译JSP页。JSP 1.2 规范中指出,目前只可以使用Java 语言,不过未来不排除增加其他语言,如C、C++、Perl 等等。默认值为Java语言
extends = “基类名” 主要定义此JSP 网页产生的Servlet 是继承哪个父类
import= “包名” 定义此JSP 网页可以使用哪些Java类库
session=”true或false” 决定此JSP 网页是否可以使用session 对象。默认值为true
buffer=”none或size in kb” 决定输出流(output stream) 是否有缓冲区。默认值为8KB 的缓冲区
autoFlush=”true 或false” 决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常(Exception)。默认值为true
isThreadSafe=”true 或 false” 告诉JSP 容器,此JSP 网页是否能同时处理多个请求。默认值为true,如果此值设为false, 转义生成的Servlet会实现SingleThreadModel接口。
info =”text” 表示此JSP 网页的相关信息
errorPage=”error_url” 表示如果发生异常错误时,网页会被重新指向指定的URL
isErrorPage=”true或false” 表示此JSP Page 是否为专门处理错误和异常的网页
contentType = “ctinfo” 表示MIME 类型和JSP 网页的编码方式,其作用相当于HttpServletResponse接口的setContentType()方法

 (2)include

        include指令可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。include命令既可以包含jsp页面也可以包含静态文本。编译指令语法如下:

<%@ include file="要导入的jsp页面或文本文件" %>

     

    使用include指令注意事项: 
          (1)file名不能为依变量,下面的例子是错误的

<%! String url="header.jsp" %>
<%@ include="<%=url %>"

           (2)file名后面不能传入参数,下面的例子是错误的

<%@ include file="header.jsp?username=abc" %>

          (3)file的路径是相对于此jsp的路径。

(3)taglib指令

     taglib指令允许页面使用用户定制的标签。
     taglib指令的语法如下:
    <%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>

taglib指令有三个属性:

  • uri

    :该属性唯一地标识和前缀(prefix)相关的标签库描述符,可以是绝对或者相对的URI。这个URI被用于定位标签库描述符的位置。

  • tagdir

    :该属性指示前缀(prefix)将被用于标识安装在/WEB-INF/tags/目录或其子目录下的标签文件,一个隐含的标签库描述符被使用。
    下面三种情况将发生转换(translation)错误:
    属性的值不是以/WEB-INF/tags/开始。
    属性的值没有指向一个已经存在的目录。
    该属性与uri属性一起使用。

  • prefix

    :定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。以jsp:,jspx:,java:,javax:,servlet:,sun:和sunw:开始的前缀被保留。前缀的命名必须遵循XML名称空间的命名约定。在JSP 2.0规范中,空前缀是非法的

   编译指令的语法格式如下:

<%@ 编译指令名 属性名1="属性值" 属性名2="属性值" ...  %>

eg: taglib指令用于引入一些特定的标签库,语法格式:

<%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>

eg:使用struts标签库

<%@ taglib prefix="s" taglib="/struts-tags" %>

JSP动作指令

1、forward

     使用<jsp:forward>的格式为 <jsp:forward page="filename">

  举个例子:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="UTF-8"%>
   
<jsp:forward page = "login.jsp">
	<jsp:param value = "zoeng" name = "userName"/>
	<jsp:param value = "jikexueyuan" name = "password"/>
</jsp:forward>

login.jsp的源码如下所示:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<%
	String userName = request.getParameter("userName");
	String password = request.getParameter("password");
	out.print(userName);
	out.print("<br/>");
	out.print(password);
%>

</body>
</html>

有几点需要说明一下,

  1. <jsp:forward>动作指令之后的代码是不会执行的(可以试一下)。
  2. 使用动作指令跳转的页面,浏览器的地址还是跳转之前的页面地址

2、include

<jsp:include> :动态包含

举个例子:


index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<jsp:include page = "header.html"></jsp:include>
<jsp:include page = "body.jsp">
	<jsp:param value = "red"  name = "bgcolor" />
</jsp:include>
</html>

header.html:

<head>
<meta charset="UTF-8">
<title>include</title>
</head>

body.jsp:
<body bgcolor = "<%= request.getParameter("bgcolor") %>">
</body>

<%@include%>:静态包含

                 静态和动态include详细解释:https://blog.csdn.net/zfl589778/article/details/56494523

        由上可以总结出:

       对于静态包含,<%@include%>,中包含的文件,只是简单的嵌入到主文件中,就是在jsp页面转化成Servlet时才嵌入到主文件中,因为运行的结果是只生成了一个Servlet。

       而对于动态包含<jsp:incude>,如果被包含文件是动态的,那么就会生成两个Servlet,也就是被包含文件也要经过jsp引擎编译执行生成一个Servlet,两个Servlet通过request和reponse进行通信。如果被包含的文件是静态的,那么这种情况和<%@include>就很相似,只生成了一个Servlet,但是他们之间没有进行简单的嵌入,而依然是通过request和reponse进行的通信。

3、useBean

参考博客:https://blog.csdn.net/qq_26525215/article/details/52072428

JavaBean其实就是一个遵循特定写法的java类,但是必须具有如下特点

      1.这个java类必须具有一个公开的无参构造函数

      2.属性必须私有化,类必须公开

      3.私有化的属性必须通过public类型的方法暴露给其他程序,并且方法的命名也必须遵守一定的命名规范---getXxx和setXxx方法。

     把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。实际上JavaBean就是一个java类,在这个java类中就默认形成了一种规则——对属性进行设置和获得。而反之将说ava类就是一个JavaBean,这种说法是错误的,因为一个java类中不一定有对属性的设置和获得的方法(也就是不一定有set和get方法)。

在JSP中访问JavaBean的语法:

       1、声明JavaBean对像-必须使用完整类名:

     <jsp:useBean id=“someBean” class=“package.SomeBean” scope=“page”/>

       以上声明相当于: SomeBean someBean = new SomeBean(); pageContext.setAttribute(“someBean”,someBean);

      scope的可选值为:page|request|session|application

     需要说明的是:一般情况下,我们保留<jsp:useBean/>的body部分为空,如果不为空,则只有初始化此Bean时执行,如:         <jsp:useBean id=“person” class=“cn.Person”> 这是body部分,只会在初始化时执行一次 </jsp:userBean>

   <jsp:useBean>标记:

    <jsp:useBean id="name" class="classname" scope="page|request|session|application"/>

     id:代表jsp页面中的实例对象 通过这个对象引用类中的成员,如,id="wq", wq.成员();

     class: 代表JavaBean类,如: class="com.Test",引用com包中的Test类

     scope:指明了javabean的生存时间。默认为page范围。 当声明了一个Bean并将它放到某个范畴之后,在同一个范围内再次使用<jsp:useBean../>将不再创建。而是直接给你返回已经创建过的Bean的实例。此过程可以通过查看容器翻译的源代码得知。

      2、访问JavaBean的属性:

    <jsp:setProperty name=“someBean” property=“name” value=“Tom”/>

    <jsp:getProperty name=“someBean” property=“name”/>

   也可以在页面上使用Java代码直接访问它的属性和其他方法。

举个例子:

register.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>录入注册信息</title>
</head>
<body>
	<form action = "do_register.jsp"  method = "post">
	用户名:<input type = "text" name = "userName" />
	password:<input type = "text" name = "password" />
	<input type = "submit" value = "submit" />
	</form>
</body>
</html>

do_register.jsp:

<html>
<head>
<meta charset="UTF-8">
<title>处理提交的内容</title>
</head>
<body>
<jsp:useBean id = "user" class = "com.jikexue.jsp.UserEntity" ></jsp:useBean>
<jsp:setProperty property = "userName" name = "user" />
<jsp:setProperty property = "password" name = "user" />
<%	
	String userName = request.getParameter("userName");
	String password = request.getParameter("password");
	out.print(userName);
	out.print("<br/>");
	out.print(password);
%>
<br/>
<jsp:getProperty property="userName" name = "user" />
<jsp:getProperty property="password" name = "user" />
</body>
</html>

<jsp:setproperty>详解

转载自:https://blog.csdn.net/IT_COOKIE_SAM/article/details/55518753?locationNum=6&fps=1

jsp:setProperty动作有下面四个属性,如下表:

属性 描述
name name属性是必需的。它表示要设置属性的是哪个Bean。
property property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
value value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。
param param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

    getProperty:获取Bean的属性的值并将之转化为一个字符串,将其插入到页面中。

   Jsp:getproperty有两个必须属性:

   Name:表示Bean的名字

   Property:表示提取哪一个属性的值。

      在sun的JSP参考中提到,如果你使用<jsp:getProperty>来检索的值是空值,那么NullPointerException将会出现,同时如果使用程序段或表达式来检索其值,那么在浏览器上出现的是null(空).

发布了14 篇原创文章 · 获赞 1 · 访问量 5533

猜你喜欢

转载自blog.csdn.net/Vpn_zc/article/details/81177374
今日推荐