jsp简介
jsp是什么?
sun公司制定的一种服务器端动态页面技术规范。
JSP其实是一个以“jsp”为后缀的文件,该文件的内容主要是html和少量的java代码,容器会将jsp文件自动转换成一个servlet然后执行。
- jsp的组成
- jsp = html + java脚本 + jsp标签(指令)
- jsp中可直接使用的对象一共有9个,被称之为9大内置对象
- 3种java脚本: <%…%>:写java代码片段,(类似方法) <%=…%>:用于输出,用于输出一条表达式(或变量)的结果。 <%!…%>:声明,用来创建类的成员变量和成员方法(类似与类)
- jsp注释:<%– … –%> 当服务器把jsp编译成java文件时已经忽略了注释部分!
Jsp与Servlet的关系
jsp本质是servlet,jsp具有servlet的所有功能
Jsp技术原理
JSP的工作方式是请求/应答模式,客户端发出HTTP请求,JSP收到请求后进行处理,并返回处理结果。在一个JSP文件首次被请求时,JSP引擎首先把这个JSP文件转换成一个servlet,而该引擎本身也是一个servlet。
Jsp三大指令
(1)page:<%@page language=”java” info=”xxx”…%>**
作用: 告诉tomcat服务器如何翻译jsp文件
语法: <%@ page
language=”java” –告诉服务器使用什么动态语言来翻译jsp文件
import=”java.util.*” –告诉服务器java文件使用什么包,导入包时,多个包之间用逗号分割
pageEncoding=”utf-8” –告诉服务器使用什么编码翻译jsp文件(成java文件)
contentType=”text/html; charset=utf-8” 服务器发送浏览器的数据类型和内容编码
设置pageEncoding即可解决中文乱码问题
errorPage=”error.jsp”
isErrorPage=”false”
buffer=”8kb”
session=”true”
isELIgnored=”false”
%>
(2)include:静态包含
作用: 在当前页面用于包含其他页面
语法: <%@include file=”common/header.jsp”%>
注意:
1)原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一个java源文件,再编译运行,这种包含叫静态包含(源码包含)
2)如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、 body)
(3)taglib:导入标签库
- 作用:导入标签库
- 语法:<%@taglib uri=”tld文件的uri名称” prefix=”简写” %>
九大内置对象
- 在jsp中无需声明即可直接使用的9个对象
- out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
- config(ServletConfig):对应“真身”中的ServletConfig;
- page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;
- pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
- exception(Throwable):只有在错误页面中可以使用这个对象;
- request(HttpServletRequest):即HttpServletRequest类的对象;
- response(HttpServletResponse):即HttpServletResponse类的对象;
- application(ServletContext):即ServletContext类的对象;
- session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
- pageContext
- Servlet中有三大域,而JSP中有四大域! ServletContext:整个应用程序 session:整个会话(一个会话中只有一个用户) request:一个请求链! pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据! 域对象 代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE); 全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找! 获取其他8个内置对象: