问答式,让你快速了解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字符串。