JSP脚本元素
- JSP声明
声明是用来在jsp页面中声明变量或定义方法的语句,以<%开头,以%>结尾的标签,举例如下:
<% int count=0;
String str="hello"; %>
- JSP小脚本
JSP小脚本简单说就是纯粹的java代码片段,是以<%开头,以%>结束的标签,举例如下:
<% count++; %>
- JSP表达式
语法结构为:
<%= expression %>
JSP表达式中的元素将会被自动转化成String类型,可以理解为引用一个变量的值,它将会被嵌入在JSP中进行显示,例如:
<html>
<head><title>A Comment Test</title></head>
<body>
<p>
Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
ps:JSP表达式的%和=之间不能有空格,并且不能以;结束
JSP注解语法为:
<%-- This is JSP comment --%>
JSP指令
语法结构:
<%@ directive attribute="value" %>
JSP有三种类型的指令标签,每个指令能影响servelt类的整体结构,如下图所示:
每中类型的指令均含有多种的属性(attribute),下面将对每种类型指令的属性分别介绍
page类型常用指令表:
include类型有两种形式,分别是page和file,如下所示:
<%@ include file=”relativeURI ”%>
<%-- flush必须为true,false为缺省值--%>
<jsp:include page=”relativeURI ” flush=”true”/>
file是将指定的文件进行编译并在当前页面转换成servlet之前融合进当前的页面,即在当前页面还没开始生成之前,比如一些静态文件header.jsp
page 在请求处理阶段执行,让您将文件插入正在生成的页面
注意:file属于JSP指令,page属于JSP动作
- taglib类型
JSP通过这个类型引入标准标签库,可以简化我们对代码的编写
JSP动作
- include(讲解见上)
- useBean
标签表示用来在JSP页面中创建一个bean实例并指定它的名字以及作用范围(不写默认page范围)
语法结构:
<%-- 最简单的语法 --%>
<jsp:useBean id="name" class="package.class" />
<%-- 完整语法 --%>
<jsp:useBean id="name" scope="page | request | session | application" typeSpec />
<%-- 其中typeSpec有以下几种可能的情况:--%>
class="className" | class="className" type="typeName" | beanName="beanName" type="typeName" | type="typeName"
注意:必须使用class或type,而不能同时使用class和beanName。beanName表示Bean的名字,其形式为“a.b.c”
- setProperty
该动作设置一个bean的属性,在这个动作之前,该bean必须存在,举例
<html>
<head>
<title>Using JavaBeans in JSP</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>
<jsp:useBean id="test" class="action.TestBean" />
<%-- value和param必须有一个,有区别 --%>
<jsp:setProperty name="test"
property="message"
value="Hello JSP..." />
<p>Got message....</p>
<jsp:getProperty name="test" property="message" />
</center>
</body>
</html>
前提必须有一个bean
/* File: TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
- getProperty
使用getProperty动作将检索一个给定的属性的值,并将其转换为字符串,并最终将其插入到输出,示例如上 - forward
终止当前页面的动作,将请求转发给另一个资源,如静态页面,另一个JSP页面或Java Servlet
简单语法如下:
<jsp:forward page="Relative URL" />
示例如下:
date.jsp
<p>
Today's date: <%= (new java.util.Date()).toLocaleString(
</p>
main.jsp
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:forward page="date.jsp" />
</center>
</body>
</html>
- plugin
plugin动作是用来插入Java组件到一个JSP页面 - element、attribute、body
这三个动作来动态定义的XML元素 - text
该动作可以用来写在JSP页面和文档模板文本
JSTL
JSTL是JSP的标准标签集合,里面包括了核心标签(c),格式化标签(fmt),数据库标签(sql),XML标签(x)以及自定义标签,在运用JSTL之前,我们需要先导入jstl、standard JAR包,pom.xml导入方式如下:
<!--引入JSTL标签库-->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
下面我只演示c标签的示例:
<%--
Created by IntelliJ IDEA.
User: 罗浩
Date: 2017/9/16
Time: 16:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL demo</title>
</head>
<body>
<c:out value="${'JSTL demo!'}"/>
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Before Remove Value: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>After Remove Value: <c:out value="${salary}"/></p>
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>The exception is : ${catchException} <br />
There is an exception: ${catchException.message}</p>
</c:if>
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
</body>
</html>
访问结果: