全称:Java Server Pages(java服务器页面)。和Servlet一样,是sun公司定义的一种动态网页开发技术
特点:基于html模板,可以再html模板嵌入java代码和jsp中的标签。
2、1 JSP的优势
与纯Servlet相比:jsp可以很方便的编写或者修改或者修改HTML网页而不用去面对大量的println语句
与javascript相比:虽然javascript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
与静态的HTML相比:静态的HTML不包含动态的信息
3、 1 jsp的语法格式
jsp页面中可以包含任意量的java语句、变量、方法或者表达式
语法格 式 :
<% java代码 %> 要以分号结尾的
声明全局变量:<%! int i=0;%> 记得加感叹号
声明局部变量:<% int i=0;%>
输出变量 : <%= 2+3 %> 不要加分号
3、2 JSP的注释
格式: <%-- 注释 --%>:安全,省流量,不加载这种格式的注释
网页注释:<!-- 注释--> :不安全,耗流量,加载这种格式的注释
告诉JSP引擎如何jsp文件中的内容
语法: <%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” 。。。。。%>
示例:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
4、1 page指令
作用:用于定义JSP 页面的各种属性
import:java代码的含义一样
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ pageimport="java.util.Date"%>
<%@ pageimport="java.util.List"%>
session:是否会自动创建session对象,默认值为true;buffer:JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.
errorPage:如果页面中有错误,跳转到指定的资源 errorPage="/uri" 如果写“/”则代表当前应用的目录 下,绝对路径。 如果不写“/”则代表相对路径
isErrorPage:是否创建throwable对象。默认是false
contentType:等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码
pageEncoding:Jsp文件本身的编码
isELIgnored:是否支持EL表达式。 默认是false,支持表达式, 是true,不支持表达式,
${1+1};false输出结果2 true按照原样输出
4、2 include 指令
静态包含:把其它资源包含到当前页面中 <%@ include file="header.jsp" %>
动态包含: <jsp:include page=“header.jsp">
两者的区别:翻译的时间段不同(可在tomcat工作目录下查看) : work\Catalina\localhost\工程名\org\apache\jsp
静态包含:在翻译时就把两个文件进行合并
动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容
4、3 taglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- jsp:include 动态包含
- jsp:forward请求转发
- jsp:param 请求设置参数
- jsp:useBean 创建一个对象
- jsp:setProperty给指定的对象属性赋值
- jsp:getProperty取出指定的对象属值
重要代码:
对象名 | 类型 | 说明 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | |
response | javax.servlet.http.HttpServletResponse | |
session | javax.servlet.http.HttpSession | 由session=“true”开关 |
application | javax.servlet.ServletContext | |
exception | java.lang.Throwable | 由isErrorPage=“false”开关 |
page | java.lang.Object当前对象this | 当前servlet实例 |
config | javax.servlet.ServletConfig | |
pageContext | javax.servlet.jsp.JspWriter | |
out | javax.servlet.jsp.PageContext | javax.servlet.jsp.JspWriter |
6、2 pageContext对象
域对象:可以操作其他三个域对象(request、session、application)
- void setAttribute(String name,Object o);
- Object getAttribute(String name);
- void removeAttribute(String name);
操作其它域对象的方法
- void setAttribute(String name,Objecto,int Scope);
- Object getAttribute(String name,intScope);
- void removeAttribute(String name,intScope);
Scope作用域,值如下:
- PageContext.PAGE_SCOPE
- PageContext.REQUEST_SCOPE
- PageContext.SESSION_SCOPE
- PageContext.APPLICATION_SCOPE
findAttribute(Stringname) 自动从page,request ,session ,application依次查找,
找到了就取值,结束查找 (作用域的范围由小到大)
重要代码:
<%--
pageContext: page上下文 作用域当前网页的上下文
该对象可以操作另外三个域对象
--%>
<%
//page作用域:只在当前页面有效
pageContext.setAttribute("name", "jack");
out.println(pageContext.getAttribute("name"));
//操作request对象
//request:一次请求:a转发b页面 b页面能获得a页面存在request中的值
pageContext.setAttribute("name", "request的jack",PageContext.REQUEST_SCOPE);
//操作session对象
pageContext.setAttribute("name", "session的jack",PageContext.SESSION_SCOPE);
//操作Application对象
pageContext.setAttribute("name", "application中的jack",PageContext.APPLICATION_SCOPE);
//代码转发
// request.getRequestDispatcher("test.jsp").forward(request, response);
//练习findAttribute();
//按照:page request session application的顺序查找name属性对应的值,
//如果查找到,直接返回这个属性的值
out.println(pageContext.findAttribute("name"));
pageContext.forward("test.jsp");//转发
%>
<%-- --%>
6、3 它可以创建其他的8个隐式对象
在普通类中可以通过pageContext 获取其他类的隐式对象
- getException 方法返回exception 隐式对象
- getPage 方法 返回page隐式对象
- getRequest 方法返回request的隐式对象
- getResponse 方法返回response的隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession 方法返回session 隐式对象
- getOut方法返回Out隐式对象
6、4 提供了简易的方法
JSP的底层其实就是Servlet。
可以在tomcat服务器安装路径中的:work\Catalina\localhost\工程名\org\apache\jsp下的java代码查看