JSP入门必须了解的知识详解
问答式,让你快速了解JSP
什么是JSP?
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头 以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。可通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
什么是九大内置对象及其作用:
pageContext:是所有内置对象中最重要的内置对象,是JSP的上下文对象。作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。是JSP中独有的域。
application:是ServletContext类型的对象,可以在JSP中通过application调用ServletContext接口中的任何方法。将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。服务器启动后就产生了这个Application对象
session:是HttpSession类型的对象,调用HttpSession接口,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话
request:代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。
page:对象代表JSP本身,只有在JSP页面内才是合法的。
config:是ServletConfig类型的对象,使用config调用ServletConfig接口中的任何方法。作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。
out:是JspWriter类型的对象。用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
response:HttpServletResponse类型的对象,代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端
exception:作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用
除了request、response和page,其它都可通过pageContext来获取到。
JSP中的注释方法有哪些
HTML:<!--html注释-->
JSP:<%-- JSP注释 -- %>
JSP脚本中注释:<%//单行注释%>
<% /*多行注释*/%>
JSP各组成部分有哪些
静态内容:HTML静态文本
标准动作: 以”<jsp:action_name>”以”</jsp:action_name>”结束 如:<jsp:include page=”” />
指令: 以”<%@”开始,以”%>”结束
表达式: <%=Java表达式 %>
Java脚本: <% Java代码 %>
声明: <%! 方法 %>
注释: <!-- Html注释 -->、<!-- Jsp注释 -->
JSP脚本中注释:<%//单行注释%> 、<% /*多行注释*/%>
page和pageContext的区别
page java.lang.Objectpage对应this关键字。JSP网页本身,page对象是当前页面转换后的Servlet类的实例。
pageContext javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。
JSP指令
设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
常用的3个指令是哪些,用处是什么?
page、include、taglib。
page指令:
* import:等同与import语句
<%@ page import="java.util.*" %>
<%@ page import="java.util.*, java.net.*" %>
在一个JSP页面中可以给出多个page指令,而且import是可以重复出现的。
值得注意的是,import是page指令中唯一一个可以在一个JSP文件中多次出现的属性,其它属性在一个JSP页面中只能出现一次。
* pageEncoding:设置JSP页面的编码格式
如果pageEncoding没有指定,那么默认为contentType的值;
如果pageEncoding和contentType都没有指定,那么默认值为iso-8859-1。
* contentType:等同与调用response.setContentType("text/html;charset=xxx");
如果没有指定contentType属性,那么默认为pageEncoding的值;
如果contentType和pageEncoding都没有指定,那么默认值为iso-8859-1
* errorPage:设置JSP页面的错误页面。如果当前页面出现异常,那么跳转到errorPage指定的jsp页面。但并不会生成exception对象。
例如:<%@ page errorPage="error.jsp" %>
* isErrorPage:上面示例中指定error.jsp为错误页面,但在error.jsp中不能使用内置对象exception,保有error.jsp中使用<%@page isErrorPage="true"%>时,才能在error.jsp中使用错误页面。
** errorPage和isErrorPage为一对 常常一起出现。
注意:即使一个页面没有设置isErrorPage="true",也可以作为错误页面使用,区别在是否有内置对象exception内置对象产生。
* autoFlush:当autoFlush为true时,表示out流缓冲区满时会自动刷新。默认为true
* buffer:指定out流的缓冲区大小,默认为8KB
* isELIgnored:当前JSP页面是否忽略EL表达式,默认为false,表示不忽略,即支持EL表达式
page指令不常用的属性:
* language:当前JSP编译后的语言!默认为java,当前也只能选择java
* info:当前JSP的说明信息
* isThreadSafe:当前JSP是否执行只能单线程访问,默认为false,表示支持并发访问
* session:当前页面是否可以使用session,默认为false,表示支持session的使用。
* extends:指定JSP编译的servlet的父类!
3. web.xml中对jsp的配置
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern> <!--表示对所有jsp进行配置-->
<el-ignored>true</el-ignored> <!--忽略EL表达式-->
<page-encoding>UTF-8</page-encoding> <!--编码为utf-8-->
<scripting-invalid>true</scripting-invalid> <!--禁用java脚本-->
</jsp-property-group>
</jsp-config>
include指令:
语法:<%@include file="页面"%>
include指令的作用是包含指定的页面!在jsp被编译成java文件之前会把两个jsp文件合并,然后再编译成一个java文件
注意:
<%@include file="<%=myfile%>" %>
这是不能通过编译的,因为myfile是一个变量,它的值只有在java编译成class后执行时才能确定。而include指令需要在jsp编译java时就要确定包含的是哪个页面,所以...
taglib指令:
taglib指令是用来在当前jsp页面中导入第三方的标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:指定标签前缀,这个东西可以随意起名,
uri:指定第三方标签库的uri(唯一标识),
当然,需要先把第三方标签库所需jar包放到类路径中。
什么是Java脚本,作用是什么
脚本语言又称为扩建的语言,或者动态语言,是一种编程语言。用来控制软件应用程序一般都是以文本形式存在,类似于一种命令。只在被调用时进行解释或编译。介于HTML和C,C++,Java,C#等编程语言之间。由程序代码组成。
作用:
描述应用中复杂多变的业务逻辑,并在应用运行过程中进行动态修改
为应用提供一种领域特定语言(DSL),供没有技术背景的普通用户使用
快速进行组件之间的整合
快速开发出原型系统
快速编写测试用例等
JSP中write和print的区别
jsp中的out对象是JspWriter类型的.而JspWriter继承了java.io.Writer .
write方法是在在父类Writer中定义的,print方法是在子类JspWriter中定义的.
重载的print方法可以将各种类型的数据转换成字符串的形式输出.
重载的write方法只能输出字符、字符数组、字符串等与字符相关的数据.
print方法输出的结果是"null",而write方法则会抛出NullPoiterException异常.
out.write()是字节输出流的方法, out.print()是字符输出流的方法
在jsp中out是字符输出流,所以大部分都是用print。
表达式和脚本的区别
JSP脚本表达式:
用于将程序数据输出到客户端
语法:<%= 变量或表达式 %>
举例:当前时间:<%= new java.util.Date() %>
JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。
表达式的本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出。
脚本
就是在<% %>里嵌入Java代码
语句要以";"结束。语法:<% code %>
脚本的本质:就是将代码插入到Servlet的service方法中。
Include指令和动作的区别
include指令
通过file属性来指定被包含的页面。<jsp:include>动作通过page属性来指定被包含的页面。使用include指令,被包含的文件被原封不动的插入到包含页面中使用该指令的位置,然后JSP编译器再对这个合成的文件进行编译,所以在一个JSP页面中使用include指令来包含另一个JSP页面,最终编译后的文件只有一个。(静态包含)
include动作
include动作包含文件时,当该动作标识执行后,JSP程序会将请求转发到(注意不是重定向)被包含页面,并将执行结果输出到浏览器中,然后返回页面继续执 行后面的代码,以为web容器执行的两个文件,所以JSP编译器会分别对这两个文件进行编译。(动态包含)。
注意:(使用<jsp:include>动作通常是包含那些经常改动的文件,因为被包含的文件改动不会影响到包含文件,因此不需要对包含文件进行重新编译)
include和forward动作的区别
forward方法是把请求的内容转发到另外的一个servlet,就是转发另一个页面。
include是把另一个servlet处理过后的内容拿过来,就是把另一个页面加载到当前页面。
EL表达式
什么是EL表达式?作用是??
Expression Language, 是为了使JSP写起来更加简单。
它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
基本语法:${ 对象 }
JSP主要作用:实现动态页面,动态页面中最主要的作用就是把数据动态显示。
JSP表达式 <%=%>
提供了将一个java变量或表达式的计算结果输出到客户端的简化方式它将要输出的变量或表达式直接封装在<%= %>之中。
当传入一个空参数时,EL不显示,JSP表达式显示null。
EL内置对象,为了方便地输出数据。
a. EL中与请求参数有关的内置对象
param:用来输出请求参数的值,格式 ${param.请求参数名字}
paramValues:用来获取一对多的参数值,返回一个数组。
b. EL中与属性相关的内置对象
pageScope:页面范围,即pageContext范围
requestScope:请求范围
sessionScope:会话范围
applicationScope:上下文范围
当不指定范围时, 将自动从pageScope开始查找,直到applicationScope,如果没查到,则无显示。
c. 与请求头有关的内置对象
header:输出某一个请求头
${header.accept}输出请求头accept的值。
headerValues:如果某个请求头的值有多个,则使用headerValues返回一个数组。
d. 其它两个内置对象:cookie、initParam
cookie:用来获取cookie的值。
initParam:用来输出上下文参数的值。
使用EL输出path的值:${initParam.path}
e. 最特殊的内置对象:pageContext
EL中的pageContext对象可以钓鱼PageContext类中所有符合规范的getXxx方法,(不带参数)。
PS:调用时,后面的Xxx方法名小写。
如:public abstract ServletRequest getRequest()
通过EL表达式调用该方法: ${pageContext.request}。
JavaBean
什么是JavaBean,好处??
Javabean 是Java语言描述的软件组件模型,实际上是一个Java SE的类,
它的设计原则:
必须有public公有类、属性私有、setXxx()和getXxx()方法、无参的public构造方法。
好处:解决代码重复编写,减少代码冗余,功能呢个区分明确,提高了代码的维护性。
1. 与JavaBean有关的标准动作:useBean
<jsp:useBean id=” ” class=” 包名.类名”> scope=” ”>
id指向JavaBean对象名字, class中放入的是完整的包名+类名;
Scope有4个:
Page:PageContext范围,
Request:HttpServletRequest范围,
Session:HttpSession范围,和
Application:ServletContext范围。
若没有指定scope的值,则默认为page范围。
2. 与JavaBean有关的标准动作:setProperty
<jsp:setProperty name=” ” property=” ” param|value=” ”/>
setProperty标准动作可以对JavaBean对象的属性赋值,替代调用setXxx方法。name 对应的是JavaBean中的id值,property相同。
如果setXxx方法的参数是某一个请求参数的值,则使用param属性指定请求参数名字即可。
如果setXxx方法的参数是一个常量,则使用value属性指定即可。
* Name代表JavaBean中的id
3. 与JavaBean有关的标准动作:getProperty
<jsp:getProperty name=” ” property=” ” param|value=” ”/>
getProperty标准动作用来调用JavaBean对象的getXxx方法,将其返回值在当前位置输出。
补充:
JSON.parseObject,是将Json字符串转化为相应的对象;
JSON.toJSONString则是将对象转化为Json字符串。
JSP入门必须了解的知识详解相关推荐
- 小白入门!网络安全基础知识详解(附知识问答)
小白入门!网络安全基础知识详解(附知识问答) 一.引论 提到网络安全,一般人们将它看作是信息安全的一个分支,信息安全是更加广义的一个概念:防止对知识.事实.数据或能力非授权使用.误用.篡改或拒绝使用所 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
- 电子元器件从入门到精通pdf_电子元件入门基础,常用电子元器件详解大全作用-涨知识必读...
1.电子元器件筛选的必要性 电子元器件的固有可靠性取决于产品的可靠性设计, 在产品的制造过程中, 由于人为因素或原材料. 工艺条件. 设备条件的波动, 最终的成品不可能全部达到预期的固有可靠性. 在每 ...
- Python基础知识详解 从入门到精通(八)魔法方法
目录 Python基础知识详解 从入门到精通(八)魔法方法 什么是魔法方法 基础魔法方法(较为常用) 比较操作符 算数运算符 反运算(类似于运算方法) 增量赋值运算 一元操作符 类型转换 上下文管理( ...
- Oracle入门(一)之入门级知识详解
转载自 Oracle入门级知识详解 一. Oracle基本介绍 1. 什么时候用Oracle数据库? SQL SERVER 号称百万级数据(一个表的数据),但是其实做多20万条数据 超过20万条数据就 ...
- 计算机基础知识及其详解,计算机基础知识详解:计算机入门基础知识
能力训练网权威发布计算机基础知识详解,更多计算机基础知识详解相关信息请访问少儿综合素质训练网. [导语]以下是大范文网整理的计算机基础知识详解,欢迎阅读! 1.第一台计算机-ENIAC 大家只要知道第 ...
- LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用
LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用. ...
- html css data-,HTML+CSS入门 HTML自定义data属性详解
本篇教程介绍了HTML+CSS入门 HTML自定义data属性详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门.< 可以在HTML标签上添加任意以 "data-&q ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- R语言可视化绘图基础知识详解
R语言可视化绘图基础知识详解 图形参数:字体.坐标.颜色.标签等: 图像符号和线条: 文本属性: 图像尺寸及边界: 坐标轴.图例自定义等: 图像的组合: #install.packages(c(&qu ...
最新文章
- 安装zookeeper集群及出现的问题
- JVM 堆内存溢出后,其他线程是否可继续工作?
- 2016 亚洲共识指南:肺结节的评估
- Amoeba for MySQL
- 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用
- python多线程编程(7):线程间通信
- 蓝桥杯第八届省赛JAVA真题----分巧克力
- “强化学习说白了,是建立分布到分布之间的映射”?数学角度谈谈个人观点
- 1039 字符消除 java_Hihocoder 1039 字符消除
- python 清屏_见识Python百宝箱,十行代码制作动态广告牌
- Hadoop入门(一篇就够了)
- C#开发串口调试助手的详细教程
- idea pull从远程库拉取最新代码
- 计算机打开共享网络连接打印机共享打印机,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
- PMP第五版考试易混知识统计
- 关于加减运算时能否使用等价无穷小的问题
- VMware安装windows server 2008 r2详细教程
- 如何做精品网站的心得
- PS磨皮插件DR5白金版修图加强版滤镜后期一键调色mac/win
- 利用MHT类型,免杀宏病毒
热门文章
- 公众号运营实用小工具推荐
- php ci框架开发手册下载,CI快速开发中文手册
- 【解决:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2....Could not star】
- 时间管理——番茄工作法
- 京东把 Elasticsearch 到底用的有多牛?日均5亿订单查询完美解决!
- 安装 Maxwell
- SATI统计分析文献--以关键词为例
- AMOS分析技术:二阶验证性因子分析
- 3DMAX哪个版本最稳定?3DMAX哪个版本最好用?
- 用代码生成Glitch Art风格的抖音字体