
JSP:一种动态web资源的开发技术
基本介绍:
1.JSP全名为Java Server Pages中文名叫java服务器页面 后缀名为(*.jsp)
2.用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
3.它实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP的四种数据保存范围
在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;
分别是:
- Page 范围:
- 只在一个页面中保存数据;
javax.servlet.jsp.PageContext
(抽象类)
- 只在一个页面中保存数据;
- Request 范围:
- 只在一个请求中保存数据;
javax.servlet.http.HttpServletRequest
(接口)(在同一个服务器内转发时。转发两个界面前后都可以访问到数据
)
- 只在一个请求中保存数据;
- Session 范围:
- 在一次会话范围中保存数据,仅供单个用户使用;
javax.servlet.http.HttpSession
(接口)(浏览器关闭的话就不可以访问数据了
)
- 在一次会话范围中保存数据,仅供单个用户使用;
- Application 范围:
- 在整个服务器上保存数据,所有用户共享;
javax.servlet.ServletContext
(接口)
- 在整个服务器上保存数据,所有用户共享;
JSP语法
- JSP模板元素:JSP页面中的HTML内容。定义了网页的基本骨架,即结构和外观。
- JSP表达式:用于将程序数据输出到客户端。如,
<%=变量或表达式 %>
脚本表达式(无分号),用于输出数据。 - JSP脚本片段:用于在JSP页面中编写多行java代码,严格遵循java语法。一个JSP页面可有多个脚本片段,它们可以相互访问(和放在一对
<% %>
中一样),单个片段可不完整。通过scriptlet标签我们可以在JSP里嵌入Java代码- 第一种
<%! %>
:我们可以在里面定义全局变量,方法以及类 - 第二种:
<% %>
我们可以在里面定义局部变量,编写语句 - 第三种:
<%= %>
我们可以在里面输出一个变量或则一个具体内容 和JSP语言里的out对象基本一样 譬如<%= b%>
- 第一种
- JSP声明:JSP中代码默认翻译到
servlet
的service
方法中,而JSP声明中的代码被翻译到_jspService
方法外。语法:<%! java代码 %>
。 - JSP注释:格式
<%-- 注释 --%>
,注释的内容不会发给浏览器。 客户端不可见 - JSP指令:是为JSP引擎设计的,定义了三个指令:
page指令
,include指令
,taglib指令
。语法:<%@ 指令 属性名="值" %>
。- page指令:定义各种属性,作用于整个JSP页面。
- include指令:用于
包含JSP文件
(页头、页脚)。属于静态包含
(编译时包含),它包含的所有JSP会编译成一个servlet
。 - taglib指令:用于在JSP页面导入
标签库
。
- JSP标签:也称为
jsp Action
元素,用于在jsp页面中提供业务逻辑功能,避免在jsp页面中直接写java代码而难以维护 - JSP内置对象:(也是九大隐式对象)
request
,response
,session
,application
,config
,page
,exception
,out
,pageContext
常用JSP指令
JSP包含指令
- 静态包含(先包含再编译处理)
<%@include file=”要包含的文件”%>
- 动态包含(先编译处理后包含)
<jsp:include page=”要包含的文件”%>
在日常开发过程中,以后用动态包含
JSP跳转指令
1 | <jsp:forward> |
注意:服务器内部跳转可带参数
,跳转以后基本网址并没有发生改变。客户端跳转则不可以带参数
内置对象详解
在 Jsp 开发中,Jsp 提供了 9 个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。这9 个内置对象分别是:request
,response
,session
,application
,config
,page
,exception
,out
,pageContext
常用的是前面 5个,需要熟练掌握;
pageContext对象
有两个常用函数:
pageContext.setAttribute(“name”,”hyoyew”);
pageContext.getAttribute(“name” );pageContext 内置对象
是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext 内置对象
由Jsp 容器
创建并初始化,pageContext 对象
提供了对 JSP 页面所有对象及控件的访问1
2
3
4
5
6
7
8
9
10
11
12
13//访问到本页面中所有对象
<%
pageContext.setAttribute("name0", "pageInfo");
request.setAttribute("name1", "requestInfo");
session.setAttribute("name2", "sessionInfo");
application.setAttribute("name3", "applicationInfo");
out.println("使用pageContext<br/>");
out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>
response对象
response 内置对象和 request 内置对象是相对应的。
就像一次电话包括拨打的人和响应的人
response 内置对象用于响应客户端请求,向客户端输出信息;javax.servlet.HttpServletResponse
接口
它的应用:
自动刷新应用(但是开发过程中一般使用JS实现刷新页面)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%> //引入的包
<!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>Insert title here</title>
</head>
<body>
<%
// 每隔一秒刷新一次页面
response.setHeader("refresh","1"); //refresh函数是底层提供的函数
// 获取当前时间
Date myDate=new Date(); //Date不是内置对象,需要导入包
%>
当前时间:<%= myDate.toLocaleString() %>
</body>
</html>页面重定向应用,实现客户端跳转
注意和服务端跳转是有区别的,服务端跳转时是可以带数据的,这里只能读取session
和location
的值,不能带数据
1 | <%@ page language="java" contentType="text/html; charset=utf-8" |
- 操作 cookie 应用
这里的Cookie
是本地的一个对象,是客户端的,就是在浏览器里可以找得到的
cookie 和 session 的比较
- cookie 信息是存客户端的,
- session 信息是存服务器的
Out 内置对象
out 内置对象的方法是向客户端输出数据和管理缓冲区;底层 javax.servlet.jsp.JspWriter
抽象类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22//向客户端输出各种类型的数据
</head>
<body>
<%
out.println("<h1>");
out.println("Hello Jsp Servlet");
out.println("</h1>");
%>
</body>
</html>
//管理应用服务器上的输出缓冲区。
<body>
<%
int totalbuffer=out.getBufferSize(); // 获取总共缓冲区的大小
int available=out.getRemaining(); // 获取未使用的缓冲区的大小
int user=totalbuffer-available; // 获取使用的缓冲区大小
out.println("总共缓冲区的大小:"+totalbuffer);
out.println("未使用的缓冲区的大小:"+available);
out.println("使用的缓冲区大小:"+user);
%>
</body>
Config 内置对象
Config 内置对象是 JSP 页面通过 JSP 容器进行初始化时被传递的对象。javax.servlet.ServletConfig
。
在 Servlet
初始化的时候,JPS 引擎通过 config
向它传递信息。
这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext
对象传递的服务器的有关信息;
exception 对象
Exception 内置对象用来处理 JSP 文件在执行时发生的所有异常,它是 java.lang.Throwable
类的一个对象
jsp与JavaBean
JavaBean
是一个遵循特定写法的java类,JavaBean
常用于封装数据,具有如下特点:
- 该java类必须有一个无参的构造函数
- 属性必须私有化
- 私有化的属性必须通过
public
类型的方法暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
JSP中提供了三个关于JavaBean
的标签:
<jsp:useBean>
:用于在JSP页面中查找或实例化一个JavaBean
组件<jsp:setProperty
用于在JSP页面中设置一个JavaBean
组件的属性<jsp:getProperty>
:用于在JSP页面中获取一个JavaBean
组件的属性
一些细节
<jsp:useBean>
标签的标签体只在实例化bean
时才执行<jsp:setProperty>
可用请求参数给bean属性赋值,支持8种基本数据类型的转换(把客户机提交的字符串转成相应的8种基本类型赋到bean的属性上)- 在标签中将
property="*"
,用所有请求参数为bean
赋值,请求参数名称和bean
属性名称必须要一致 - 如果
JavaBean
实例对象的某个属性值为null,那么使用<jsp:getProperty>
标签输出结果为“null”字符串
拾遗
在JSP文件中引入用到的Java包
格式:
<%@ page import="java.util.*" %>