JSP脚本
1. <% java代码 %>
方法内部的代码都可以写在个位置
<% String s1 = "hello jsp"; %>
2. <%=java代码 %>
把java代码运行的结果在页面显示, 要求java代码是一个表达式
<%=s1 %>
3. <%! java代码 %> 使用很少
对属性的声明,方法的声明
4、jsp的注释 <%-- ... --%>
JSP是特殊的Servlet
JSP是一种特殊的Servlet,当JSP页面首次被访问时,容器(Tomcat)会先把JSP编译成Servlet,然后再去执行Servlet。所以JSP其实就是一个Servlet!
JSP真身存放目录
JSP生成的Servlet存放在${CATALANA}/work目录下,我经常开玩笑的说,它是JSP的“真身”。我们打开看看其中的内容,了解一下JSP的“真身”。
你会发现,在JSP中的静态信息(例如<html>等)在“真身”中都是使用out.write()完成打印!这些静态信息都是作为字符串输出给了客户端。
JSP的整篇内容都会放到名为_jspService的方法中!
JSP指令
语法: 语法格式: <%@ 指令名 属性名1=值1 属性名2 = 值2.... %>
- page指令: 对jsp页面一些设置
- include指令: 包含其他jsp页面
- taglib指令: 引入标签库 (往后)
page指令
page指令是最为常用的指定,也是属性最多的属性!
page指令没有必须属性,都是可选属性。例如<%@page %>,没有给出任何属性也是可以的!
在JSP页面中,任何指令都可以重复出现!
默认创建的jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
属性:
1、 language: jsp支持的编程语言: 值只能是java
2、 pageEncoding: 设置jsp的编码:指定当前JSP页面的编码!这个编码是给服务器看的
3、 Content-type: contentType属性与response.setContentType()方法的作用相同!
它会完成两项工作,一是设置响应字符流的编码,二是设置content-type响应头。
注意:
- 如果只设置pageEncoding没有设置contentType, contentType默认使用的pageEncoding
- 如果只设置contentType没有设置pageEncoding, pageEncoding默认使用的contentType
4、 import, 导包
a) Import=”包.类,包.类2,....”
b) 使用多个page指令, 每一个page指令包含一个import
5、 errorPage与isErroePage
errorPage=”错误页面的url”, 当jsp出现错误, Tomcat根据的errorPage属性,找到对应的设置的错误页面给客户端
<%@ page errorPage = "./error.jsp"%>
错误页面: 添加一个属性: isErrorPage: boolean, 默认值false, 不是错误页面 True; 是错误页面
<%@ page isErrorPage = "true" %>
可在xml中统一设置xml,错误页面
只需要在页面头部添加isErrorPage:就可在页面中出现错误后返回相应页面
6、 autoFlush 是否自动刷新, 默认true, 自动刷新, buffer,设置缓冲区大小, 默认8KB
7、 isELIgnored 是否忽略EL表达式(EL表达式不起作用) 默认false,不忽略 True.忽略,
其他属性:
- info:JSP说明性信息;
- isThreadSafe:默认为false,为true时,JSP生成的Servlet会去实现一个过时的标记接口SingleThreadModel,这时JSP就只能处理单线程的访问;
- session:默认为true,表示当前JSP页面可以使用session对象,如果为false表示当前JSP页面不能使用session对象;
- extends:指定当前JSP页面生成的Servlet的父类;
include指令
include指令表示静态包含!即目的是把多个JSP合并成一个JSP文件!
语法:<%@include file = "包含页面的路径" %>
底层只是将被包含的页面复制过去
注意: 被包含的页面, 只需要写内部,不需要写HTML头部
Taglib 指令
导入第三方的标签库
语法:<%@ taglib prefix="前缀" uri="标签的url" %>
Jsp动作标签
语法: jsp: 标签名前缀, 区分与HTML的标签 <jsp:标签名 属性名=值 >
- <jsp:include>
- <jsp:forward>
- <jsp:param>
1、<jsp:include>标签的作用是用来包含其它JSP页面的
2、<jsp:forward page=”转发的资源路径”> 请求转发,
对request.getRequestDispatcher("/top.jsp").forward(request,response);的简写
3、在<jsp:include>和<jsp:forward>标签中使用<jsp:param>子标签
<jsp:include page="./demo4.jsp"> <jsp:param value="zhangsan" name="name1"/> <jsp:param value="21" name="age"/> </jsp:include>
dome4.jsp页面中
//获取参数
out.print(request.getParameter("name1"));
out.print(request.getParameter("age"));
<%@ include%> 与 <jsp:include> 的区别
<%@ include file=”” %> 静态包含,
如果ajsp使用静态包含b.jsp, 生成java代码时, 只有a.jsp对应的java代码, 没有.b.jsp对应的java代码,
只是在a.jsp中把b.jsp中的代码赋值粘贴到a.jsp
<jsp:include page=”动态包含页面的路径” >:
动态包含, a.jsp 动态包含b.jsp a.jsp生成一个java类, b.jsp生成java类,
a.jsp中java类只是调用了b.jsp中的方法 _jspService()