【JSP】JSP基本语法

 

尽管JSP的本质是Java Servlet,但是它的表层依然有自己的一套成文语法。学习JSP的语法,更有利于开发出简介、易维护(随时变化的需求)的代码!

目录

JSP基础语法

JSP变量或方法的申明

JSP表达式

JSP表达式的本质

JSP模版元素

JSP脚本片断

JSP三大指令

page指令

include指令

taglib指令

JSP动作标签

jsp:include标签

jsp:forward标签

jsp:parm标签


 

 

JSP基础语法

 

核心与概览:

 

  1. JSP声明: <%! 变量或方法 %> 声明JSP的成员变量或成员方法
  2. JSP表达式:<%=变量或表达式%> 向浏览器输出变量或表达式计算的结果
  3. JSP注释: <%!-- JSP注释 --%> 用于注释JSP代码,不会翻译到java文件中,也不会执行。
  4. JSP脚本: <% java代码 %> 执行java代码  原理:翻译到_JSPService()方法中

 

 

JSP变量或方法的申明

 

语法:<%! 定义:变量或方法或类 %>

 

作用:声明JSP的变量或方法

JSP申明
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%-- 申明变量 --%>
	<%!
		String name = "kyle";
		int age = 22;
		double sa = 100000;
	%>
	
	<%-- 申明方法 --%>
	<%!
		public String getName() {
			return name;
		}
		public double addSa(double add) {
			return sa + add;
		}
	%>
	
	<%-- 申明类 --%>
	<%!
		class Person {
			private String pname;
			private int page;
			Person(String name, int age) { //构造
				this.pname = name;
				this.page = age;
			}
			public String getInfo() {
				return "name: " + pname + ", age: " + age;
			}
		}
	%>
</body>
</html>

 

JSP表达式

 

语法:<%=变量或表达式%>

作用:向浏览器输出某变量的值或表达式计算的结果

注意:

  1. 表达式的原理就是翻译成out.print(“变量”); 通过该方法可以把JSP中的HTML标签写到浏览器;
  2. 表达式后面不需要带分号结束,不能有分号(;)。
快速理解JSP表达式的用法
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.Date"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%!
		String name = "kyle";
		int age = 22;
		double sa = 100000;
	%>
	
	姓名:<%=name %><br/>
	年龄:<%=age %><br/>
	薪水:<%=sa %><br/>
	
	当前时间:<%=new Date() %>
</body>
</html>

 

 

 

 

JSP表达式的本质

 

 

左边是MyJSP代码;右边是经过Tomcat翻译、编译存于”Tomcat安装目录/work/Catalina/localhost/项目名/org/apache/JSP/MyJSP_JSP.java” 的JavaServlet代码

 

 

JSP模版元素

 

JSP页面中的HTML代码就是JSP模版元素。

 

 

左边是MyJSP.JSP代码;右边是经过Tomcat翻译、编译存于”Tomcat安装目录/work/Catalina/localhost/项目名/org/apache/JSP/MyJSP_JSP.java” 的JavaServlet代码

 

JSP脚本片断

 

定义:就是在JSP中写Java代码!

 

语法:<%java代码 %>

 

作用:执行java代码  

 

注意:原理是把脚本中java代码原封不动拷贝到_JSPService方法中执行。

快速理解JSP脚本片段
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.Random"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<!-- 脚本片段:可以写Java代码 -->
	<%
		Random rand = new Random();
		int num = rand.nextInt(100);
		if(num>50) {
	%>
	牛逼!大于50!
	<%
		} else {
	%>
	垃圾!小于50!
	<%
		}
	%>
	
</body>
</html>

 

JSP三大指令

 

指令格式:<%@ 指令名字 键=“值” %>

 

功能:表名这是一个JSP文件。

 

page指令

 

语法格式:<%@ page 键=“值” %>

 

键有以下选项:

 

language:表明jsp页面中可以写什么编程语言的代码,目前只能写java代码;

 

