JSP页面语速可分为脚本元素、指令元素与动作元素三种类型
脚本元素:嵌入到jsp页面中的Java代码
指令元素:控制JSP引擎处理特殊代码实现特殊功能
动作元素:连接所要使用的组件
1. JSP指令元素
指令元素形式:
<%@指令名 属性=“属性值” 属性2=“属性值”%>
主要包括page指令 include 指令 taglib指令
下面详细介绍这三种类型的指令
- Page指令
page指令用于定于JSP文件中的全局属性,描述了和页面相关的指示
在一个页面中page指令可以出现多次,但是一个属性只可以出现一次!!
主要格式:
<%@ page language="脚本语言"
extends="类名"
session="true|false"
buffe"none|8kb|自定义缓冲区大小"
info="页面信息"
isThreadSafe="true|false"
isELIgnored="true|false"
import="Java包列表"
pageEncoding="utf-8"%>
- Include 指令
include 用于在编译JSP的时候插入一个包含文件。包含的过程是静态的,包含的文件可以是HTML\JSP\JAVA等
<%@ include file = "URL"%>
file的属性值是相对与jsp文件的url,一般来说是网路服务器的根目录
- taglib指令
taglib指令用于指示JSP页面使用的标签库
<%@ taglib prefix = "tagPrefix" uri="tagURL"%>
prefix 属性标示自定义标签的前缀,uri属性指定描述标签库位置的url
JSP脚本元素
JSP脚本元素是用来插入JAVA代码的,这些代码将出现在由当前JSP页面生成的servlet中。其中‘表达式’、‘脚本’、‘声明’统称为jsp脚本元素
- 声明
格式:
<%! JAVA声明%>
举例:
<%!
String userName = "司娟"
String password = "123456"
%>
也可以声明方法和类
<%!
public static int tt(int n){
if.......
}
%>
- 表达式
表达式用于把Java数据直接输出到页面上
格式:
<%=表达式%>
举例:
<body>
Current time :<%= new java.util.Data()%>
</body>
- 脚本程序
脚本是任意的Java代码段。如果需要使用更加复杂的操作与控制,只靠声明是远远不够的,JSP脚本可以把任意的Java代码插入到Servlet中。
<%
.....任意的Java代码
%>
举例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<table>
<%
String name[] ={"liming","xiaowang","zangfei","xinxin"};
for(int i = 0;i<name.length;i++){%>
<tr><td><%=name[i]%><td></tr>
<% }
%>
</table>
</body>
</html>
效果:

JSP动作元素
JSP动作元素利用 xml语法格式的标记来控制Servlet引擎的行为,利用JSP动作元素,可以做到动态插入文件,重用javaBean组件,把用户重定向到另外的页面,为Java插件生成HTML代码.
JSP基本动作元素包括以下几种:
jsp: include 在页面被请求时引入一个文件(区别于page指令元素的页面创建时静态引入)
jsp: useBean 寻找或实例化一个JavaBean
jsp: setProperty 设置javaBean的属性
jsp: getProperty 输出某个JavaBean的属性
jsp: forward 把请求转到另一个新的页面
jsp: plugin 根据浏览器的类型为Java 插件生成OBJECT 或 EMBED标记
!!!!!!动作元素与指令元素不同,动作元素是在客户端请求时动态执行的,每次有客户端请求时可能都会执行一次,而指令元素在编译使其被编译执行。他只会被编译一次
-
jsp:include 用法与<%@include file = “”%>相似,不做赘述
-
<jsp:useBean>
<jsp:useBean id = "name" classname = "package.class">
简单说明以下,classname 属性对应的值是一个javaBean的类名,id 属性对应的值是classname指定的类的一个变量名。除了这两个属性之外还有三个属性
scope 指定这个Bean的可使用范围:
- page: 当前页面
- request:当前客户端请求有效,保存在HTTPRequest对象中
- session 表示Bean对当前HttpSesion内的所有页面都有效
- application表示该Bean对具有相同ServletContext的页面都有效)
useBean很重要,因为只有当当前范围没有已经存在的Bean对象时才会新建对象,否则,useBean动作的一切都将被忽略而使用已经存在的Bean
应用举例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
#使用useBean创建Bean对象并初始化
<jsp:useBean id = "student" class="Topten.Student" scope="page">
<%
student.setClass("一班");
student.setMajor("软件工程");
student.setName("宋小宝");
%>
</body>
</jsp:useBean>
<h2>显示javaBean中的信息</h2>
<hr>
<%
String myName = student.getName();
String myMajor = student.getMajor();
String myClass = student.getmyClass();
%>
<table>
<tr>
#使用 Bean对象
<td>姓名:<%=myName%></td>
<td>专业:<%=myMajor%></td>
<td>班级:<%=myClass%></td>
</tr>
</table>
</html>
- <jsp: forward>
<jsp:forward>动作把请求重定向到另外的页面,jsp:forward动作只有一个属性page,page属性包含的是一个相对URL,page的值可以直接给出,也可以在请求的时候动态计算。
<jsp:forward page = "URL" />
利用forword与java实现一个简单的登陆验证
首先是登陆界面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="test.jsp" method="post" id ="form1" name="form1">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="usename"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="password"></td>
</tr>
<tr><input type="submit" name="Submit" value="登陆"></tr>
</table>
</form>
</body>
</html>

