开篇介绍

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

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

定义:
jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例。
Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。
一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。

区别:

  • jsp 是 html 页面中内嵌的 Java 代码,侧重页面显示
  • Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制,mvc 设计思想中 jsp 位于视图层,servlet 位于控制层

Jsp 运行机制:
JSP执行过程.png

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

jsp 有哪些域对象?

四大域对象:

  • pageContext page 域:指当前页面,在当前 jsp 页面有效,跳到其它页面失效
  • request request 域:指一次请求范围内有效,从 http 请求到服务器处理结束,返回响应的整个过程。在这个过程中使用 forward(请求转发)方式跳转多个 jsp,在这些页面里你都可以使用这个变量
  • session session 域:指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用
  • application context 域:指只能在同一个 web 中使用,服务器未关闭或者重启,数据就有效

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慢一点,以后的执行都是相同的。


程序媛小红
348 声望795 粉丝