尽管JSP的本质是Java Servlet,但是它的表层依然有自己的一套成文语法。学习JSP的语法,更有利于开发出简介、易维护(随时变化的需求)的代码!
目录
JSP基础语法
核心与概览:
- JSP声明: <%! 变量或方法 %> 声明JSP的成员变量或成员方法
- JSP表达式:<%=变量或表达式%> 向浏览器输出变量或表达式计算的结果
- JSP注释: <%!-- JSP注释 --%> 用于注释JSP代码,不会翻译到java文件中,也不会执行。
- 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表达式
语法:<%=变量或表达式%>
作用:向浏览器输出某变量的值或表达式计算的结果
注意:
- 表达式的原理就是翻译成out.print(“变量”); 通过该方法可以把JSP中的HTML标签写到浏览器;
- 表达式后面不需要带分号结束,不能有分号(;)。
快速理解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:指明这个文件是什么类型,说明服务器发送浏览器的数据类型和内容编码
- 如果要从JSP输出为XML,请使用以下page指令:<%@ page contentType = "text/xml" %>
- 以下语句指示向浏览器生成的页面呈现为HTML:<%@ page contentType = "text/html" %>
- 以下指令将内容类型设置为:Microsoft Word文档:<%@ page contentType = "application/msword" %>
- 还可以指定响应的字符编码。 例如,如果要指定返回浏览器的结果页面使用: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
- 值可选的有true or false。
- 用于控制在这个jsp页面里面,能够直接使用session对象。
- 具体的区别是,请看翻译后的java文件。如果该值是true , 那么在代码里面会有getSession()的调用,如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。
errorPage:指的是错误的页面, 值需要给错误的页面路径URL
isErrorPage:上面的errorPage 用于指定错误的时候跑到哪一个页面去。那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。
buffer:指定out对象输出缓冲区的大小
include指令
指令语法:<%@ include file=”静态包含JSP文件的URL” %>
指令功能:
包含另外一个jsp的内容进来。
本质:
- 原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,即把被包含的页面代码复制到包含页面中, 合并成翻译成一个Java源文件,再编译运行!!这种包含叫静态包含(源码包含)
- 如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、body)
- 如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
- 其中的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="标签库路径"%>
解析:
- prefix:指定标签前缀,这个东西可以随意起名
- uri:指定第三方标签库的uri(唯一标识)
- 当然,需要先把第三方标签库所需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>