Javaweb入门笔记-5-JSP技术

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中代码默认翻译到servletservice方法中,而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包含指令

  1. 静态包含(先包含再编译处理)
    <%@include file=”要包含的文件”%>
  2. 动态包含(先编译处理后包含)
    <jsp:include page=”要包含的文件”%>
    在日常开发过程中,以后用动态包含

JSP跳转指令

1
2
3
<jsp:forward>
<jsp:param value=”” name=””>//可以将带过去的两个参数通过request对象传送给下一个界面
</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 接口
它的应用:

  1. 自动刷新应用(但是开发过程中一般使用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>
  2. 页面重定向应用,实现客户端跳转
    注意和服务端跳转是有区别的,服务端跳转时是可以带数据的,这里只能读取sessionlocation的值,不能带数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ 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.sendRedirect("index.html");
%>
</body>
</html>
  1. 操作 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.*" %>
-------------本文结束感谢您的阅读-------------