A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【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?参数名=参数值"))



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马