contentType、charset:指明这个文件是什么类型,说明服务器发送浏览器的数据类型和内容编码

 

  1. 如果要从JSP输出为XML,请使用以下page指令:<%@ page contentType = "text/xml" %>
  2. 以下语句指示向浏览器生成的页面呈现为HTML:<%@ page contentType = "text/html" %>
  3. 以下指令将内容类型设置为:Microsoft Word文档:<%@ page contentType = "application/msword" %>
  4. 还可以指定响应的字符编码。 例如,如果要指定返回浏览器的结果页面使用:UTF-8,则可以使用以下page指令:<%@ page contentType = "text/html:charset=UTF-8" %>

 

pageEncoding:指定jsp内容编码

 

extends:用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改。

 

import:导包使用的,如果导入多个包,多个包之间用逗号分割

 

JSP引擎自动导入的包:

 

  • java.lang.*
  • javax.servlet.*
  • javax.servlet.JSP.*
  • javax.servlet.http.*

 

session

 

  1. 值可选的有true or false。
  2. 用于控制在这个jsp页面里面,能够直接使用session对象。
  3. 具体的区别是,请看翻译后的java文件。如果该值是true , 那么在代码里面会有getSession()的调用,如果是false :  那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。

 

errorPage:指的是错误的页面, 值需要给错误的页面路径URL

 

isErrorPage:上面的errorPage 用于指定错误的时候跑到哪一个页面去。那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。

 

buffer指定out对象输出缓冲区的大小

 

include指令

 

指令语法:<%@ include file=”静态包含JSP文件的URL” %>

 

指令功能:

 

包含另外一个jsp的内容进来。

 

本质:

 

  1. 原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,即把被包含的页面代码复制到包含页面中, 合并成翻译成一个Java源文件,再编译运行!!这种包含叫静态包含(源码包含)
  2. 如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、body)
  3. 如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
  4. 其中的file属性用于指定被引入文件的相对路径。file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

 

特性:

 

  • 被引入的文件必须遵循JSP语法。
  • 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理JSP页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.JSPf(JSP fragments)作为静态引入文件的扩展名。
  • 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

 

实例:在mainbody.jsp中引入head.jsp和footer.jsp

mainbody.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%@include file="head.jsp" %>
	
	<br/>
	<div style="text-align:center">
		我是mainbody.jsp
	</div>
	<br/>
	
	<%@include file="footer.jsp" %>
	
</body>
</html>

head.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div style="text-align:center">
	我是head.jsp,引入成功!
</div>

footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<div style="text-align:center">
	我是footer.jsp,引入成功!
</div>

 

taglib指令

 

指令功能:

 

用来在当前jsp页面中导入第三方的标签库

 

指令格式:

 

<%@ taglib prefix="标签库的别名" uri="标签库路径"%>

 

解析:

 

  1. prefix:指定标签前缀,这个东西可以随意起名
  2. uri:指定第三方标签库的uri(唯一标识)
  3. 当然,需要先把第三方标签库所需jar包放到类路径中。

 

有关该指令的详细用法,要等待学习JSTL时再做讲解!

 

JSP动作标签

 

jsp:include标签

 

功能:

 

  • 包含指定的页面, 这里是动态包含。
  • 也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。

 

语法:<jsp:include page="other02.jsp"></jsp:include>

 

  • 指令@include(静态包含):
    • 在编译时期就包含进来,合并成一个Servlet,并编译好
    • 因为预先包含入了,并合并编译好了,所以速度较快
  • 动态jsp:include(动态包含):
    • 在页面被访问是才包含进来
    • 因为在访问时才包含入,所以速度较慢

 

 

jsp:forward标签

 

功能:前往一个页面

 

语法:<jsp:forward page="other02.jsp"></jsp:forward>

 

等同于以下代码:

 

request.getRequestDispatcher("other02.jsp").forward(request, response); //Servlet请求转发

 

jsp:parm标签

 

功能:在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数。

 

语法:
<jsp:forward page="other02.jsp">
	<jsp:param value="beijing" name="address"/>
</jsp:forward>

重定向接收页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<br>收到的参数是:<br>
	<%= request.getParameter("address")%>
</body>
</html>

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章