共计 2573 个字符,预计需要花费 7 分钟才能阅读完成。
开篇介绍
大家好,我是 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 运行机制:
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 慢一点,当前的执行都是雷同的。