web_day38_JSP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35537301/article/details/83590229

一、JSP介绍

1、JSP概念

  • java server page :运行在服务器端的页面技术,它是建立在Servlet规范之上的动态网页开发技术,jsp也是一个servlet
  • 如果用户访问服务器的是一个静态资源,那么直接响应过去
  • 如果是一个动态资源,那么需要先将这个动态资源转成静态资源再响应!

2、JSP作用

JSP是服务器端的动态资源,其主要作用是显示和获取数据

3、jsp特点

  1. 跨平台
  2. 业务代码相分离
  3. 组件重用
  4. 预编译:用户第一次访问,jsp只会编译一次(之后未对jsp源码进行修改)

4、JSP执行原理

二、JSP使用

1、jsp的语法

1.1 组成部分

  1. JSP脚本
  2. html标签
  3. 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的注释

  1. html注释:<!-- -->
  2. java注释://和/* */
  3. 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" %>
  1. uri:引入第三方库的哪一个库
  2. prefix:使用这个库相关标签的前缀
  3. 使用这个的时候需要导入第三个的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页面就可以直接使用)
jsp9大内置对象
名称 类型 描述
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页面容器

  1. 通过这个对象可以获得其它8个内置对象
  2. 它还提供了存储数据的功能。【pageContext对象作为域对象!】
pageContext获取其他8个内置对象
方法名 功能描述
JspWriter getOut() 用于获取out隐式对象
Object getPage() 用于获取page隐式对象
ServletRequest getRequest() 用于获取request隐式对象
ServletResponse getResponse() 用于获取response隐式对象
HttpSession getSession() 用于获取session隐式对象
Exception getException() 用于获取exception隐式对象
ServletConfig getServletConfig() 用于获取config隐式对象
ServletContext getServletContext() 用于获取application隐式对象
pageContext作为域对象的方法
方法名称 功能描述
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

猜你喜欢

转载自blog.csdn.net/qq_35537301/article/details/83590229