大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaWeb系列的第四篇,主要总结了JavaWeb中JSP相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
定义:
jsp
本质上就是一个 Servlet
,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例。
Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。
一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。
页面显示 逻辑控制
Jsp 运行机制:
JVM 只能识别 Java 类,并不能识别 jsp 代码;
web 容器收到以 .jsp
为扩展名的 url 请求时,会将访问请求交给tomcat 中 jsp 引擎
处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet
源程序,接着编译servlet 源程序生成 .class
文件,再由web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互。
四大域对象:
pageContext page 域 request request 域 session session 域 application context 域
对象 | 生命周期 | 作用域 | 使用情况 |
---|---|---|---|
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中的定义的成员变量。
区别:
实现方式:
response.sendRedirect("重定向的路径") request.getRequestDispatcher("转发路径").forward(request, response);
1.JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览
2.在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求
3.JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关
<%@ page contentType=”text/html; charset=gb2312″%>
2、表单提交中文时出现乱码 request.seCharacterEncoding("gb2312″)
对请求进行统一编码
3、数据库连接出现乱码 要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上 useUnicode=true&characterEncoding=GBK
就可以了。
4、通过过滤器完成
5、在 server.xml
中的设置编码格式
<%@ page session="false" %>
当客户端向一个jsp页面发送请求时,Web Container将jsp转化成servlet的源代码(只在第一次请求时),然后编译转化后的servlet并加载到内存中执行,执行的结果response到客户端
jsp只在第一次执行的时候会转化成servlet,以后每次执行,web容器都是直接执行编译后的servlet,所以jsp和servlet只是在第一次执行的时候不一样,jsp慢一点,以后的执行都是相同的。
很遗憾的说,推酷将在这个月底关闭。人生海海,几度秋凉,感谢那些有你的时光。
原文 https://segmentfault.com/a/1190000023346268