JSP
一、概述
JavaServerPages: Java服务器页面 ,是一个一种动态网页技术,既可以定义HTML页面,又可以定义Java代码;简化了Servlet中Responce :: getWriter().write(),便于书写展示页面。
JSP运行时自动创建了一个继承自HttpServlet的类,本质上是一个Servlet类。
- 服务器解析请求消息,查找是否有index.jsp资源
- 若找到,会将index.jsp转换为对应的index.java文件
- 编译index.java文件,生成index.class字节码文件
- 由字节码文件提供访问
二、定义方式
2.1 注释
//
- 只能注释java代码
- 还会被编译为字节码文件,但不会被加载到html页面中
<!-- -->
- 只能注释html代码片段
- 响应时还会向浏览器发送被注释的代码片段,但浏览器不解析
<%-- --%>
- 可以注释所有JSP代码
- 响应时不会发送代码片段
2.2 定义Java代码
<% %>
局部代码块
定义的java代码在service()方法中 ,service方法中可以定义什么,该脚本中就可以定义什么
<%! %>
全局代码块
定义的java代码在转换后的java类的成员位置 ,用于定义成员方法、成员变量(由于多线程安全问题不建议定义)、静态代码块…
<%= %>
脚本调用方式
out.print(代码 );
定义的java代码在service()方法的输出语句中 ,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么(可以放有返回值的方法)
2.3 指令
用于配置JSP页面,或导入资源文件,不同属性空格隔开
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
2.3.1 page指令
contentType : 等效于Response :: serContentType(); 设置响应体的MIME类型与字符集
<%@ page contentType="text/html,charset=GBK"%>
language :JSP页面要被转义成的语言,现在只支持Java
session : JSP页面中是否有session对象,默认为true
import :导包
<%@ page import="java.util.*"%>
errorPage : 指定当前页面出现异常后跳转的页面
<%@ page errorPage="error.jap"%>
isErrorPage : 赋值为[true] 标记标记当前JSP页面为错误页面,可以使用 exception 内置对象
isELIgnored :赋值为[true]时忽略整个JSP页面的EL表达式
2.3.2 include指令
导入页面的资源文件,如多个页面同时使用某一页面时
静态导入
<%@include file="相对位置"%>
被导入的页面不会被转换为新的Servlet文件,而是与当前页面直接合并;
运行效率高,但两个页面会耦合到一起,不利于维护;还会有命名重复的问题
动态导入
<jsp:include file="相对位置"></jsp:include>
被导入的页面被转换为新的Servlet文件,与当前页面解耦
2.3.3 taglib指令
导入资源,如标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:自定义的前缀名,使用标签库时用<前缀名:>
2.3.4 forward指令
实现JSP页面的请求转发
<jsp:forword page="相对位置">
<jsp:param name="key" value="value">
<