JSP全称Java Server Pages即 java服务页面,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
一、静态内容:HTML静态文本
二、JSP指令
语法:<%@ %>
<%@ include file = " Filename" %>
语法:<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>
常用属性:
language:指定JSP页面使用的脚本语言,默认为Java。
import:通过该属性来引用脚本语言中使用得到的类文件。
contentType:用来指定JSP页面所采用的编码方式,默认为text/html。
举例如下:
HTML的注释:
JSP注释:<%-- 这也是注释,但客户端不能查看到 --%>
在JSP脚本中注释: <% //单行注释 %>
<% /*多行注释 */ %>
三、JSP脚本元素和内置对象
(1)小脚本:在JSP页面里嵌入一段Java代码
语法:<% Java代码 %>
(2)表达式:对数据的表示,系统将其作为一个值进行计算和显示
语法:<% = Java表达式/变量 %>
(3)方法声明:在JSP页面中定义Java方法
语法:< % ! Java 代码 %>
JSP 内置对象是 Web 容器创建的一组对象
JSP 内置对象是可以直接在JSP页面使用的对象 ,无需使用“new”获取实例
JSP 内置对象的名称是 JSP 的保留字
(1)out对象:用于向客户端输出数据
常用方法:
print():在页面中打印出字符串信息
(2)request对象:主要用于处理客户端请求
常用方法:
(3)response对象:用于响应客户请求并向客户端输出信息
常用方法:
void sendRedirect (String location):将请求重新定位到一个不同的URL
(4)session对象:用来存储有关用户会话的所有信息
常用方法:
void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到session中
Object getAttribute(String key):根据名称去获取session中存放对象的值
访问控制就是基于session来完成的。
(5)application对象:类似于系统的“全局变量”,用于实现用户之间的数据共享
常用方法:
void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中
Object getAttribute(String key):根据键去获取application中存放对象的值
四、JSP动作:
用来包含指定的 jsp 或者 html 页面,这个包含动作 也叫动态包含。 它会先把被包含页面
转换成对应的servlet 然后 再进行包含。所以这样有两个servlet 产生。
包含页面 还可以向被包含的页面传递参数数据。 使用
//demo6文件
demo6.jsp
username:<%=request.getParameter("username") %>
age:<%=request.getParameter("age") %>
静态包含命令:<%@include file="xxx.jsp" %>,主页面会把子页面的源代码包含进来,然后整体编译成servlet。
动态包含命令:
所以,当子页面的代码发生变化后,通过静态包含命令引入该子页面的主页面需要重新编译。而通过动态命令包含该子页面的主页面就不需要重新编译。举个例子,现在有三个页面,分别为A.jsp,B.jsp和C.jsp。
在A.jsp中,静态包含<%@include file="C.jsp" %>
在B.jsp中,动态包含
那么,当C.jsp被修改之后,就需要重新编译C.jsp和A.jsp,而B.jsp不需要重新编译。
因此,对于内容会经常发生变化的子页面,通常使用动态包含命令来引用。
jsp页面中,通常需要包含各种标签库,例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
为了管理的方便,我们把这部分代码抽出来,放到taglib.jsp中,其他的jsp页面包含taglib.jsp就可以了。这个时候需要特别注意的是,只能使用静态包含。原因是,每个jsp页面都用到了这些标签,如果使用动态包含,那么这些jsp页面和taglib.jsp是分别编译的,编译这些jsp页面的时候,编译器就不认识这些标签,只把这些标签当作文本来处理,虽然编译通过,但是会导致运行时错误。