JSP

一、基本含义

1.1 JSP含义

项目含义
全称Java Sever Pages。Java 服务器页面
根本简化的Servlet设计。一种编程技术。
目的实现了在Java中使用HTML标签。
一种标准一种动态网页技术标准,也是JavaEE的标准
执行位置与Servlet一样,在服务器端运行。
组成元素HTML标签 + JSP标签 + Java程序片段(Scriptlet)。

1.1.1 特点

(1)构建动态Web应用程序。
(2)独立于平台的服务器端编程技术。
(3)可以访问整个Java API系列。
(4)可以认为它是Servlet的扩展。

1.1.2 使用JSP的目的

(1)可以通过网页表单收集用户的输入。
(2)从数据库或其他来源将数据记录处理。
(3)最后通过动态创建网页呈现。
(4)降低了对客户浏览器的要求。

1.1.3 JSP标签的目的

(1)从数据库检索信息或注册用户信息。
(2)访问JavaBeans组件。
(3)在页面之间传递控制以及在请求。
(4)页面之间共享信息。

1.1.4 优点

(一)平台无关性。
可以应用在不同的系统中。如Windows、Linux、Mac和Solaris。
(二)将内容与表示分离。
(1)业务处理代码全部放到JavaBean中
(2)或者把业务处理代码交给Servlet、Struts等其他业务控制层来处理。实现业务代码从视图层分离。
(3)JSP页面只负责显示数据。
(4)当需要修改业务代码时,不会影响JSP页面的代码。
(三)强调可重用组件。
(1)可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型
(2)在JSP页面甚至整个项目中都可以重复使用这个JavaBean。
(3)JavaBean也可以应用到其他Java应用程序中,包括桌面应用程序。
简化页面开发-Web 设计人员和 Web 程序员使用 Web 开发工具开发 JSP 页面
(四)高速。
(1)JSP会预编译,就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。
(2)编译好的代码将被保存,在用户下一次访问时,直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大提升了客户端的访问速度。

1.2 与Servlet关系

与Servlet的区别:
(1)更容易维护。使用JSP可以分开页面的设计和逻辑代码的开发。
(2)提供了一些额外的功能,如表达式语言,自定义标签等。
(3)JSP组件是一种Java servlet。

1.3 与HTML区别

项目JSPHTML
信息动态信息静态信息
运行位置服务器端客户端

1.4 JSP执行原理

1.4.1 顺序

(1)服务器先执行程序片段代码。
(2)再将结果和HTML代码返回给客户端。

1.4.2 为什么可以在jsp中嵌入java代码?

(1)因为jsp在执行需要先转译成为java代码。
(2)然后在编译成为class文件,也就是jsp的实质就是一个java文件。
(3)因此,jsp页面在第一次访问时,速度会比较慢。需要转译和编译两个步骤,以后就会非常快,因为可直接访问已经编译好的class文件了。

二、JSP页面组成元素

指令 + 表达式 + 小脚本+ 声明 + 注释 + 静态内容

2.1 指令

2.1.1 page

作用:定义页面依赖属性,例如脚本语言,错误页面和缓冲的要求
语法:<%@ page 属性1=“属性值” 属性2=“属性值” 属性3=“属性值” %>
位置:jsp页面顶端,可有多个page指令。

属性含义默认值
language指定JSP页面使用的脚本语言Java
import引用脚本语言中使用到的类文件
contentType指定JSP页面的编码方式text/html,ISO-8859-1
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" %>

2.1.2 include

<%@include file="date.jsp" %>

参见《JavaWeb-请求重定向、请求转发和包含》

2.1.3 taglib

作用:标签库 。使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt"  uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

2.2 注释

JSP页面注释:HTML注释 + 脚本注释 + JSP注释

2.2.1 HTML注释——<!-- -->

语法:<!-- html注释 -->
特点:客户端也可见。

<!-- html注释 -->
<%-- jsp注释 --%>
<%
  // 单行注释
  /* 多行注释 */
%>

2.2.2 JSP注释——<%-- --%>

语法:<%-- jsp注释 --%>
特点:客户端不可见。

<%-- jsp注释 --%>
<%
  // 单行注释
  /* 多行注释 */
%>

2.2.3 脚本注释

语法:// 单行注释
语法:/* 多行注释 */
特点:客户端不可见。

<%
  // 单行注释
  /* 多行注释 */
  out.println("Java语言书写,展示在页面上!");
%>

2.3 脚本——<% 脚本代码 %>

含义:在JSP页面中执行的Java代码。
语法:<% Java代码 %>

<%
  // 单行注释
  /* 多行注释 */
  out.println("Java语言书写,展示在页面上!");
%>

