JSP
jsp基础语法
jsp基本概念
JSP(全称JavaServerPages)是由SunMicrosystems公司主导创建的一种动态网页技术标准。
JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
注意:
- jsp是运行在服务器上的,一种基于Java的服务器端技术;
- 常见的服务器:tomcat、WebLogic、WebSphere等
- jsp的执行的流程是同Servlet一样的,其实jsp就是作为一个默认的Servlet进行执行;
- jsp页面中通过使用page指令,标注给服务器,让服务器作为jsp进行编译处理;
- 在jsp页面使用<%…%>插入java脚本(插入java代码);
该种用法在当前web开发中已经废弃不用,了解即可;
jsp页面由jsp指令、标签、html、xml、文本等组成;
jsp的元素:脚本元素、指令元素、动作元素;
jsp声明变量
jsp使用 <%! %>声明的变量等价于类的成员变量;普通方式的变量等价于类的局部变量;
jsp的注释
jsp使用 <%-- --%>”的方式来注释,注释的内容不参与jsp的解析执行;
jsp的指令
page指令
描述了和页面相关的信息,如:导入所需类包、指明输出内容类型、控制Session等。
include指令
在页面翻译期间引入另一个文件,被包含的文件可以是JSP、HTML或文本文件。
include指令会先将当前JSP和被包含的文件融合到一起形成一个Servlet再进行编译执行;因此包含文件时,必须保证新合并生成的文件符合JSP语法规则。
例如,当前文件和被包含文件的不能同时定义同名的变量,否则当前文件将不能编译通过,会提示Duplicatelocalvariable错误。
taglib指令
指定JSP页面所使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签。引入标签库中的标签;
动作元素
jsp用于执行特定动作的标签.
include动作
动作用于在页面被请求时引入一个文件;
用于在页面运行时引入一个静态或动态的页面,也称为动态包含。
当容器把JSP页面翻译成Java文件时,并不会把JSP页面中动作指令include指定的文件与原JSP页面合并成一个新页面,而是告诉Java解释器,这个文件在JSP运行时才被处理。
jsp:include元素如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;
如果包含的文件是JSP文件,JSP容器就执行这个文件,然后将执行结果发送到客户端,由客户端负责显示这些结果。
include动作配合param动作可以将参数值传递给被include加载的jsp中,在被include加载的jsp中使用request.getParameter(“参数名”) 来获取该参数的值;
forward动作
用于引导客户端的请求到另一个页面或者另一个Servlet。类似action请求;
forward动作配合param动作可以将参数值传递给跳转的的jsp中,在被跳转到的jsp中使用 request.getParameter(“参数名”) 来获取该参数的值;
useBean动作
是JSP中一个非常重要的动作,使用这个动作,JSP可以动态使用JavaBean组件来扩充JSP的功能;
bean等价于创建了一个java类的实例对象;
setProperty动作
动作用于向一个JavaBean的属性赋值,需要和jsp:useBean动作一起使用。等价于java类中的set方法接口;
注意:要去bean类为设值的属性提供setter接口;否则报错;
getProperty动作:
动作用于从一个JavaBean中得到某个属性的值,不管原先这个属性是什么类型的,都将被转换成一个String类型的值。
等价于java类中的get方法接口;
注意:要去bean类为设值的属性提供getter接口;否则报错;
param动作
进行参数的设置;一般和include、forward进行搭配使用,不能单独使用;
jsp的内置对象
jsp的内置对象
jsp运行在web服务器,本身就是一个Servlet类,在jsp初始化时,就是web容器为jsp初始化一些常用的内置对象(成员变量);
jsp的内置对象的名字是固定的,无需初始化,可以直接使用;
内置对象的特性:
- JSP内置对象是指在JSP页面中,不用声明就可以在脚本和表达式中直接使用的对象。
- JSP内置对象也称隐含对象,它提供了Web开发常用的功能,为了提高开发效率,JSP规范预定义了内置对象。
JSP内置对象有如下特点:
- 内置对象由Web容器自动载入,不需要实例化;
- 内置对象通过Web容器来实现和管理;
- 在所有的JSP页面中,直接调用内置对象都是合法的。
jsp九大内置对象
out
将内容输出到用户端浏览器进行显示;类似于:System.out的使用,输出到控制台;
request
表示用户端浏览器发送的一次服务器请求;(使用的是http通信协议)
response
表示服务器对用户浏览器的一次响应;(使用http通信协议)
session
表示一次会话;包括request阶段和response阶段;在一次会话过程中,可以有多次请求和响应;
application
表示一次应用程序的启停;(表示程序从开始运行,到整体结束这个过程)
范围最大;生命周期最长;作用域为整个Web容器的生命周期。
pageContext
表示一次页面程序的启停;(表示页面初始化开始到页面结束);
作用域范围最小,生命周期最短;作用范围为当前JSP页面。(类似于类的this的使用,局限于当前类使用)
config
表示的jsp执行时web容器读取到的初始化的配置信息存储在config对象中;从这个对象可以获取到与运行参数相关的配置信息;
error
表示jsp页面发生错误的信息都存储在该对象中;
exception
表示jsp页面发生异常的信息都存储在该对象中;
jsp的四种作用域对象 ★★★
在jsp的九大内置对象中的pageContext、request、session、application这四个对象,存在生命周期和作用域范围,一般常被用来进行一些缓存处理;
四种作用域的生命周期和可访问性介绍如下:【高级的web开发还在使用的技术】
页面域(page scope)
页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的(仅限于当前页面使用)。
使用pageContext对象;
请求域(request scope)
请求域的生命周期是指一次请求过程(用户端浏览器发送请求到服务接收接收这个阶段),
包括请求被转发(forward)或者被包含(include)的情况。
存储在请求域中的对象只有在此次请求过程中才可以被访问。
使用request对象;
会话域(session scope)
会话域的生命周期是指某个客户端与服务器所连接的时间,包括request阶段和response阶段;在一次会话过程中,可以有多次请求和响应;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。
使用session对象;
应用域(application scope)
应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有JSP和Servlet共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。
使用application对象;
存储在application中的数据是可以被多个pageContext、request、session对象同时访问;
总结:
-
一般用于数据存储,就是把数据存储在这四个作用域对象中,使用的时候,再从这四个作用域对象中取出;
-
缓存作用】存储范围从小到大;生命周期从小到大:
pageContext(page)、request、session、application -
pageContext(page)、request、session仅对当前用户有效,例如;用户a不会访问到用户b存储在这三个对象中的值;
-
application范围最大、生命周期最长,所有的用户之间的数据都是可以互相访问的;
-
jsp的四种作用域都是运行在服务器端的;由web服务器进行维护和管理;
-
在缓存对象中一般使用setAttribute设值,使用getAttribute取值;这是一种一对操作,get方法的参数名和set方法的参数名要保持一致;
课下作业:
查询一下tomcat服务器中,四种作用域的默认的各自的生命周期的长度?
jsp的登录实现【web开发基本流程】
登录实现的原理
1、使用form表单将客户端浏览器中的数据通过http协议的request请求发送给服务器;
2、服务器接收到请求之后,使用request对象的getParameter方法获取form表单中的数据;
3、使用out对象或者response对象把服务器处理的结果内容发回用户浏览器进行显示;
注意:
- form表单的action属性用于指明服务器响应的路径地址;
- form表单的method方法用户指定request请求中数据发送到服务器的方式;
- form表单提交必须使用submit类型的按钮或者使用submit方法才可以提交request请求到服务器;
- 服务器接收到请求之后使用request对象的getParameter方法获取发送过来的form表单中的数据;
- request的getParameter方法的参数必须和form表单中的标签控件的name属性值保持一致;