【023】JavaWeb面试题(四):JSP

开篇介绍

大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaWeb系列的第四篇,主要总结了JavaWeb中JSP相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。

什么是 jsp,什么是Servlet?jsp 和Servlet 有什么区别?

定义:

jsp 本质上就是一个 Servlet ,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例

Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。

一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。

区别:

页面显示
逻辑控制

Jsp 运行机制:

【023】JavaWeb面试题(四):JSP

JVM 只能识别 Java 类,并不能识别 jsp 代码

web 容器收到以 .jsp 为扩展名的 url 请求时,会将访问请求交给tomcatjsp 引擎 处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译servlet 源程序生成 .class 文件,再由web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互。

jsp 有哪些域对象?

四大域对象:

pageContext page 域
request request 域
session session 域
application context 域

jsp有哪些内置对象?

对象 生命周期 作用域 使用情况
request 一次请求 只在 Jsp 页面内有效 用于接受通过 HTTP 协议传送到服务器的数据(包括头信息、系统信息、请求方式以及请求参数等)。
Reponse 一次响应 只在 Jsp 页面内有效 表示服务器端对客户端的回应。主要用于设置头信息、跳转、Cookie 等
Session 从存入数据开始,默认闲置 30 分钟后失效 会话内有效 用于存储特定的用户会话所需的信息
Out 用于在 Web 浏览器内输出信息,并且管理应用服务器上的输出缓冲区
PageContext 用于存取其他隐含对象,如 request、reponse、session、application 等对象。(实际上,pageContext 对象提供了对 JSP 页面所有的对象及命名空间的访问。
Page page 对象代表 JSP 本身(对应 this),只有在 JSP 页面内才是合法的
Exception 显示异常信息,必须在 page 指令中设定< %@ page isErrorPage="true" %>才能使用,在一般的 JSP 页面中使用该对象将无法编译 JSP 文件
Application 服务器启动发送第一个请求时就产生了Application 对象,直到服务器关闭。 用于存储和访问来自任何页面的变量所有的用户分享一个 Application 对象
Config 取得服务器的配置信息

<%…%>和<%!…%>的区别

<%…%> 用于在JSP页面中嵌入Java脚本

<%!…%> 用于在JSP页面中申明变量或方法,可以在该页面中的<%…%>脚本中调用,声明的变量相当于Servlet中的定义的成员变量。

forward与redirect 的区别?有哪些方式实现

区别:

  • forward是把另一个页面加载到本页面,不改变浏览器的路径
  • redirect是跳转到另一个页面,会改变浏览器的路径

实现方式:

response.sendRedirect("重定向的路径")
request.getRequestDispatcher("转发路径").forward(request, response);

浏览器与jsp,html之间的关系

1.JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览

2.在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求

3.JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关

jsp乱码如何解决,给出对应解决方案

1、JSP页面显示乱码
<%@ page contentType=”text/html; charset=gb2312″%>

2、表单提交中文时出现乱码 request.seCharacterEncoding("gb2312″) 对请求进行统一编码

3、数据库连接出现乱码 要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上 useUnicode=true&characterEncoding=GBK 就可以了。

4、通过过滤器完成

5、在 server.xml 中的设置编码格式

Servlet和CGI的区别?

  • Servlet处于服务器进程中,只会有一个servlet实例,每个请求都会产生一个新的线程,而且servlet实例一般不会销毁
  • CGI:来一个请求就创建一个进程,用完就销毁,效率低于servlet

如何避免jsp页面自动生成session对象?

<%@ page session="false" %>

JSP是如何被执行的?执行效率比SERVLET低吗?

当客户端向一个jsp页面发送请求时,Web Container将jsp转化成servlet的源代码(只在第一次请求时),然后编译转化后的servlet并加载到内存中执行,执行的结果response到客户端

jsp只在第一次执行的时候会转化成servlet,以后每次执行,web容器都是直接执行编译后的servlet,所以jsp和servlet只是在第一次执行的时候不一样,jsp慢一点,以后的执行都是相同的。


很遗憾的说,推酷将在这个月底关闭。人生海海,几度秋凉,感谢那些有你的时光。

原文 

https://segmentfault.com/a/1190000023346268

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 【023】JavaWeb面试题(四):JSP

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址