2.4 声明——<%! 变量或函数 %>

含义:在JSP页面中定义变量或者方法。
语法:<%! Java代码 %>

<% int a = 3; %>
<%! int b = 4; %>
<%-- 注意:a是局部变量。b是全局变量 %>
<%-- 声明:变量 --%>
<%! String str = "张三"; // 字符串变量。 %> 
<%-- 声明:函数 --%>
<%!
  int add(int x, int y) {// 声明了一个返回值为整型的函数。
    return x + y;
  }
%>
<%-- 调用 %>
你好,<%=str /* 调用变量 */> !<br />
x + y = <%=add(10,5) /* 调用声明的函数 */ %>

2.5 表达式——<%=表达式 %>

含义:在JSP页面中执行的表达式。
语法:<%=表达式 %>
注意:表达式后无“;”。

你好,<%=str /* 调用变量 */> !<br />
x + y = <%=add(10,5) /* 调用声明的函数 */ %>

三、JSP页面的生命周期

在这里插入图片描述
jspService():处理客户端请求。每一个请求,JSP引擎创建一个新的线程来处理请求。多客户端请求,形成多线程。采用多线程方式处理,可以降低对系统资源的需求,提高系统的并发量和响应时间。多线程会带来同步问题,但由于该Servlet始终驻于内存,所以响应快。
JSP处理
(1)浏览器→发送HTTP请求→Web服务器。
(2)Web服务器→识别HTTP请求是一个JSP页面(.jsp)→JSP引擎
(3)JSP引擎从磁盘加载JSP页面,并将其转换成servlet的内容。所有的模板文本被转换给println()语句,所有JSP元素被转换为实现该页面相应动态行为的Java代码。
(4)JSP引擎编译成servlet的一个可执行类并转发原始请求到servlet引擎。

(5)一部分Web服务器调用servlet引擎加载Servlet类并执行它。在执行期间,Servlet产生HTML的格式输出,其servlet引擎传递到web服务器响应HTTP请求。

(6)Web服务器响应HTTP转发静态的HTML内容到浏览器。
(7)最后的 web 浏览器处理HTTP响应动态生成的HTML页面完全就像一个静态页面内容

四、案例——九九乘法表

<%@ page language="java" contentType="text/html; charset=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>
	<h1>九九乘法表</h1>
	<%!
	  // 返回九九乘法表对应的HTML代码。通过表达式来调用,在页面上显示。
	  String printMultiTable(){
		 String str = "";
		 for(int i = 1; i <= 9; i++){
			for(int j = 1; j <= i; j++){
				str += i + " × " + j + " = " + (i * j) + "&nbsp;&nbsp;&nbsp;&nbsp;";// 空格转义字符。
			}
			str += "<br/>"; // 追加换行标签。
		  }
		  return str;
		}
		// JSP内置out对象,使用脚本方式调用,打印九九乘法表。
		void printMultiTable2(JspWriter out) {
			for(int i = 1; i <= 9; i++){
				for(int j = 1; j <= i; j++){
					try{
					  out.println( i + " × " + j + " = " + (i * j) + "&nbsp;&nbsp;&nbsp;&nbsp;");// 空格转义字符。
					}catch(Exception e){
						e.printStackTrace();
					}
				}
				try{
				  out.println("<br/>"); // 追加换行标签。
				}catch(Exception e){
					e.printStackTrace();
				}
			  }
		}
	%>
	<hr />
	<p>通过JSP表达式创建九九乘法表</p>
	<%=printMultiTable() %>
	<hr />
	<p>通过JSP内置对象out创建九九乘法表</p>
	<% printMultiTable2(out); %>
</body>
</html>

五、Web程序的请求响应模式

请求模式:指用户(客户端)的请求(request)。
响应模式:指Web服务器给用户的响应(response)。
示例:QQ登录。
用户:点击“登录”,向服务器发送请求。在请求对象中封装了用户名和密码。
Web服务器:接收请求。判断用户名和密码后,给用户响应页面。

六、缓冲区——Buffer

含义:就是内存的一块区域,用来保存临时数据。
目的:IO输出最原始的是一个字节一个字节输出,效率太低。提高数据的输出效率。
示例:网页(一碗米饭),一个字节(一个米粒),缓冲区(勺子),输出数据(吃饭)。一个米粒一个米粒吃,结果会怎么样?

七、JSP状态管理

7.1 http协议无状态性

含义:当浏览器发送请求给服务器时,服务器响应客户端请求。但是当同一个浏览器再次发送请求给服务器时,服务器不知道是同一个浏览器。即服务器无法记住你。

7.2 保存用户状态的两大机制

session:参见《JSP-内置对象》
cookie:参见《JSP-cookie》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值