不要急,我与你一起学习JSP——JSP的基础语法
Posted 神密者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不要急,我与你一起学习JSP——JSP的基础语法相关的知识,希望对你有一定的参考价值。
近几天,我的 ADSL 上不了网了。几乎在家里,只能买碟看片。世界上有什么大事,论坛中有多少 MM 灌水我都不知道。本来说,这帖要在周三时发出来。没想到的是,昨天联通公司才把网解决。10010的客服,我从回家开始打,一直打到夜里12点,都没人理。哎。。。
上次我们讲到了 JSP 的指令操作。这次,我们要好好谈谈最后遗留下来的 JSP 动作。为什么要单用一章来讲。主要有两个原因,一个是上次说的内容太多,怕接受不了。还有一点就是,JSP 动作要了解的内容不是一般的多,而是二般的多。所以要单给出一章节来好好谈论谈论。
如同上次所云,JSP 动作用来控制 JSP 引擎的行为,执行一些标准常用的 JSP 页面的动作。好像和 JSP 指令相近。指令用于通知,不直接显示出来,而动作是要控制,并对页面进行制作。
JSP动作包括以下几点内容:
1、jsp:include:动态且可控的 include 加载,比那个指令 include 要灵活。
2、jsp:useBean:使用 JavaBean 控件。
3、jsp:setProperty:设置 JavaBean 属性。
4、jsp:getProperty:输出 JavaBean 属性
5、jsp:param:用于传递参数,必须与其它支持这参数的标签一起使用。
6、jsp:forward:引导请求进入新的页面。
7、jsp:plugin:插入一个 applet 或 Bean。
一、jsp:include
1、说明:
jsp:include 动作在即将生成的页面上动态地插入文件,它在页面运行时才将文件插入,对被插入文件进行处理。
2、格式:
<jsp:include page="文件名" flush="true" />
或
<jsp:include page="文件名" flush="true">
<jsp:param name="参数名 1" value="参数值 1" />
<jsp:param name="参数名 2" value="参数值 2" />
……
</jsp:include>
参数说明:
(1)page="文件名"
制定需要插入文件的 URL,该参数是一个相对路径。
(2)flush="true"
只能用true,没得说。
(3)<jsp: param>
<jsp: param> 子句用于把值传到到要插入文件当中。
在相应的页面中,只要加入如下语句就可以将其值取出:
request.getParameter("参数名");
3、与 include 区别:
jsp:include 动作是动态的。当插入文件时,JSP 引擎不把插入文件和原 JSP 文件合并成一个新文件,而是在运行时把被插入文件包含进来。插入者与被插入都双方全都是独立的。被插入文件被改动了,会被判断出来,并重新进行编译。
include 指令是静太的,把被插入文件插入到当前位置后,再进行编译,一旦有改动,无法得知。
4、举个例子吧:
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<p><b>两种游戏机的感觉如何?</b></p>
<jsp:include page="head.jsp" flush="true">
<jsp:param name="chanshu1" value="PS3" />
<jsp:param name="chanshu2" value="PSVita" />
</jsp:include>
</body>
</html>
head.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
String game1 = request.getParameter("chanshu1");
String game2 = request.getParameter("chanshu2");
%>
<p><%=game1%>很贵!</p>
<p><%=game2%>更贵!</p>
</body>
</html>
运行一下看看结果:
二、jsp:forward 动作
1、说明:
jsp:forward 动作停止当前页面的执行,转向别一个页面。在执行中,JSP引擎将不再处理当前页面剩余的内容,并把缓存区清空(等于这一页白折腾了)。好处在于,客户看到的是原始的页面地址,而实际显示得却是别一个页面的内容。有于利隐藏展示页面的地址,来得瑟一下。
2、格式:
<jsp:forward page="文件名" />
或
<jsp:forward page="文件名">
<jsp:param name="参数名1" value="参数值 1" />
<jsp:param name="参数名2" value="参数值 2" />
……
</jsp:forward>
参数说明:
(1)page="文件名"
指明要定向跳转的文件或URL。
(2)jsp:param
同 jsp:include 动作中的 jsp:param 动作。就是传值。接收方法如上。
3、举个例子:
我们把 jsp:include 例子中 index.jsp 页面里的 include 改成 forward 看看结果,head.jsp 不用改,代码如下:
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<p><b>两种游戏机的感觉如何?</b></p>
<jsp:forward page="head.jsp">
<jsp:param name="chanshu1" value="PS3" />
<jsp:param name="chanshu2" value="PSVita" />
</jsp:forward>
</body>
</html>
head.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
String game1 = request.getParameter("chanshu1");
String game2 = request.getParameter("chanshu2");
%>
<p><%=game1%>很贵!</p>
<p><%=game2%>更贵!</p>
</body>
</html>
结果是:
index.jsp中的“两种游戏机的感觉如何?”没有了。只有 head.jsp 中的信息了。
三、jsp:plugin 动作
1、说明:
jsp:plugin 动作的功能是将服务器端的 Java 小应用程序(Applet)或 JavaBean 组件下载到浏览器端去执行,相当于在客户端浏览器插入 Java 插件。
jsp:plugin 动作将会动态生成 <object> 或 <embed> 元素标记,以使浏览器的 Java 插件运行 Applet。同时,他也会指定对象是 applet,或者 Java Bean。也有可能是 Java Class 字节码文件(.class),更有甚者是要下载的 Java 插件。
2、格式:
<jsp:plugin
type="bean|applet"
code="保存类的文件名"
codebase="类路径"
[name="对象名"]
[archive="相关文件路径"]
[align="bottom | top | middle | left | right"]
[height="displayPixels"]
[width="displayPixels"]
[hspace="leftRightPixels"]
[vspace="topBottomPixels"]
[jreversion="Java环境版本"]
[nspluginurl="供 NC 使用的 plugin 加域位置"]
[iepluginurl="供 IE 使用的 plugin 加载位置"]
<jsp:params>
<jsp:param name="参数名 1" value="参数值 1">
<jsp:param name="参数名 2" value="参数值 2">
</jsp:params>
[<jsp:fallback>错误信息</jsp:fallback>]
</jsp:plugin>
参数说明:
(1)type="bean | applet"
指定插件对象的类型是 Bean 还是 Applet(二选一,请作答)。
(2)code="保存类的文件名"
要执行的 Java Class 字节码文件(*.class)的名字。这个文件必须保存在由下面要介绍的 codebase 属性所指定的目录当中。
(3)codebase="类路径"
这是指定 Java Class 字节码文件(*.class)文件的位置。没有写的话,就默认为当前 JSP 页面的路径。
(4)name="对象名"
bean 或 applet 实例的名字
(5)archive="相关文件路径"
预装一些需要使用的 Java Class 字节码文件(*.class)文件,各文件用“,”号分开,用于提高 applet 的性能。
(6)Align="bottom | top | middle | left | right"
指定显示的对像和 applet 的位置。
(7)height="displayPixels" width="displayPixels"
好理解,展示的长宽的尺寸。
(8)hspace="leftRightPixels" vspace="topBottomPixels"
从英文字母的翻译可以看出,一个设置水平间距,一个设置垂直间距。
(9)jreversion="Java环境版本"
Applet 或者 Java Bean 他们所运行的 Java Runtime Environment (JRE)的版本。默认版本是1.1。
(10)nspluginurl="供 NC 使用的 plugin 加域位置"
这个是来指定 Netscape Navigator 用户所需要的 JRE 的下载地址,是一个URL地址。
(11)iepluginurl="供 IE 使用的 plugin 加载位置"
这个如上,不同的是,这里指得浏览器是 IE。
(12)jsp:params 动作
和 jsp:include 或 jsp:forward 动作中的 jsp:params 动作一样,就是传个值。
(13)<jsp:fallback>错误信息</jsp:fallback>
说白了,就是给自己一个后路。如果出错了如何解决。
东西多,用得少。到时候要用到其它属性的话,可以回来查一下列表。
3、举个例子
我们首先找了一个 Java applet 小应用程序放到与 index.jsp 同级的目录下(Clock.class)。
之后修改 index.jsp 中的代码为:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<p><b>两种游戏机的感觉如何?</b></p>
<jsp:plugin type="applet" code="Clock.class" width="900" height="600">
<jsp:fallback>为什么会这样?</jsp:fallback>
</jsp:plugin>
</body>
</html>
之后,运行网站,查看结果:
感觉有点像 HTML 中的 <applet>。但是,它比 HTML 的 <applet> 更强大,更灵活。很多做过 JSP 开发的人都知道,Java Bean,在早期经典的 Java MVC 项目中作为 数据及业务逻辑操作。所以,强大的不是一轻半点。下面是在客户端的代码样子:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<p><b>两种游戏机的感觉如何?</b></p>
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="900" height="600" codebase="http://java.sun.com/products/plugin/1.2.2/jinstall-1_2_2-win.cab#Version=1,2,2,0">
<PARAM name="java_code" value="Clock.class">
<PARAM name="type" value="application/x-java-applet;">
<COMMENT>
<EMBED type="application/x-java-applet;" width="900" height="600" pluginspage="http://java.sun.com/products/plugin/" java_code="Clock.class"/>
<NOEMBED>
为什么会这样?
</NOEMBED>
</COMMENT>
</OBJECT>
</body>
</html>
四、jsp:useBean 动作
1、说明
终于谈到 Bean了。 Java Bean 是一种可以重复使用的程式组件,他本身就是 Java 的类,所以要用 Java 来编写。而 jsp:Bean 动作就是来调用这个程式组件的。其实感觉有点像上例一样,只不过,上例的 Java Applet 小应用程序只是完成一种客户端的显示效果,而 Bean 是要作为服务器上进行功能处理,对于我们是不可见的。
虽然我们以后才会接触到 Java Bean,但是我们现在可以先说明一下它是什么玩意儿。Java Bean 将网站的表示层(显示给客户看的页面,用JSP来编写。)与业务逻辑层公开,把业务及数据的处理交给 Bean 来完成。最后,再由JSP来调用 Bean 提供的结果,并显示给客户。这样,降低了程序的复杂性,有利于日后的维护及再开发。
如果还不明白,我换一种少儿不宜且重口味的方式来说吧。JSP 就是我们看见的健康的美女,而 Bean 就是美女体内的动作的器官。一个美女的健康与否,是要看体内运行的结果所展现的。体内运行的好,是 Bean 在动作;外表的美是调用 Bean 动作的结果……大家明不明白,我反正是明白了。。。
无所谓,以后再要见到的。。。
2、格式
<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" /></jsp:useBean>
如果带参数则:
<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" />
<jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />
...
<jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />
</jsp:useBean>
如果要得到 bean 返回来的属性值则:
<jsp:getProperty name="bean 名称" property="属性名称" />
3、举个例子
因为,这次的例子我们要编写一下 Java 的开发环境。所以,我们需要对系统环境进行一下修改。
修改如下:
(1)、右击“我的电脑”,选择“属性”,打开属性窗口。
(2)、在打开的“属性”窗口中选择“高级系统设置”
(3)、之后在“系统属性”面板中点击“高级”标签,并选择“环境变量”
(4)在打开的“环境变量”中对“系统变量”进行设置:
1) 选择变量“Path”,并单击“编辑”按钮。在其变量值中,加入 “Java 路径\\bin”,如“;L:\\Program Files\\Java\\jdk1.6.0_23\\bin;”,然后点击确定按钮。
2)用上面的方面,点击来对环境变量“CLASSPATH”进行设置(如果没有“CLASSPATH”,那就点击“新建”按钮,直接建一个)。
之后,设置变量值为 .; Java 路径\\jre\\lib\\rt.jar; 如“.;L:\\Program Files\\Java\\jdk1.6.0_23\\jre\\lib\\rt.jar;”:
3)一直点击确定后退出。可能,你需要重启一下计算机(有的是,有的不是,最好大家都重启一下)。
好了,我们现在打开记事本,开始编写 Java Bean。键入下面的 Java 代码,并保存为 Box.java:
package bean;
import java.io.*;
public class Box
int length, width, height;
public Box()
length = 1;
width = 1;
height = 1;
public void setlength(int newlength)
length = newlength;
public void setwidth(int newwidth)
width = newwidth;
public void setheight(int newheight)
height = newheight;
public int getlength()
return length;
public int getwidth()
return width;
public int getheight()
return height;
public int BoxVolume()
return length * width * height;
public double BoxArea()
return 2 * (length * width + width * height + length * height);
好了,打开运行对话框,快捷键:Ctrl + R,之后输入 cmd 回车。
之后在打开的字符命令行中,通过命令,进入到 Box.java 所保存的目录之下,并输入 javac Box.java 进行编译。
若是没有错误,将会出现下面的情况:
在Box.java所在的目录下会出现一个新的文件“Box.class”。这就是我们编写好,并编译的 Java Bean 文件。
好了,现在全齐了。之后,我们开始来写 JSP 代码了。打开 NetBeans 编辑器,将行成的 Box.class 文件复制于 网站目录下的 WEB-INF文件夹的 classes 文件夹内的 bean 文件夹下。
现在成了。我们来改一下 index.jsp 文件的代码,代码如下:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h3>正方体计算</h3>
<form method="post" action="head.jsp">
<p>正方体的长:<input type="text" name="BoxLength" style="width: 20px;" /></p>
<p>正方体的宽:<input type="text" name="BoxWidth" style="width: 20px;" /></p>
<p>正方体的高:<input type="text" name="BoxHeight" style="width: 20px;" /></p>
<p>
<input type="submit" value="计算" name="submit" />
<input type="reset" value="重置" name="reset" />
</p>
</form>
</body>
</html>
head.jsp 代码如下:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="bean.Box"%>
<jsp:useBean id="Box" class="bean.Box" scope="request"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Box b = new Box();
b.setlength(Integer.parseInt(request.getParameter("BoxLength")));
b.setwidth(Integer.parseInt(request.getParameter("BoxWidth")));
b.setwidth(Integer.parseInt(request.getParameter("BoxHeight")));
%>
<p>长方体的体积:<%=b.BoxVolume()%></p>
<p>长方体的面积:<%=Box.BoxArea()%></p>
</body>
</html>
运行一下,先在 index.jsp 中输入数据:
之后点击计算按钮显示出结果:
我们在编译器当中,看到目录下有很多东西。这些东西都对于服务器开发很有用处。下次,我们花一天的时间来说明一下。今天就先到这里了。
以上是关于不要急,我与你一起学习JSP——JSP的基础语法的主要内容,如果未能解决你的问题,请参考以下文章