黑马程序员技术交流社区
标题:
【广州校区】【原创】JSP常见问题精华总结
[打印本页]
作者:
帅气de路人甲
时间:
2018-3-19 15:49
标题:
【广州校区】【原创】JSP常见问题精华总结
【001】什么是JSP?有什么特点?
答:
JSP(Java Server Pages)本质是 Servlet 技术,即一种基于Java语言的开发动态web资源技术,该技术运行在服务器端的程序
特点:
JSP页面被动态编译成Servlet,因此开发者更容易更新用户界面
JSP代码跨平台,即一次编写,处处运行
JSP标签可扩充性好,允许开发者扩展JSP标签,定制标签库
JSP拥有Java语言的特性:跨平台、业务代码分离、组件重用和预编译等特点
【002】JSP是如何运行的,原理是什么?
答:
① 客户端发出请求(request),请求访问JSP页面
② JSP Container将要访问的 .jsp 文件转译成 Servlet 源代码(.java)文件
③ 将产生的Servlet源代码(.java)文件经过编译,生成 .class 文件,并加载到内存执行
④ 将结果相应(response)给客户端
即:
客户端 --① 请求--> jsp文件 --② 转换--> servlet文件 --③ 编译--> .class文件 --④ 执行--> servlet实例 --⑤ 返回响应--> 客户端
【003】JSP常用的注释有几种?分别是什么?
答:
2种。HTML注释 和 隐藏注释(jsp专有注释)
① HTML注释
能在客户端显示的一个注释,标记内的所有 JSP脚本元素、指令和动作正常执行,也就是说编译器会扫描注释内的代码
② JSP注释
用隐藏注释标记的字符会在JSP编译时被忽略掉,标记内的所有JSP脚本元素、指令和动作都将不起作用。也就是说JSP编译器不会对注释内的任何语句进行编译,期代码也都不会显示在客户端浏览器的任何位置
【004】JSP基本语法有哪些?
答:
有2种注释、3个脚本元素、3个指令元素、8个动作指令
① JSP模板元素
JSP页面中的HTML内容称之为JSP模板元素
JSP模板元素定义了网页的基本骨架,即定义了页面的结构和外观
② JSP注释
JSP注释有2种,
html注释:
会发送到客户端,格式:<!-- comment [ <%= expression %> ] -->
jsp注释:
不会在客户端显示,格式:
<%-- 这是一个jsp单行注释 --%>
<% /* 这是一个jsp多行注释 */ %>
区别:
运行的时候HTML的注释可以通过源码看到;而JSP的注释无法看到,更加安全
③ JSP脚本元素
申明:
语法:<%! Java代码 %>
用于声明整个页面的成员变量或方法
JSP声明的java代码被翻译到 _jspService 方法外面,即实例变量
多个代码块、变量和函数可以定义在同个JSP声明中,也可以定义在多个JSP声明中
JSP隐式对象的作用范围仅限于Servlet的 _jspService方法,所以JSP声明不能使用
表达式:
语法:<%= 变量或表达式 %>
JSP脚本表达式(expression)用于将程序数据输出到客户端
JSP引擎将数据转为字符串,然后在相应位置将out.write(...) 数据输给客户端
JSP脚本表达式中的变量或表达式后面不能有分号(;)
脚本段:
语法:<% Java代码 %>
Java程序段被包含在程序段内,其中也可以进行变量、方法等的声明
JSP引擎将Java脚本段中的Java代码翻译到Servlet的 _jspService方法中
多个脚本片段之间可以嵌入文本、HTML标记和其它JSP元素,并可以互相访问
单个脚本片段中的Java语句可以不完整,但多个组合后的结果必须是完整的Java语句
JSP脚本片段中每条执行语句后面必须用分号(;)结束
④ JSP指令元素
语法:<%@ 指令 属性名="值" ... %>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写
page指令
常用于JSP页面顶端,用来定义全局属性,如编码、错误页面、导包等
include指令
语法:<%@ include file="relativeURL" %>
用于引入其它JSP页面,之后由JSP引起将这2个JSP翻译成1个Servlet
include指令引入也叫静态引入(静态导入)
file属性指定被引入文件的相对路径
必须使用相对路径
如果不以 " \ " 开头,表示相对于当前文件
如果以 " \ " 开头,表示相对于当前web程序的根目录(注意不是站点根目录)
被引入文件可以使用任意扩展名,但必须遵循JSP语法
静态引入需注意防止公共标签的冲突,因为2个页面之间的数据是共用的
taglib指令
语法:<%@ taglib uri="..." prefix="..." %>
声明页面的自定义标签
⑤ JSP动作指令
内部跳转(请求转发):
语法:<jsp:forward page="...">
从1个jsp文件向另1个jsp文件传递1个包含用户请求的request对象,标签后的jsp脚本不执行
该语句实现页面跳转,并可携带相关参数,地址栏数据不变,不会显示参数信息
包含页面:
语法:<jsp:include page="...">
该动作为动态包含jsp页面,与静态包含不同,在jsp页面运行时动态加入
创建Bean对象:
语法:<jsp:useBean id="..." scope="..." class="...">
id :JavaBean是一个类,不同实例用id区分
class :JavaBean的类名
scope :默认为page,主要有以下4个域对象
page :创建Bean的jsp以及此文件中的所有静态包含文件
request :同一个请求,直到客户端发起下一个请求为止
session :整个会话,近似理解为关闭浏览器为止
application :整个application,服务器一开始执行到服务器关闭为止
设置Bean属性:
语法:
将bean属性的值设置为一个字符串:
<jsp:setProperty name="..." property="..." value="...">
通过表单的参数值来设置bean的相应属性值,表单属性和bean属性应该同名
<jsp:setProperty name="..." property=" * ">
<jsp:setProperty name="..." property="..." param="...">
取得Bean属性:
语法:<jsp:getProperty name="..." property="...">
定义参数:
语法:<jsp:param name="..." value="...">
param不能单独使用,必须作为<jsp:include>,<jsp:forward>,<jsp:plugin>等标记的子标记
使用Applet插件:
语法:<jsp:plugin>
插件错误提示:
语法:<jsp:fallback>
【005】JSP中动态 INCLUDE 与静态 INCLUDE 的区别?
答:
① 使用的元素不同:
静态包含用的元素是file,只有1种表现形式
动态包含用的元素是page,有2种表现形式
② 生成的文件不同:
静态包含将jsp文件2合1,生成一个以包含页面命名的servlet和class文件
动态包含的2个jsp文件各自生成自己的servlet和class文件
③ 能否传参不同:
静态包含传递时不能携带参数
因为静态包含发生在jsp页面转换为servlet的转换期间,此时的参数是服务器端设置的固定参数,完全没有经过客户端,这种参数是没有意义的,而且设置参数会报错
动态包含传递时可以携带参数
传参方式1:
<jsp:include page="a.jsp?param=123">
传参方式2:
<jsp:include page="a.jsp">
<jsp:param name="..." value="...">
</jsp:include>
【006】JSP的隐含对象有哪些,分别有什么作用?
答:
① out :JspWriter,用于发送输出流到客户端(相当于带缓存的PrintWriter)
② request :源于HttpServletRequest接口,被关联到每个HTTP请求
③ response :源于HttpServletResponse接口,用于把取得的数据返回到客户端
④ pageContext :提供访问JSP页面的命名空间,用来访问其它的JSP隐含对象
⑤ session :源于HttpSession,用于存储客户端请求的信息,因此它有状态交互式
⑥ application :源于ServletContext
⑦ config :源于ServletConfig,包含了当前JSP / Servlet所在的web应用的配置信息
⑧ page :源于当前被访问JSP页面的实例化,它实际使用的是JSP转换成的Servlet
⑨ exception :用于捕获JSP抛出的异常,只在JSP页面属性isErrorPage=true时才可用
【007】JSP中的out隐含对象什么时候去调用getWriter方法?
答:
只有向out对象写入内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区内容真正写入到Servlet引擎提供的缓冲区中
① out对象的缓冲区已满
② 整个JSP页面结束
【008】JSP的域对象有哪些?
答:
page :当前页面
request :当前会话:一次请求范围内有效
session :浏览器进程:只要当前页面没有被关闭,不管怎么跳转都是有效的
application :服务器:只要服务器没有重启,数据就有效
【009】JSP两种跳转方式分别是什么?有什么区别?
答:
重定向和请求转发
重定向 :
语法:<jsp:forward page="跳转页面地址">
发了2次请求,及产生2个request对象,重定向会导致第1次request对象信息丢失
请求转发 :
语法:response.sendRedirect("跳转页面地址");
发了1次请求,地址栏一直是第1次请求的地址,request不会丢失
区别:
① forward跳转
服务器端跳转,地址栏不变
执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转前必须释放所有资源)
request设置的属性在跳转后的页面仍然可以使用
② response跳转
客户端跳转,地址栏改变
所有代码执行完毕后跳转
request设置的属性在跳转后的页面不可以使用
使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2