其次是中途用于跳转的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
#获取请求,用于跳转
String useName = request.getParameter("usename");
String password = request.getParameter("password");
if(useName.equals("yao")&&password.equals("123")){
%>
#成功则跳转到success,否则跳转到error
<jsp:forward page="success.jsp"/>
<%}else{%>
<jsp:forward page="error.jsp"/>
<%}%>
</body>
</html>
运行程序,输入账号密码,成功会转到成功的页面,失败会转到失败的页面,是不是很简单?我们仅仅使用了一个动作元素就可以完成所有的跳转任务!


<jsp: setProperty>与<jsp: getProperty>
<jsp:setProperty>与<jsp:getProperty>都是设置JavaBean的属性,所以必须要和<jsp:useBean>搭配使用
格式:
<jsp:setProperty>
name="beanInstanceName" #javaBean对象实例名称
{
property="*"
property="propertyName"|param="paramName"
property="property" value="{string|<%=exoression%>}"
}
该动作有以下四个属性:
- name 指定需要设置属性的JavaBean实例名称
- property: 指定要设置的属性名称,这里有一点需要注意:当把property设置为“符号星”的时候,JSP容器会把系统ServletRequest对象中的参数逐个列举出来,检查这个JavaBean的属性是否和ServletRequest对象中的参数具有相同的名称,如果有,就自动将ServletRequest中的同名参数值传给对应的javaBean
- value 直接设定值为某一个值,不可以和param同时使用
- param 将对应的属性值设置成url附带的参数名
实战练习:
利用<jsp:setProperty>与<jsp:getProperty>设置属性与获取属性
首先是登陆界面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="test.jsp" method="post" id ="form1" name="form1">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>专业:</td>
<td><input type="text" name="major"></td>
</tr>
<tr>
<td>班级:</td>
<td><input type="text" name="grade"></td>
</tr>
<tr><td><input type="submit" name="Submit" value="提交"></td></tr>
</table>
</form>
</body>
</html>
实现一个提交页面

接下来实现提交后的页面,通过<jsp:setProperty>设置对应属性,分别通过调用属性方法与<jsp:getProperty>两种方法来获取对应的属性值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<jsp:useBean id="student" class="Topten.Student" />
<jsp:setProperty name="student" property="*"/>
姓名:<%=student.getName()%>
班级:<%=student.getGrade()%>
专业:<jsp:getProperty name="student" property="major"/>
</body>
</html>
当输入内容点击提交时,会显示出已经提交的内容


出现乱码是编码的问题,不是重点不考虑
网友评论