JSP脚本元素

JSP脚本元素

1.JSP页面的基本结构

普通的HTML标记符:由客户的浏览器显示
JSP标签(指令标签、动作标签等)
变量和方法的声明
Java的程序片段
Java表达式:由服务器负责计算,把结果转化为字符串,再由浏览器显示

其中我们把后三个基本结构形成的部分称为JSP的脚本部分

示例:

<body><font size=1>
<p>请输入三角形的三边长度
<br>
<form action="text.jsp" method=post name=form>
<input type="text" name="boy">
<input type="submit" value="送出" name=submit>
</form>
<%! double a[] =new double[3];
	String answer=null;
%>
<% int i = 0;
	boolean b =true;
	String s = null;
	double result = 0;
	double a[] = new double[3];
	String answer = null;
	s=request.getParameter("boy");
	if(s != null){
		StringTokenizer fenxi = new StringTokenizer(s,",,");
		while(fenxi.hasMoreElements()){
			String temp = fenxi.nextToken();
			try{
				a[i]=Double.valueOf(temp).doubleValue();
				i++;
			}catch(NumberFormatException e){
				out.print("<br>"+"请输入数字字符");
			}
		}
		if(a[0]+a[1] > a[2] && a[0]+a[2] >a[1] && a[1]+a[2] >a[0] && b==true){
			double p =(a[0]+a[1]+a[2]) /2;
			result = Math.sqrt(p*(p-a[1])*(p-a[2]));
			out.print("面积:"+result);
		}else{
			answer="不能构成一个三角形";
			 out.print("<br>"+answer);
		}
	}
%>
<p>您输入的是三边:
<br><%=a[0] %>
<br><%=a[1] %>
<br><%=a[2] %>
</font>
</body>

运行效果:image-20210530165444043

2. 变量和方法的声明:

2.1 声明变量:

在“<%! %>”标记符间声明变量;变量的类型可以是Java语言允许的任何数据类型,这些变量称为JSP页面的成员变量。

示例1:

<body bgcolor=gray><font size=1>
<!-- 声明变量 -->
<%! int i=0;%>
<% i++; %>
<p>您是第<%=i %>个访问本网站的客户
</font>
</body>

示例2:(解决线程安全问题)

<body>
<!-- 声明变量 -->
<%! Integer number = new Integer(0); %>
<%	synchronized(number){
	int i = number.intValue();
	i++;
	number=new Integer(i);
}
%>
<p>您是第<%=number.intValue() %>个访问本网站的客户
</body>

2.2 声明方法

在“<%! %>”标记符间声明方法,该方法在整个JSP页面有效,但是在该方法内定义的变量只在方法内有效

示例1:(通过synchronized方法操作成员变量实现计数器)

<!-- 声明方法 -->
<%! int number = 0; 
synchronized void countPeople(){
	number++;
}%>
<% countPeople(); %><!-- 在程序片段中调用方法 -->
<p><p>您是第<%=number %>个访问本网站的客户

示例2:(使用Java的输入输出流技术,把计数保存到文件中)

<!-- 声明方法 -->
<body BGCOLOR=cyan><font Size=1>
	<%! int number=0;
	synchronized void countPeople(){	//计算访问次数的同步方法
		if(number==0){
			try{
				FileInputStream in = new FileInputStream("count.txt");
				DataInputStream dataIn = new DataInputStream(in);
				number = dataIn.readInt();
				number++;
				in.close();
				dataIn.close();
			}catch(FileNotFoundException e){
				number++;
				try{
					FileOutputStream out = new FileOutputStream("count.txt");
					DataOutputStream dataOut = new DataOutputStream(out);
					dataOut.writeInt(number);
					out.close();
					dataOut.close();
				}catch(IOException ee){	}
			}catch(IOException ee){}
		}else{
			number++;
			try{
				FileOutputStream out = new FileOutputStream("count.txt");
				DataOutputStream dataOut = new DataOutputStream(out);
				dataOut.writeInt(number);
				out.close();
				dataOut.close();
			}catch(FileNotFoundException e){}
			catch(IOException ee){}
		}
	}
%>
<% countPeople(); %>
<p><p>您是滴<%=number%>个用户
</body>

2.3 Java程序片段

在“<%! %>”标记符间声明Java程序片段

示例:(打印一周7天的信息)

<!-- Java程序片段 -->
<h2>
	Display weekdays in Chinese:<br/>
	<%
	DateFormatSymbols Dfs = new DateFormatSymbols(Locale.CHINA);
	String[] weekdays = Dfs.getWeekdays();
	for(int i = 1; i<weekdays.length;i++){
		out.println(weekdays[i]+"<br/>");
	}	
	%>
</h2>

