转载

【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 请求时,会将访问请求交给tomcat 中 jsp 引擎 处理,每个 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
正文到此结束
Loading...