一、JSP介绍
1、JSP概念
- java server page :运行在服务器端的页面技术,它是建立在Servlet规范之上的动态网页开发技术,jsp也是一个servlet
- 如果用户访问服务器的是一个静态资源,那么直接响应过去
- 如果是一个动态资源,那么需要先将这个动态资源转成静态资源再响应!
2、JSP作用
JSP是服务器端的动态资源,其主要作用是显示和获取数据
3、jsp特点
- 跨平台
- 业务代码相分离
- 组件重用
- 预编译:用户第一次访问,jsp只会编译一次(之后未对jsp源码进行修改)
4、JSP执行原理
二、JSP使用
1、jsp的语法
1.1 组成部分
- JSP脚本
- html标签
- JSP动作标签
2、JSP脚本
2.1 声明<%! %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP脚本--声明</title>
</head>
<body>
<%!
//这里相当于在类中写的代码
int i=23;
public void print(){
System.out.println("I have a dream!");
}
class MyClass{
public void print(){
System.out.println("I have a dream!");
}
int b=230;
}
%>
</body>
</html>
2.2 嵌套Java代码片段,编译后放在service方法中
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP脚本--嵌套Java代码</title>
</head>
<body>
<%
//这里相当于在方法中的代码,定义一个变量:局部变量
int i = 23000;
System.out.println(i);
%>
</body>
</html>
2.3 输出<%= %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP脚本--输出</title>
</head>
<body>
<%=
//相当于response.getWriter().write();
123
%>
</body>
</html>
2、jsp的注释
- html注释:<!-- -->
- java注释://和/* */
- jsp注释: <%-- --%>
三、jsp的三种指令
1、格式
<%@ 指令名称 属性名1=”属性值1” 属性名2=”属性值2” 属性名3=”属性值3” %>
2、jsp指令分类
2.1 page:对页面的某些特性进行描述
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="e.jsp"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<%
int i= 1/0;
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>错误页面</title>
</head>
<body>
除零错误!
</body>
</html>
2.2 include:静态包含
静态包含一个jsp页面(合并的是页面),它的出现,主要是提高代码的重用性
<%@ include file="/include01/date.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
现在时间是:
<%@ include file="date.jsp" %>
</body>
</html>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示时间</title>
</head>
<body>
<%
String time = new Date().toLocaleString();
%>
<%=time %>
</body>
</html>
2.4 taglib指令:引入第三方标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- uri:引入第三方库的哪一个库
- prefix:使用这个库相关标签的前缀
- 使用这个的时候需要导入第三个的jar包!(Jstl.jar和Standard.jar)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>taglib指令</title>
</head>
<body>
<!-- 向域对象中设置一个值 count:变量的名称 3:值-->
<c:set var="count" value="3"></c:set>
<!-- 获取值 -->
<c:out value="${count}"></c:out>
</body>
</html>
四、jsp的动作标签
<jsp:include page="relativeURL" flush="true|false" />
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示时间</title>
</head>
<body>
<%
String time = new Date().toLocaleString();
%>
<%=time %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动作标签之动态包含</title>
</head>
<body>
现在时间是:
<jsp:include page="date.jsp"></jsp:include>
</body>
</html>
五、jsp的九大内置对象
1、概念
- JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用
- jsp为了我们开发方便,直接提前给我们提供好的一些对象(进入jsp页面就可以直接使用)
名称 | 类型 | 描述 |
---|---|---|
application | javax.servlet.ServletContext | 所有用户的共享信息 |
session | javax.servlet.http.HttpSession | 用于保护用户信息 |
request | javax.servlet.http.HttpServletRequest | 用于得到用户请求信息 |
pageContext | javax.servlet.jsp.PageContext | jsp的页面容器 |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
exception | java.lang.Throwable | 表示JSP页面所发生的异常,在错误页中才起作用 |
2、作用
简化Web应用程序的开发,在jsp页面中可以直接使用
3、内置对象说明
3.1 out:页面数据的输出(带有缓冲功能)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp九大内置对象之out</title>
</head>
<body>
<%
out.write("first line");//有缓冲区,不会立即执行
response.getWriter().write("second line");
%>
</body>
</html>
3.2 pageContext:jsp页面容器
- 通过这个对象可以获得其它8个内置对象
- 它还提供了存储数据的功能。【pageContext对象作为域对象!】
方法名 | 功能描述 |
---|---|
JspWriter getOut() | 用于获取out隐式对象 |
Object getPage() | 用于获取page隐式对象 |
ServletRequest getRequest() | 用于获取request隐式对象 |
ServletResponse getResponse() | 用于获取response隐式对象 |
HttpSession getSession() | 用于获取session隐式对象 |
Exception getException() | 用于获取exception隐式对象 |
ServletConfig getServletConfig() | 用于获取config隐式对象 |
ServletContext getServletContext() | 用于获取application隐式对象 |
方法名称 | 功能描述 |
---|---|
void setAttribute(String name,Object value,int scope) | 用于设置pageContext对象的属性 |
Object getAttribute(String name,int scope) | 用于获取pageContext对象的属性 |
void removeAttribute(String name,int scope) | 删除指定范围内名称为name的属性 |
void removeAttribute(String name) | 删除所有范围内名称为name的属性 |
Object findAttribute(String name) | 从4个域对象中查找名称为name的属性 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp九大内置对象之pageContext</title>
</head>
<body>
<!-- 向域中设置值 -->
<%
/* pageContext.setAttribute("book", "西游记");//默认向page域中设置值
//指定向哪个域中设置值
pageContext.setAttribute("book", "三国演义",pageContext.PAGE_SCOPE); */
pageContext.setAttribute("book", "红楼梦",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("book", "水浒传",pageContext.SESSION_SCOPE);
pageContext.setAttribute("book", "金瓶梅",pageContext.APPLICATION_SCOPE);
%>
<!-- 获取值 -->
<%-- <%=pageContext.getAttribute("book")%><!-- 从page域总获取值 -->
<%=pageContext.getAttribute("book",pageContext.PAGE_SCOPE)%><!-- 从page域总获取值 -->
<%=pageContext.getAttribute("book",pageContext.REQUEST_SCOPE)%><!-- 从request域总获取值 -->
<%=pageContext.getAttribute("book",pageContext.SESSION_SCOPE)%><!-- 从session域总获取值 -->
<%=pageContext.getAttribute("book",pageContext.APPLICATION_SCOPE)%><!-- 从application域总获取值 --> --%>
<%=pageContext.findAttribute("book") %> <!-- 全域查找,从最小的域开始找 -->
</body>
</html>
六、JSP的四个作用域
PageContext常量名 | 描述 | 作用域名称 | 域对象类型 |
---|---|---|---|
pageScope | 当前页面中有效 | pageContext | PageContext |
requestScope | 一次请求范围 | request | HttpServletRequest |
sessionScope | 一次会话范围 | session | HttpSession |
applicationScope | 应用范围 | application | ServletContext |