运行结果:

image-20210530170648320

2.4 表达式:

在"<%= %>“之间插入表达式(不可插入语句,且“<%”和”="之间不可以有空格)。这个表达式必须可以求值,值由服务器负责计算,并将结果用字符串形式发送到客户端显示。

示例:

<!-- 表达式 -->
<h2>
	Current time:<%= new Date() %><br/>
	Random number:<%= Math.random() %><br/>
	Simple string:<%="Hello,world" %><br/>
	Simple statement:1+1=<%=1+1 %> <br/>
	Visit implicit object:remote host is <%=request.getRemoteHost() %>
</h2>

运行结果:image-20210530171020672

2.5 JSP中的注释

HTML注释:
JSP注释:<%–注释内容–%>
JSP引擎忽略JSP注释,即在编译JSP页面忽略JSP注释

示例:

<p>请输入三角形三边a,b,c,的长度:
<br>
<!-- 以下是HTML表单,向服务器发送三角形三边的长度 -->
	<form action="text7.jsp" method=post name=form>
	<p>请输入三角形边a的长度:
	<input type="text" name="a">
	<br>
	<p>请输入三角形边b的长度:
	<input type="text" name="b">
	<br>
	<p>请输入三角形边c的长度:
	<input type="text" name="c">
	<br>
	<input type="submit" value="送出" name=submit>
	</form>
<%-- 获取客户提交的数据 --%>
	<%
	String string_a=request.getParameter("a"),
	string_b = request.getParameter("b"),
	string_c = request.getParameter("c");
	double a=0,b=0,c=0;
	%>
<%-- 判断字符串是否是空对象,是空对象就初始化 --%>
	<% if(string_a == null){
		string_a="0";
		string_b="0";
		string_c="0";
	} %>
<%-- 求出边长,计算面积 --%>
	<% try{
		a=Double.valueOf(string_a).doubleValue();
		b=Double.valueOf(string_b).doubleValue();
		c=Double.valueOf(string_c).doubleValue();
		if(a+b>c&&a+c>b&&b+c>a){
			double p =(a+b+c)/2.0;
			double mianji = Math.sqrt(p*(p-a)*(p-b)*(p-c));
			out.println("<br>"+"面积:"+mianji);
		}else{
			out.println("<br>"+"无法构成三角形");
		}
	}catch(NumberFormatException e){
		out.println("<br>"+"请输入数学字符");
	} %>

2.6 JSP指令标签

2.6.1 page指令:定义整个JSP页面的属性和属性值

​ 格式:

<%@ page 属性1="属性1的值" 属性2="属性2的值"...%>
Page指令的属性有:
(1)language属性:用于定义JSP页面使用的脚本语言,该属性的值目前只能取“java”
(2)import属性:为JSP页面导入java核心包中的类
(3)contentType属性:定义页面响应的MIME类型和页面字符的编码
<%@ page contenType="text/html" charest="UTF-8"%>
(4)session属性:用于设置是否需要使用内置的session对象,默认是true
(5)buffer属性:用来指定out设置的缓冲区的大小或者不使用缓冲区,默认是8kb,也可以是none
(6)auotFlush属性:指定缓冲区被填满时,缓冲区是否会自动刷新,默认值是true。当auotFlush属性取值false,如果缓冲区填满,就会出现缓存溢出异常。当buffer值是none是,auotFlush属性就不能设置为false
(7)errorPage属性:用于设置当前页面出现错误时所指向的页面。IsErrorPage用于设置当前页面为出错页面,默认值是false。若将当前页面设置为出错页面,设置isErrorPage=true

示例:(求商,若除数为0,页面报错,跳转到出错信息页面)

表单输入页面:
<body bgcolor="#FFFFFF">
	<div align="center">
		<form action="Divide.jsp" method="post">
			<p>---整数除法---<p>
				被除数<input type="text" name="value1">
				除数<input type="text" name="value2">
			</p>
			<p>
				<input type="submit" name="Submit" value="计算">
			</p>
		</form>
	</div>
</body>
除法运算页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="error.jsp"	 pageEncoding="UTF-8"%>
<body bgcolor="#FFFFFF">
	<center>
		<br>
		<h1>
			<%
			int dividend = 0;
			int divisor = 0;
			int result = 0;
			try{
				dividend = Integer.parseInt(request.getParameter("value1"));
			}catch(NumberFormatException nfex){
				throw new NumberFormatException("被除数不是整数");
			}
			try{
				divisor = Integer.parseInt(request.getParameter("value2"));
			}catch(NumberFormatException nfex){
				throw new NumberFormatException("除数不是整数");
			}
			result = dividend / divisor;
			out.println(dividend+"/"+divisor+"="+result);
			%>
		</h1>
		<br>
		<br>
		<br>
		<a href="javascript:history.back();">返回</a>
	</center>
</body>
显示错误信息页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" isErrorPage="true"
    pageEncoding="UTF-8"%>
    <!--isErrorPage的作用是设置当前页面为错误页面,当在别的页面设置ErrorPage="erroe.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>Compute error</title>
</head>
<body bgcolor="#FFFFFF">
	<div align="center">
		<br>
		<br>
		<h1>错误信息</h1>
		<hr>
		<p>
		<h3><%=exception.toString() %></h3>
		<br>
		<br>
		<br>
		<a href="javascript:history.back();">返回</a>
	</div>
</body>
</html>
2.6.2 include指令
include用来包含一个文件,告诉容器在翻译阶段需要将当前JSP文件和其他外部文件合并。可以再JSP文件的任何地方使用这个指令。include指令中文件名是一个相关的URL。
格式:<%@ include file="relative url" >

示例:(使用多页面包含一个通用的头模块和尾模块的内容)

header.jsp
    <%!
int pageCount = 0;
void addCount(){
	pageCount++;
}
%>
<% addCount(); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>The include Directive Example</title>
</head>
<body>
<center>
<h2>The include Directive Example</h2>
<p>This site has been visited <%= pageCount %> times.</p>
</center>
<br/><br/>
</body>
</html>
footer.jsp
    <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>The include Directive Example</title>
</head>
<body>
<br/><br/>
<center>
<p>Copyright 2010</p>
</center>
</body>
</html>
main.jsp
    <body>
<%@ include file="header.jsp" %>
<center>
<p>Thanks for visiting my page.</p>
</center>
<%@ include file="footer.jsp" %>
</body>

运行效果:image-20210601155520596

2.7 JSP动作标签

2.7.1 include动作标签
写法:<jsp:include page="文件的名字"/>
    <jsp:include page="文件的名字"></jsp:include>

示例:

Hello.txt:
<h4>你好,天天向上
<br>学习JSP需要有Java的基础
<br>学习JSP基本语法
<h4/>
    
image.html:
<img src="B.jpg">
text9_1.jsp:
<body bgcolor=Cyan><font Size=1>
<p>加载的文件:
	<jsp:include page="Hello.txt"></jsp:include>
<p>加载的图像:
	<jsp:include page="image.html"></jsp:include>
</body>
2.7.2 param动作标签
经常和 jsp:include、jsp:forward、jsp:plugin 标签一起使用
格式:
<jap:param name="名字" value="指定给param的值"

示例:(加载9_2_1时,将获取param标签中computer的值;9_2用于执行9_2_1)

text9_2.jsp:
<body>
<p>加载文件效果:
<jsp:include page="text9_2_1.jsp">
	<jsp:param name="computer" value="300" />	
</jsp:include>
</body>
text9_2_1.jsp:
<body>
	<%
		String str = request.getParameter("computer");// 获取值
		int n = Integer.parseInt(str);
		int sum = 0;
		for(int i=1; i<=n;i++){
			sum = sum+i;
		}
	%>
	<p>1<%=n %>的连续和时:
	<br>
	<%=sum %>
</body>
2.7.3 forward动作标签
标签的含义是重定向一个HTML文件、JSP文件,或者是一个程序片段
语法:
    <jsp:forward page={"relativeURL"|"<%= expression%>"}/>

示例:(从forwardFrom.jsp提交userName参数到forwardTo.jsp的过程)

forwardFrom.jsp:
<body>
	<jsp:forward page="forwardTo.jsp">
		<jsp:param value="Jason.D" name="userName"/>
	</jsp:forward>
</body>
forwardTo.jsp:
<body>
	<%
	String userName = request.getParameter("userName");
	String outStr = "welcome";
	outStr+=userName;
	out.println(outStr);
	%>
</body>
2.7.4 useBean动作标签
1.用法:
//创建一个由class属性指定的类的实例,将他绑定到其名字由id属性给出的变量上
<jsp.useBean id="" class="" scope=""/>  
2.属性用法:

​ (1)id:命名引用该Bean的变量

​ (2)class:指定的Bean的完整包名

​ (3)scope:指定Bean在那种上下文内可用,可以取四个值:

​ ①默认值是page,表示只可在当前页面可用

​ ②request表示在当前的客户请求内有效

​ ③session表示对当前HttpSession内的所有页面有效

​ ④application表示对所有具有相同ServletContext的页面有效

​ (4)type:指定引用该对象的变量的类型。必须是Bean类的名字、超类名字、该类所实现的接口名字之一。变量名字是由id属性指定的。

​ (5)beanName:指定Bean的名字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值