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为运行时的整个页面。所有会出现以上的不同现象。