JSP入门第二章——Jsp语法之脚本、指令、动作元素

Jsp脚本元素
包含三个部分:声明,脚本段,表达式
(1)、声明:用于声明在其它脚本元素中可以使用的变量(等价于java类中的成员变量)和方法(成员方法)
具体代码形式: <%! Declaration;……%>

示例:
<%! int i=0;%>
<%!
public void method(){
}
%>
(2)、脚本段:是一段java代码
具体代码形式: <%……%>(相当于Servlet中service方法中)
例子:
<%
if(){
}else{
}
%>

(3)、表达式:java语言中完整的表达式,把表达式的值输出到网页上
具体代码形式: <%……%>
例子:<%= new java.util.Date().toLocaleString() %>

可以做个简单的例子。
创建一个Web项目,在WebRoot路径下新建一个welcome.jsp

  运行环境:JDK1.7  Tomcat7.0
  开发环境:myeclipse10.7

这里写图片描述

具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


  <head>
    <title>Welcome</title>
  </head>
  <body>
    <!-- 声明 -->
    <%! 
        //声明一个name变量
        String name;
        //声明一个方法
        public void setName(String otherName){
            name = otherName; 
        }

        public String getName(){
            return name;
        }

    %>

    <!-- 脚本 -->
    <%
       //对name成员变量赋值,通过调用声明的setName()方法
       setName("张三");
       //out是Jsp的隐藏对象
       out.println("欢迎" + getName());
    %>

    <!-- html代码 -->
    <br>

    <!-- 表达式 -->
    <%=getName() %>

  </body>
</html>

测试结果:
这里写图片描述

JSP指令元素(Directive)

JSP指令(<%@……%>)用来设置和整个JSP网页相关的属性,如网页的编码方式和脚步语言等。

JSP指令的一般语法形式:
<%@ 指令名 属性=“值” %>

常用的三种指令:
page
include
taglib

page指令
page指令作用于整个jsp页面,定义了许多与页面相关的属性,这些属性将被用来和jsp容器通信.
语法:<%@page attr1=“value1” attr2=“value2”%>
例如:
<%@ page language =”java” %>
<%@ page import =”java.io.*,java.util.Hashtable” %>
<%@ page content_type=”text/html; charset=UTF-8” %>

属性列表

这里写图片描述
这里写图片描述

include指令
JSP可以通过inlude指令来包含其他文件的内容,被包含的文件可以是JSP文件或者HTML文件。

Include指令的语法:
<%@ include file=“目标组件的绝对URL或着相对URL”%>

用include指令包含的文件被看作是静态包含。
jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(被引入的页面先被引入后编译)。

结合之前的welcome.jsp做个例子,同样在WebRoot下新建一个taginclude.jsp
具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ include file="welcome.jsp"%>


<br>
<% 
   setName("李四");
   out.print("include页面欢迎  " + getName());
%>

发现通过include指令后可以在taginclude.jsp页面直接应用welcome.jsp中声明的方法,这是因为include指令将整个welcome.jsp页面内容全部包含进来后,servlet分析器才开始编译taginclude.jsp转换的Servlet,最后Servlet容器加载编译后的字节码,返回响应结果,所以可以概括为先包含后编译。

发现通过include指令后可以在taginclude.jsp页面直接应用welcome.jsp中声明的方法,这是因为include指令将整个welcome.jsp页面内容全部包含进来后,servlet分析器才开始编译taginclude.jsp转换的Servlet,最后Servlet容器加载编译后的字节码,返回响应结果,所以可以概括为先包含后编译。

测试结果:
这里写图片描述

这里写图片描述

taglib指令

JSP支持标签技术,使用标签功能可以简化代码,使视图页面简洁美观。
taglib指令用来指明JSP页面内使用的标签库。
taglib两个重要属性,uri:类库的地址;prefix:标签的前缀。

做个简单的例子,在WebRoot下新建一个taglib.jsp
代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
  <head>
    <title>taglib</title>
  </head>
  <body>
       <c:forEach var="num" begin="2" end="100" step="2">
             ${num}<br>
       </c:forEach>
       <!-- 
         相当于
         <%
         for(int num = 2; num <= 100; num = num + 2){
             out.println(num + "<br>"); 
         }
         %>
        -->
  </body>
</html>

测试结果:
这里写图片描述

JSP指令介绍完,接下来介绍Jsp动作(或称行为)
Jsp动作是对常用的JSP功能的抽象和封装,包括两种,一种是自定义标签(自定义动作)和标准JSP动作。

Jsp动作格式为

<jsp:elements {attribute=”value”}*/>

动作元素-forward
语法:

<jsp:forward page=“转发的目标组件的绝对URL或相对URL”>

(1)、JSP源组建和目标组件共享HttpServletRequest和HttpServletResponse对象;
(2)、JSP源组建中的所有输出数据都不会被发送到客户端。
(3)、JSP源组件中<jsp:forward>标签以后的代码不会被执行。
举个简单的例子。为了方便管理,在WebRoot下新建一个jspactions包,然后在包中新建source.jsp,具体代码如下:
这里写图片描述

<%@ page contentType="text/html; charset=UTF-8"%><html>
<head>
<title>Source Page</title>
</head>
  <body>
    <p>
        This is output of source.jsp before forward.
        <%
           System.out.println("This is output of source.jsp before forward.");
        %>
    </p>
    <jsp:forward page="target.jsp"></jsp:forward>
    <p>
        This is output of source.jsp after forward.
        <%
           System.out.println("This is output of source.jsp after forward.");
        %>
    </p>
  </body>
</html>

再新建target.jsp,具体代码如下:

<%@ page contentType="text/html; charset=UTF-8"%><html>
<head>
<title>Target Page</title>
</head>
 <body>
    <p>
        Hello,
        <!-- 获取username参数值 -->
        <%=request.getParameter("username")%>
    </p>
 </body>
</html>

在浏览器地址栏输入:
http://localhost:8080/Jsp16_10_5/jspactions/source.jsp

这里写图片描述

因为没有传递参数,所以在target.jsp页面中获取到的username参数值为null。可以对source.jsp做个修改,如图:

这里写图片描述

测试结果:

这里写图片描述

动作元素-include
include行为用于运行时包含某个文件。如果被包含的文件为Jsp,则会先执行Jsp程序,然后再把执行后的结果包含进来。归纳为:先编译后包含。与include指令的执行过程是相反的。
语法:

<jsp:include page=“” flush=“false”>

可以继续结合welcome.jsp举个简单例子。在WebRoot新建一个jspinclude.jsp
具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>My JSP 'jspinclude.jsp' starting page</title>
  </head>
  <body>
    Jsp Include<br>
    <jsp:include page="welcome.jsp"></jsp:include>
  </body>
</html>

在浏览器地址栏输入:http://localhost:8080/Jsp16_10_5/jspinclude.jsp

结果如下:
这里写图片描述

结合include指令简单分析下。
会发现,在jspinclude.jsp中试图调用welcome.jsp中声明的方法时会失败,而在taginclude.jsp中可以直接调用welcome.jsp声明的方法,说明两者包含的时机不同。jspinclude.jsp只能包含welcome.jsp运行过后返回的结果页面,而taginclude.jsp能够包含welcome.jsp为运行时的整个页面。所有会出现以上的不同现象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值