Java EE入门教程系列第二章JSP(三)——JSP指令与动作组件

2.3 指令与动作组件

2.3.1 page指令

page指令的基本语法为:

<%@ page 属性1="属性1的值" 属性2="属性2的值"···%>

属性值记得用“”或者‘’括起来,这样写比较规范,不易出错。

举例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

这个指令是用来设置整个JSP页面的相关属性和功能的,作用于整个JSP页面,包括使用include指令而包含在该JSP页面中的其他文件,但是不能作用于动态的包含文件,比如对使用<jsp:include>包含的文件就是无效的。(两个include语法是不同的,后面会介绍)

合法的page属性有:import,contentType,pageEncoding,session,buffer,autoFlush,info,errorPage,isErrorPage,isThreadSafe,language,extends等,下面重点介绍几个常用的:

1)language属性:定义JSP页面的脚本语言,目前属性值只能是java

举例:

<%@ page language="java" %>

2)import属性:为JSP页面引入java核心包中的类,JSP默认import属性已经有:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*

举例:
 

<%@ page import="java.io.*","java.util.Date" %>

3)contentType属性:定义页面响应的MIME类型和页面字符的编码,属性值一般为“MIME类型”或者“MIME类型;charset="编码”,默认值是"text/html;charset=ISO-8859-1"。补充知识:charset和pagecoding的区别。

举例:

<%@ page contentType="text/html;charset=GB2312" %>

4)session属性:用于设置是否需要使用内置的session对象,属性值true或false,默认前者。(这个后面会专门介绍,这里知道属性值即可)

举例:

5)buffer属性:内置输出流out负责将服务器的某些信息或运行结果发送到客户端显示,buffer用来指定out设置的缓冲区大小或者不使用缓冲区(取值为none),默认值是8kb.

举例:

<%@ page buffer="24kb" %>

6)autoFlush属性:用于指定当out的缓冲区被填满时,缓冲区是否自动刷新,可以取值true或false,默认前者。当属性值设置为false时,如果缓冲区填满,就会出现缓存溢出异常(这时可以采用手动方式刷新,即out.flush()方法),当buffer设置为none时,autoFlush不能设置为false。

7)isThreadSafe属性:用来设置JSP页面是否可多线程访问。

8)info属性:为页面准备一个字符串,可以在页面中用getServletInfo()方法(当JSP被转译成java文件时,转译成的类是Servlet的一个子类)获得这个字符串。

举例:

<%@ page info="Hedy" %>

9)errorPage属性:当这个属性页面产生异常时,系统会重定位到它属性值的那个页面进行异常处理。(这一块我看别的博客有不同的说法,但是照书上的能运行,别的博客会出错,不知道是服务器版本的原因还是什么)

举例:

处理错误的proExcp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center><h1>出错了!</h1></center>
<blockquote>您访问的页面正在维护中···</blockquote>
</body>
</html>

产生错误的errorPage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page errorPage="proExcp.jsp" %>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%! int i=0; %>
<%=2/i %>
errorPage.jsp:
   <%@ page isErrorPage="true" %>
   <%= exception %>
</body>
</html>

2.3.2 include指令

include指令会在JSP页面被编译成Servlet时引入其中包含的文件,包含的过程是静态的,也就是说包含的文件会插入到<%@ include %>的地方,但是被包含的文件既可以是静态的HTML文件,也可以是动态的JSP文件,如果是后者的话,会先执行被包含的文件,然后才执行主JSP文件。基本语法为:

<%@ include file="relative URL" %>

注意是相对路径,如果路径以“/”开头,那么该路径等同于参照JSP应用的上下关系路径,如果路径以文件名或者目录开头,那么路径就是当前JSP所在的路径。

举例:在include.jsp中插入computer.jsp文件

include.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>请输入一个正数,单击按钮求这个数的平方根。
<%@ include file="computer.jsp" %>

</body>
</html>

computer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page errorPage="proExcp.jsp" %>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="" method="post" name="form">
<input type="text" name="ok"><br>
<input type="submit" name="submit" value="计算">
</form>
<%
String a=request.getParameter("ok");
if(a==null)
{
	a="1";
}
try{
	double number=Integer.parseInt(a);
	out.println("计算结果:"+Math.sqrt(number));
}catch(NumberFormatException e){
	out.println("请输入数字");
}
%>
</body>
</html>

结果为:

2.3.3 taglib动作组件

后面会详细介绍,这里只需要知道它也是指令之一即可。

2.3.4 动作组件

动作组件是以XML语法格式出现的,所以更加符合页面与业务逻辑分离的编程理念。(这一块不需要你再去学一下XML再回来,你对HTML有一点了解这里就能看懂了)。常见动作组件有:(动作组件标签也要成对出现,下面都只是写的一半,看看给的代码实例就能知道了)

<jsp:include>:也是引入其他文件,但是和前面介绍的实现方法完全不同。

<jsp:forward>:从当前页面转向另一个页面。

<jsp:param>:在前两个动作组件之间传递参数信息。

<jsp:plugin>:在当前页面插入一个特定程序。

<jsp:useBean>:在当前页面实例化一个JavaBean的类。

<jsp:setProperty>/<jsp:getProperty>::设置/获取JavaBean对象的成员属性。

先介绍几个,没介绍的后面还会专门介绍。

1、include动作组件

它是在执行时才对包含的文件进行处理,所以引入的文件都是最新的,是一个包含动态对象的操作,可以翻看一下前面的include体会一下不同,语法格式为:
 

<jsp:include page="filename" flush="true">

举例:在include2.jsp中引入copyright.jsp

include2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>include动作组件举例</h2>
<br>
<jsp:include page="copyright.jsp" flush="true"/>

</body>
</html>

copyright.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3><font color="pink">Hedy Fighting!</font></h3>
</body>
</html>

结果为:

2、forward动作组件

和include不同的是forward动作会让当前页面完全显示引入的页面,自己的不显示,可以把上面的代码修改对应的那一行看看结果,语法格式为:

<jsp:forward page="filename">

3、param动作组件

不能单独使用,语法格式为:

<jsp:include page="path" flush="true">
<jsp:param name="paramName" value="值"/>
</jsp:include>

或者

<jsp:forward page="filename">
<jsp:param name="paramName" value="值"/>
</jsp:forward>

举例:用sendpara.jsp传递参数;用procpara.jsp接收参数

sendpara.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h4>带参数的加载文件效果:</h4>
<jsp:include page="procpara.jsp">
<jsp:param name="start" value="1"/>
<jsp:param name="end" value="100"/>
</jsp:include>
</center>

</body>
</html>

procpara.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
String start=request.getParameter("start");
String end=request.getParameter("end");
int s=Integer.parseInt(start);
int e=Integer.parseInt(end);
int sum=0;
for(int i=s;i<=e;i++)
	sum+=i;
%>
<p>从<%=s %>~<%=e %>的连续和是:<%=sum %>
</body>
</html>

结果:

4、plugin动作组件

语法格式为:

<jsp:plugin
type="bean|applet" code="classFileName codebase="classFileDirectoryName"
</jsp:plugin>

type用来指定引入的对象是什么类型的文件,code指定类文件的名称,必须是以.class结尾的文件,codebase指定这个类存在的路径位置,如果把这个类和JSP文件放在一起可以不写codebase属性。

举例:创建一个名为Clock.java的Applet小程序,这个程序可以实时显示时间。创建完毕后便以这个文件,生成Clock.class文件,然后把这个文件复制到项目的Web文件夹。创建页面文件showclock.jsp,在其中使用plugin组件加入Applet小程序。

Clock.java

import java.applet.*;
import java.awt.*;
import java.util.*;
public class Clock extends Applet implements Runnable{
Thread t1,t2;
public void start() {
	t1=new Thread(this);
	t1.start();
}
	public void run() {
		t2=Thread.currentThread();
		while(t2==t1) {
			repaint();
			try {
				t2.sleep(1000);
			}
			catch(InterruptedException e) {}
		}
	}
	public void paint(Graphics g) {
		Calendar cal=new GregorianCalendar();
		String hour=String.valueOf(cal.get(Calendar.HOUR));
		String minute=String.valueOf(cal.get(Calendar.MINUTE));
		String second=String.valueOf(cal.get(Calendar.SECOND));
		g.drawString(hour+":"+minute+":"+second,20,30);
	}
}

showclock.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<h4>显示系统时间</h4>
<jsp:plugin type="applet" code="Clock.class" codebase="Clock">
<jsp:fallback>
如果插件在客户端不能正常显示,你就会看见我
</jsp:fallback>
</jsp:plugin>
</body>
</html>

感觉写了一天???黑人问号,开始怀疑这个进度什么时候能写完这个系列了,溜了溜了~~~

猜你喜欢

转载自blog.csdn.net/qq_40996041/article/details/83986620