JSP语法

 

1.JSP概述

JSP是一种用于开发包含动态内容的web页面技术,它是服务端的脚本语言,本质上就是一个servlet。因为jsp将会被翻译成servlet来运行。因此jsp的使用降低了使用servlet开发的难度。但是与servlet相比,jsp在以下几个方面仍然较servlet有所擅长。

  1. Jsp可以让输出阅读和维护HTML更为容易,在servlet仍然需要大量的out.print()语句来完成。
  2. Jsp可以使用常用的html开发工具,通过标签库等机制能很好的与HTML结合
  3. 一次开发,各处运行。同时还有组件重用,可以依赖于跨平台的组件来执行更复杂的运算,数据处理,它还容易部署,升级和维护,jsp容器能够对jsp的修改进行检查,自动编译修改后的jsp文件。

 

1.1)第一个jsp程序

显示当前服务器系统时间的jsp:

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

<%@ 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>第一个JSP页面</title>

</head>

<body>

    <h1>您好!</h1>

    <%

        Date date = new Date();

        out.println("当前的时间是:" + date.toLocaleString());

    %>

    </body>

</html>

Jsp文件开头使用<%@ page %>指令进行页面的设置,language指定语言,contentType属性指定服务器响应的MIME类型的文件和编码,pageEncoding属性指定jsp页面的编码。

Jsp文件大多是采用HTML代码,在HTML代码的<body>标签题中使用<% %>来编写java代码

 

1.2)JSP的原理

Jsp和servlet一样,都是运行在servlet容器中,jsp的执行分为以下5个步骤:

 

  • 客户端向服务器发送jsp页面请求
  • 容器接受到请求后检索对应的jsp文件,如果是第一次被请求,则容器将页面的静态数据(HTML文本),和动态数据(java脚本)全部转化为java代码,使jsp文件被翻译成一个java文件。即servlet。
  • 容器将这个文件编译成字节码文件,对于tomcat默认将这个文件放在tomcat安装目录的\work中。
  • 字节码文件加载到容器的内存中执行,根据用户的请求生成HTML文件作为响应。
  • 容器将响应发送给客户端。

 

当JSP再次被请求的时候,只要该jsp文件没有发生过改动,容器将直接调用已装载的字节码文件,而不需要再次编译,从而大大的提高了服务器的性能。

 

 

1.3)JSP基本结构

Jsp页面主要是由jsp元素和模板文本组成,所有非jsp元素都叫做模板文件。如html、xml等。Jsp并不依赖于html语言。模板文本通常被直接传给浏览器,在处理jsp页面时,模板文件和jsp元素生成的内容就会结合,并作为响应给客户端。

Jsp元素有3种类型:

脚本元素:脚本<%  %> 表达式<%=  %>  

声明<%!%> 注释<%--%>

 

指令元素:<%@page   <%@taglib  <%@includ

 

动作元素:<jsp:includ>、<jsp:forward>、<jsp:param><jsp:useBean>

 

 

 

 

2.脚本元素

脚本元素允许用户将小段的java代码放在jsp页面文件中。例如添加一个if语句,以根据具体情况产生不同的HTML代码。脚本元素在页面被请求执行。

Jsp脚本元素包含  脚本、表达式、声明、注释

 

2.1)jsp脚本

语法:<%java代码%>

判断语句:

<%@ 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>Email格式验证</title>
</head>
<body>
<%
String email="qst@itshixun.com";
if(email.indexOf("@")==-1){
%>
您的E-mail地址中没有@。
<%
}else if(email.indexOf(" ")!=-1){
%>
您的E-mail地址中含有非法空格。
<%
}else if(email.indexOf("@")!=email.lastIndexOf("@")){
%>
您的E-mail地址中有两个以上的@符号。
<%
}else{
%>
您的E-mail地址书写正确。
<%
}
%>
</body>
</html>

2.2)JSP表达式

语法:<%=表达式%>

 

使用JSP表达式显示当前时间:

<%=(new java.util.Date()).toLocaleString%>

 

***********************************************************

 

<%@ 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>九九乘法表</title>
</head>
<body>
	<%
		for (int i = 1; i < 10; i++) {
	%>
	<p>
		<%
			for (int j = 1; j <= i; j++) {
		%>
		<%=j + "*" + i + "=" + (i * j)%>
		<%
			}
		%>
		<%
			}
		%>
	</p>
</body>
</html>

2.3)JSP声明

 

jsp中的声明用于声明一个或者多个变量和方法,并不输出任何的文本到文本流中,在声明元素中声明的变量将在jsp页面初始化时进行初始化。

语法:<%! jsp声明%>

放在<%! %>中的变量在编译为servlet的时候将作为类的属性儿存在,而放在脚本中的变量将在内部被声明。

 

<%@page import="java.util.Date"%>
<%@ 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>访问统计</title>
</head>
<body>
	<%!int count = 0; //被用户共享的count

	synchronized void setCount() {
		count++;
	}%>
	<%
		String date = new Date().toLocaleString();
	%>
	<%
		setCount();
		out.print("您是第" + count + "个访问本网站的用户。");
		out.print("访问时间是:" + date);
	%>
</body>
</html>

 

 

 

上述代码中声明了一个计数变量count  和一个同步统计的setCount()方法;使用脚本定义了一个时间变量data,当刷新页面或者使用不同浏览器进行多次访问时,count变量的值会不断地累加,data变量的值是每次访问的时间。由此可以看出count是一个所有访问中所共享的数据,而date变量是每一个访问中所独有的。

Count翻译成servlet后被定义为类属性,setCount()方法被定义为类方法。而data是局部变量。

 

2.4)jsp注释

Jsp页面使用<%--  --%> 的方式来注释

语法》:<%--注释-- %>

 

当jsp在浏览器上显示的时候,注释内容不会再源文件中看到。

 

 

 

3.指令元素

 

3.1)page指令

Page指令描述了和页面相关的属性,如导入所需要的包,指明输出内容类型和控制Session等page指令一般位于jsp页面的开头部分,在一个jsp页面中page指令可以出现多次,但是后面的会覆盖前面的。

语法:

<%@page language=”java” contentTypte=”text/html;charset=utf-8” %>

以下为两个重要的属性:

Import属性:

指定jsp导入的java软件包,多个可用逗号隔开

 

ContenType属性:

设置MIME类型,可以改变jsp输出内容的处理方式,从而实现一些特殊的功能,例如可以指定输出为word、Excel等形式

 

 

3.2)includ指令

语法:

<%@ include file=”文件”

它的作用是页面在翻译期间可以引入另一个文件,被包含的文件可以是jsp或者文本文件。相当于可以  一个页面和插入其他页面。

Include指令包含的过程发生在将jsp翻译成servlet时,当前jsp和被包含的文件会融合在一起形成一个servlet。

 

 

3.3)taglib指令

Taglib指令用于指定JSP页面所使用的标签库,通过该指令可以在jsp页面中使用标签库中的标签

语法:

<%@taglib uri=”标签库URI” prefix=“标签前缀”>

 

对于上述标签库,可以使用如下代码进行标签的引用

<c:out value=”hello word”>

 

c是标签的前缀,在jsp中有些前缀有所保留,如果自定义标签,这些前缀不可以使用,保留的前缀有:jsp\jspx\java\javax\sun\sunw

 

4.动作元素

Jsp中可以使用xml语法格式的一些特殊标记来控制行为,成为jsp标准动作

 

4.1)<jsp:include>

用于在页面运行时引入一个静态或者动态的页面,也成为动态包含。包含的文件只会在运行时才会被处理。<jsp:include>动作包含几个<jsp:param>子动作,用于向要引入的页面传入数据:

 

 

<jsp:include page=”urlSpec” flush=”true”>

<jsp:param name=”name” value=”value”>

</jsp:include>

 

通过request.getParameter(String name);来获取值

 

Include动作元素是在jsp页面运行时才会引入包含的文件所产生应答,被包含的文件在逻辑上和语法上独立于当前的jsp文件,其优点是可以使用param子动作

 

 

4.2)<jsp:forward>

引导客户端的请求到另一个页面或者servlet,它也可以使用<jsp:param>来传递参数。

语法:

<jsp:forward page= “relativeURLSpec”>

<jsp:param name=”name” value=”value>

<jsp:forward>

 

注意:该元素的功能和servlet的RequestDispatcher对象的forward方法类似,调用者和被调用者共同享用一个request。

 

 

4.3)<jsp:useBean>

jsp可以用它动态的使用javaBean组件来补充自己的jsp功能,

语法:

<jsp:useBean id=”name” 

type=”typeName” scope= “page|request|session|application”/>

 

其中:

  1. Id 指javaBean实例化的变量名
  2. Class javaBean的类名
  3. Scope指javaBean的作用范围,默认page

 

 

4.4)<jsp:getProperty>

 

用于从一个javaBean中得到某个属性的值,不管原先这个属性是什么类型

语法:

<jsp:getProperty name=”beanName” property=”propertyName”/>

Name:javaBean对象名

Property指定javaBean中需要访问的属性名

 

 

 

 

5.小结

  1. Jsp本质上就是一个servlet,是一种基于java的服务器端开发的语言
  2. Jsp执行过程经过“请求-翻译-编译-执行-响应”
  3. Jsp有三种元素:脚本元素,指令元素,动作元素
  4. 注意include指令元素和<jsp:getProperty>之间的区别于练习

 

 

                                                                                                                           -----2018.9.10星期一下午图书馆

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值