JSP入门知识点解析之九大内置对象
来源:互联网 发布:java线程对象锁 编辑:程序博客网 时间:2024/06/05 10:18
一,JSP简介
JSP是一种运行在服务器端的脚本语言,是用来开发动态网页的,该技术是JavaWeb程序开发的重要技术.
JSP是一种动态网页技术标准,它是在静态网页HTML代码中加入Java程序片段(Scriptlet)和JSP标签(Tag),构成JSP网页文件,该文件扩展名为:.jsp.
当客户端请求JSP文件时,服务器执行该JSP文件,然后以HTML的格式返回给客户端,及JSP程序的执行是由Web服务器来完成的.
二,JSP的作用
- Servlet:
- 缺点:不适合设置html响应体,需要大量的response.getWriter().print(“xxx”);
- 优点:动态资源,可以编程.
- html:
- 缺点:html是静态页面,不能包含动态信息
- 优点:不用为输出html标签而发愁
- JSP:(Java Server Page)
- 优点:在原有html的基础上添加java脚本,构成JSP页面.
三,JSP和Servlet的分工
- JSP:
- 作为请求发起页面,例如显示表单,超链接.
- 作为请求结束页面,例如显示数据.
- Servlet:
- 作为请求中处理数据的环节.
四,JSP的组成
- JSP=html+java脚本+jsp标签(指令)
- JSP中无需常见即可使用的对象一共有九个,也就是九个JSP内置对象.例如:Request对象,out对象等
- 3种java脚本:
- <% … %>:java代码片段(常用),用于定义0~N条java语句;
- <%= … %>:java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果.
- <%! … %>:声明,用来创建类的成员变量和成员方法(基本不用)
- 基本原理:
- 当JSP页面被第一次访问时,服务器会把JSP文件编译成java文件(就是一个Servlet类)
- 然后在把.java文件编译成.class字节码文件
- 执行.class文件,创建该类对象
- 调用该对象的service()方法
- 第二次请求同一jsp文件时(该文件未被修改过),直接调用service()放方法.
五,JSP语法
JSP页面主要是将JSP代码放在特定标签中,再嵌入到HTML代码中形成的.
开始标签,结束标签,元素内容三部分组成的整体,称为JSP元素.
JSP元素分为三种类型,基本元素,指令元素,动作元素.
1,基本元素
(1)JSP注释
- 格式:<%– … –%> 当服务器把jsp编译成.java文件时,已经忽略了注释部分,也就是说jsp的注释是不会被发送到客户端浏览器上的
- HTML的注释会被编译进.java文件中,会被发送到客户端浏览器上,只不过不显示出来.
(2)JSP声明
在JSP页面中可以声明变量和方法,声明后的变量和方法可以在本JSP页面内的任何位置使用.并在JSP页面初始化时被初始化.
<!-- 语法格式 --><%! 声明变量,方法,类 %><%! int i = 0; public void fun(){ } class Fun{ public Fun(){ //TODO 构造方法 } }%>
(3)JSP表达式
JSP表达式是由变量,常量组成的算式,它将JSP生成的数值转换成字符串嵌入HTML页面,直接显示出来.
<!-- 语法格式 --><%=表达式内容%><p>i的值为:<%=i%></p>
(4)JSP代码块
JSP代码块可以包含任意合法的Java语句.
<% 合法的Java代码%>
(5)关于成员变量与局部变量
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>演示成员变量与局部变量</title></head><body><%! int a = 10;%><% int a = 20;%>a的值到底是多少呢?<br/>成员a=<%=this.a%><br/>局部a=<%=a%><br/>成员a自加=<%=++this.a%><br/>局部a自加=<%=++a%></body></html>
结果:
结论:
- 如果不使用this指代,那么使用的就是局部变量.
- 多次访问同一个jsp页面,也就是在操作同一个对象,所以做自加操作的话该对象的成员变量才会一次次自加.而局部变量不会.
2,指令元素
JSP指令是被服务器解析并执行的,通过指令元素可以使服务器按照指令的设置执行动作或设置在整个JSP页面范围有效的属性.
JSP指令不直接产生可见输出.
指令的分类:page指令,include指令,taglib指令.
JSP指令的语法格式:
<%@ 指令名称 属性=”属性值1” 属性2=”属性值2” …%>
(1)page指令
page指令用来定义JSP页面的全局属性,它描述了与页面相关的一些信息,其作用域为它所在的JSP文件页面.
page指令的语法规则:
<%@page language="脚本语言"//(基本没用,指定jsp编译后的语言类型,只能编译java,默认为java) extends="继承的父类名称"//让jsp生产的Servlet去继承该属性指定的类,(基本不用) import="导入的Java包或类的名称" session="true/false"//当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象 buffer="none/8kb/自定义缓冲区大小"//指定缓冲区大小,默认为8kb,通常不需要修改 autoFlush="true/false"//指定,当jsp输出流缓冲区满时,是否自动刷新(要输出的东西多了,是不是自动刷新),默认为true,如果为false,那么在缓冲区满时抛出异常. isThreadSafe="true/false"//是否支持并发访问,默认为false(没用) isELIgnored="true/false"//是否忽略el表达式,默认值为false,不忽略,老版本的jsp默认是true(基本看不到了),现在已经改成false了 info="页面信息"//(没用) errorPage="当前页面若是发生错误,要转向哪个页面,就由这个属性来指定(相对路径,不包含项目名)(状态码为200)" isErrorPage="true/false"//它指定当前页面是否为处理错误的页面(状态码为500)(只有设置这个属性为true时,才能使用九大内置对象中的exception) pageEncoding="页面编码类型"//当Tomcat要把jsp编译成.java时,需要使用pageEncoding属性 contentType="text/html; ISO-8859-1" // 添加一个contentType="MIME类型和字符集"响应头 //等同于response.setContentType="text/html;ISO-8859-1" //页面编码类型pageEncoding和contentType响应头,如果只设置一个为utf-8,那么另一个会默认也被设置未utf-8 //如果都不设置,则默认为iso%>
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 在web.html页面中设置error-page标签 --> <error-page> <!-- 如果错误信息为404,则跳转到error404.jsp页面 --> <error-code>404</error-code> <location>/jsps/error404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/jsps/error500.jsp</location> </error-page> <error-page> <!-- 如果抛出空指针异常,则跳转到errorDemo.jsp页面 --> <exception-type>java.lang.NullPointerException</exception-type> <location>/jsps/errorDemo.jsp</location> </error-page></web-app>
注:
- 一个页面可以有多个<%@page%>指令来分别描述属性.
- 在一个<%@page%>指令中,除了import属性可以被使用多次外,其他属性只能被使用一次.
- <%@page%>指令区别大小写的.
常用的使用格式:
<%@page language="java" <!-- 设置的是请求,服务器返回的HTML页面代码的编码 --> contentType="text/html;charset=utf-8" <!-- 设置JSP页面本身的编码 --> pageEncoding="utf-8" <!-- 当JSP页面中使用了某些java类库时需要设置下面的import属性 --> <!-- 一般都会采用MVC设计模式,也就不需要使用import属性 --> import="java.util.*"%>
(2)include指令(静态包含)
include指令称为文件加载指令,可以将其他的文件插入JSP网页,被插入的文件可以是JSP文件,HTML文件或者其他文本文件,必须保证插入后形成的新文件符合JSP页面的语法规则.
- 与RequestDispatcher的include()方法的功能相似!区别在于包含的时间点不同.
- <%@include%>是在jsp编译成java文件时完成的—>包含的文件与当前文件共同生成一个java(一个Servlet)文件,然后再生成一个class.
- RequestDispatcher.include()是一个方法,包含和被保护的是两个Servlet,即两个.class,他们只是把响应的内容在运行时合并了.
- 作用:将页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就可以作为一个独立的jsp存在,而我们只需要处理变化的变量.实现可重用.
include指令语法规则:
<%@include file="文件名"%>
注: 被插入的文件必须与当前JSP页面在同一Web服务目录下.
(3)taglib指令
taglib指令用来定义一个标记库以及标记的前缀,不要用jsp,jspx,java,javax,servlet,sum和sunw为自定义标签的前缀.
taglib指令语法规则:
<%@taglib uri="指定标签库所在位置" prefix="标记前缀" %><%@taglib uri="/libs/commons-dd" prefix="d" %>// 当使用commons-dd库中的text标签时的写法// 这就是d标记前缀的作用,处理名字冲突,如果多个标签库中都有text标签,就可以通过标记前缀区分<d:text>
使用JSTL核心标签库时会常用.
3,动作标签
动作标签由服务器(Tomcat)执行,在服务器端执行,一共有二十个,很少用.
html标签由浏览器来执行.
JSP动作元素是用来控制JSP引擎的行为,JSP标准动作标签均以”jsp”为前缀,主要有如下6个动作元素.
- :在页面得到请求时动态包含一个文件.
- :引导请求进入新的页面(转向到新页面)(请求转发)
- :连接客户端的Applet或Bean插件
- :应用JavaBean组件
- :设置JavaBean的属性值
- :获取JavaBean的属性值并输出
(1)动作
语法格式:
<jsp:include page="文件的名字"/>
功能:
- 当前JSP页面动态包含一个文件,即将当前JSP页面,被包含的文件各自独立编译为字节码文件.
- 执行到该动作标签处,才加载执行被包含文件的字节码.
(2)动作
语法格式:
<jsp:forward page="文件的名字"/>
功能:
- 该动作用于停止当前页面的执行,转向另一个HTML或JSP页面
- 该动作用于控制界面间的前后跳转,跳转时携带着内置对象Request中的信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>动态转发</title></head><body><h1>a.jsp</h1><%--动态转发--%><jsp:forward page="b.jsp"> <%--也可以携带参数--%> <jsp:param name="user" value="zz"/> <jsp:param name="password" value="123"/></jsp:forward></body></html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>b</title></head><body><h1>b.jsp</h1><% String user = request.getParameter("user"); String password = request.getParameter("password"); out.print(user+"--"+password);%></body></html>
六,JSP内置对象
九大内置对象
主要是为了方便页面之间的数据共享,JSP专门设置了九个内置对象,这些对象不需要创建,在写代码的时候直接使用就ok.
session对象
用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这一段时间成为一次会话.
session对象的生命周期就是一次会话的过程,session对象保存的信息,可以在该会话过程中的不同页面之间共享.
一般用来保存用户名和密码,在登录后的后续页面中,直接判断session中的内容即可.
pageContext对象
JSP中有四大域:
- servletContext(application)
- 整个应用程序
- session
- 整个会话(一个会话只有一个用户)
- request
- 一个请求链(可能有多个Servlet)
- pageContext
- 当前的jsp页面,这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据(当前jsp页面与当前jsp页面中使用的标签之前就属于跨域的关系)
- 域对象,可以代理其他域:
- pageContext.setAttribute(“xxx”,”XXX”,PageContext.SESSION_SCOPE);将属性保存到了session域中
- 全域查找:pageContext.findAttribute(“xxx”);该方法会在四个域中都查找,从小到大依次查找.(重要)
- 所以在设置属性名时可以给一个前缀区分:session_xxx,request_xxx等.
- 获取其它八个内置对象:pageContext.getXXX();即可
- JSP入门知识点解析之九大内置对象
- jsp九大内置对象及解析
- jsp九大内置之request对象
- jsp九大内置对象之out
- JSP九大内置对象之session
- jsp之九大内置对象
- JSP之九大内置对象
- Javaweb之JSP九大内置对象
- jsp总结之九大内置对象
- jsp九大内置对象之request
- JSP之九大内置对象详解
- JSP九大内置对象详解&JSP入门
- JSP九大内置对象
- JSP内置九大对象
- JSP九大内置对象
- JSP九大内置对象
- jsp 九大内置对象
- JSP九大内置对象
- MySQL修改root密码的多种方法
- 下载与安装
- Arcpy批量修改FileGDB中的FeatureClass和Table的指定字段
- vue之计算属性
- Java三大器之拦截器(Interceptor)的实现原理及代码示例
- JSP入门知识点解析之九大内置对象
- Android:正则表达式-android固话(座机)的验证
- linux定时执行sh文件
- 同一页面多个swiper出现错乱问题
- mysql分库
- 面试题记录第十节——(okhttp、retrofit网络框架)
- Intelligent.Light.FieldView.v15.Linux64 1CD
- Jedis客户端操作redis缓存命令详解
- HTTPS 与 HTTP 介绍