JSP的基础、指令、动作
jsp的简介
静态网页:指没有后台数据库、不含程序、不可交互的网页。适用于不经常更改的网页。
动态网页:指显示的内容不是固定的,是根据服务器执行代码的结果来确定具体的显示内容。
主要区别:是否会随着时间,地点,用户的选择而改变。
JSP:( java server pages ) java 服务器页面,是一种服务器脚本语言,在服务器执行,返回客户端一个HTML文件。
jsp的执行过程
- 当客户端第一次请求一个jsp网页时,服务器就会将该jsp文件变成java文件(通常是一个servlet),再将java文件编译成class字节码文件。java(servlet , class)的内容就是打印出一个HTML文件,服务器将该HTML文件响应回给客户端。客户端再将HTML文件显示出来。
- 当客户端非第一次请求jsp网页时,服务器直接执行class文件,响应一个HTML文件给客户端。
所以,第一次请求时,花的时间比再次请求长。 - 当jsp文件更改了,必须要重新编译jsp文件,也就是按第一次执行。
jsp的组成
JSP组成部分包括HTML、Java、JSP代码
HTML: 负责内容
Java: 负责行为
JSP: 负责行为
jsp的注释
jsp的注释:
<%-- 多行注释内容 --%>
java的注释:
<%/* 多行的注释内容 */%>
<%// 单行的注释内容 %>
html的注释:
<!-- 多行注释内容 -->
jsp、java的注释在网页中和浏览器的源代码中都不会出现,因为它们没有传输到客户端,仅仅是给程序员读的;html的注释在网页中不会出现,但在浏览器的源代码窗口可以看得到。
jsp的常用脚本元素
变量和方法的声明
声明后可以在本JSP页面中的任何位置使用。(即全局变量)
语法格式:
<%! 声明变量和方法 %>
注意点
- 声明必须以“ ; ”结尾。
- 变量和方法的命名规则与Java中的规则相同;
- 一个声明仅在一个JSP页面中有效;如果多个页面想要用到该变量和方法,最好将他们写成一个独立的文件,然后用
<%@include%>
或<jsp:include>
元素包含进来。
示例
<body>
<%!
String str = "JSP技术带你走进动态网页开发时代!"; //声明变量
%>
<%!
String print(){ //声明方法
return str;
}
%>
<h1><%=print()%></h1> //表达式
</body>
表达式
将结果直接输出在网页中。
语法格式:
<%= 表达式 %>
注意点
- 表达式的结尾没有分号。
适用场景
- 向网页输出内容。
- 生成动态的链接地址。
- 动态生成From表单处理页面
示例
<body>
<%!
String name="百度";
String urlAddress="https://www.baidu.com";
%>
<p><a href="<%=urlAddress%>"><%=name%></a></p>
<form action="<%=urlAddress%>">
</form>
</body>
脚本(java代码)
语法格式:
<% 脚本语句 %>
在脚本中也可以声明变量和方法,但只可以在该<%
与%>
中可用。
jsp的常用指令元素
JSP指令元素的作用:用来提供整个JSP网页的相关信息,并用来设定JSP网页的相关属性。
JSP指令在客户端是不可见的,被服务器解释并执行。
JSP指令包括include指令
、page指令
、taglib指令
。
- page指令:定义整个页面的全局属性。
- include指令:包含一个代码或文本文件,即在当前网页中插入include指令指定的文件。
- taglib指令:引入自定义的标签或第三方的标签库。
page指令
page指令的主要属性及语法
<%@page langueage="java" //脚本语言
pageEncoding="UTF-8" //页面所用编码
extends="继承父类名称"
import="导入的Java包或类的名称"
session=“true/false" //是否参与HTTP会话
buffer="缓冲区大小" //设置out对象的缓冲区大小
autoflush="true/false" //是否自动刷新
isThreadSafe="true/false" //是否线程安全
info="页面信息"
errorPage="发生错误时所转向的页面的相对地址" //当页面错误时,跳转的页面
isErrorPage="true/false" //是否是错误处理页面
contentType="" //MIME类型和字符编码
isELIgnord="true/false" //是否忽略正则表达式
%>
pageEncoding
: jsp文件自身的编码,也就是 jsp --> java
contemtType
: 浏览器解析jsp的编码,通常与pageEncoding
保持一致。
注意点
- 每个页面中可以使用多个
<%@page%>指令
,且区分大小写。 - 除了
import指令
外,其他的指令只可以使用一次。 - 一个JSP页面中,如果需要同时导入多个Java包,可以分开写,也可以合起来写。如:
<%@page import="java.util.Date"%>
<%@page import="java.io.*"%>
也可以写成
<%@page import="java.util.Date,java.io.*"%>
include指令
可以将其他文件静态插入本JSP网页中。
page指令的语法
<%@include file="filename"%>
jsp的动作元素
作用
用来控制JSP引擎的行为。
主要有以下几个:
<jsp:include>
动态插入一个文件
<jsp:forward> 跳转
到一个新的页面
<jsp:param>
子标签
,传递参数,通常嵌套在include、forward动作元素中使用
<jsp:plugin>
连接客户端的Applet或Bean插件
<jsp:useBean>
使用JavaBean组件
<jsp:setProperty>
设置JavaBean的属性值
<jsp:getProperty>
获取JavaBean的属性
值并输出
<jsp:include>
动作
语法
<jsp:include page="文件名称"/>或
<jsp:include page="文件名称">其他内容</jsp:include>
注意:第1种语法,收尖括号前有一个反斜杠。
功能
当前网页中动态
包含一个文件,当执行到该动作元素处,才加载被包含文件的字节码。
include指令
与include动作
的区别
include指令:是静态插入文件,先将文件加载到当前的JSP页面中,再一起编译成字节码文件,且不可以传递参数,仅仅是将两个页面放在一起。指令后接file
。
include动作:是动态插入文件,先将两个文件分开编译成字节码文件,再将被加载文件的字节码文件加载到当前的JSP页面中,可以通过参数传递属性值。动作后接page
。
<jsp:forward>
动作
语法
<jsp:forward page="文件名称"/>或
<jsp:forward page="文件名称">其他内容</jsp:forward>
功能
从该动作的执行处停止
当前网页的执行,转向执行page指定的文件
,但浏览器中的地址栏的地址不会改变。
<jsp:param>
子标签
语法
<%--包含动作-->
<jsp:include page="文件名称">
<jsp:param name="变量名字1" value="变量值1"/>
<jsp:param name="变量名字2" value="变量值2"/>
...
</jsp:include>
<%--跳转动作-->
<jsp:forward page="文件名称">
<jsp:param name="变量名字1" value="变量值1"/>
<jsp:param name="变量名字2" value="变量值2"/>
...
</jsp:forward>
功能
将标签中的变量值传递
给动态加载的文件。
不可以独立使用,只可作为include、forward的子标签使用。
示例
传递参数的页面————chuandi.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>传递参数页面</title>
</head>
<body>
<h3>该页面传递一个参数QQ,直线下是接受参数页面的内容</h3>
<hr>
<jsp:include page="jieshou.jsp">
<jsp:param name="userName" value="QQ"/>
</jsp:include>
</body>
</html>
接受参数的页面————jieshou.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>接受参数页面</title>
</head>
<body>
<p>接受参数,并显示结果页面</p>
<% String str=request.getParameter("userName");%>
<font color="blue" size="12"><%=str%></font>你好,欢迎你访问!
</body>
</html>
运行结果如下:
可见,传递参数页面中包含了接受参数页面;如果将传递参数页面中的<jsp:include page="">
改成<jsp:forward page=""/>
,结果如下:
浏览器中的地址显示的是传递参数的页面,但内容显示的是接受参数的页面
。