JSP
JSP基础
jsp工作原理:web服务器(tomcat\jboss等)先把jsp文件翻译成servlet的java文件,然后编译成字节码文件,就是.class文件,当客户端访问的时候,服务器直接装载jsp对应的servlet的字节码文件。
基本语法
jsp的脚本
小脚本的格式:
<%
java代码
%>
表达式格式:
<%=表达式 %>
通过对编译后的java文件分析发现,表达式脚本的底层就是<% 定义变量的语句; out.write(变量) %>
输出是相同的:
<% int i=10;
out.print(i);
%>
<%=i%>
声明格式:
-
<%! %> 表示定义全局变量和静态代码块,也可以声明方法。
-
成员变量我们直接在<% %>中定义即可。
-
<%! %>是我们用来声明全局变量、创建静态代码块、声明方法的地方。
-
<% %>相当于是一个方法,所以不能在这里声明方法,在这里定义的变量也是局部变量。
Jsp与servlet的区别
-
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
-
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
-
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
jsp的运行原理
-
1、客户端发起请求http://localhost:8080/pp/index.jsp 设计了以
<welcome-file-list>的配置 -
2、请求到达服务器[IP地址和端口号]
-
3、服务器进行请求资源的定位 /pp/index.jsp,如果不存在则直接对客户端响应404报错
-
4、如果存在,因为后缀是.jsp,所以服务器会调用jsp引擎将jsp文件转换为Servlet类文件[.java]
-
5、Tomcat调用Servlet引擎编译生成的.java文件,得到.class的字节码文件
-
6、Servlet引擎创建Servlet对象生成响应[html文档]
-
7、客户端接收到响应的html文档进行渲染显示
-
8` jsp是不能直接运行,jsp究其本质就是servlet
为什么jsp不能取代servlet?
- 1.当前,Java程序员还比较少。
- JSP程序调试困难。jsp页面首先被转化为一个.java文件(servlet),然后再被编译。这样, 出错信息实际上指向的是经过转化的那个 .java文件而不是jsp本身。 例如在.jsp文件第一行的错误可能被显示为第20行。如果试图通过反跟踪来解决这个问题 有时会使结果显得很滑稽。(但是,在Resin的引擎中,错误已经可以指向.jsp文件的出错行。) 你也可以使用一些集成设计工具IDE如VAJ或JDeveloper,但这有悖于JSP简单易用这一基本特性。
- 数据库连接并不那么容易。大多数servlet引擎并不支持本地的缓冲池连接。 因此,不得不写很多代码来完成这项工作。
- 很难选择合适的servlet引擎。没有一个独立的组织来对各种引擎提供独立的benchmark测试。 提供商当然地对他们自己的产品提供了benchmark测试,但结论通常以数据形式给出, 但均回避了稳定性。
JSP的三个指令
JSP相关技术,觉的要掌握的点还是非常多的,包括三个指令,六个动作,九个内置对象还有四大域对象等。下面就简单写一下我对三个指令的理解。
JSP的三个指令:JSP指令是为JSP引擎而设计的,他们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
1. page 指令
作用 : 用于定义JSP页面的各种属性,告诉tomcat服务器如何翻译JSP文件。
属性:
- ① import 和java中的import 是一样的
<%@ page import="java.util.Date,java.util.List"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP会自动导入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
-
② session(会话): 是否会自动创建session对象。默认值是true;
-
③ buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8KB。
-
④ errorPage: 如果页面中有错误,则跳转到指定的资源。
errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。
如果不写“/”则代表相对路径。 -
⑤ isErrorPage: 是否创建throwable对象。默认是false;
-
⑥ contentType: 等同于response.setContentType(“text/html;charset=utf-8”);
-
⑦ pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
-
⑧ isELIgnored: 是否支持EL表达式。 默认是false
2. Include指令:
作用:在当前页面用于包含其他页面。
静态包含: 把其它资源包含到当前页面中,代码格式:
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
3. taglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
六大页面动作
Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin
下面是每个动作的具体含义:
- jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
存放数据的4大范围
- page只在当前页面范围内有效
- request可以在请求转发时在多个页面之间共享数据
- session在当前应用中针对当前用户共享数据
- application当前应用中跨用户数据共享
9大默认对象
-
page this 封装页面对象,该对象代表了正在运行的由JSP文件产生的类对象,相当于this。一般情况下不建议使用该对象
-
request ServletRequest,封装请求对象,代表的是来自客户端的请求HttpServletRequest。包括从GET/POST请求传递过来的参数
-
response ServletResponse,封装响应对象,代表的是对客户端的响应HttpServletResponse。网页传回客户端的信息
-
application ServletContext,封装应用程序对象,负责提供应用程序在服务器中运行时的一些全局信息,是一个容器级的共享对象数据
-
session HttpSession 封装会话对象,代表服务器与客户端所建立的会话,是javax.servlet.http.HttpSession接口。当需要在不同的JSP页面中保留客户信息的情况下用于跟踪用户状态。在客户端允许时,使用Cookie支持;否则一般使用URL重写来支持。即使不存在session引用,这个对象也是自动绑定的。但有一个例外,这就是如果你用page指令的session属性关闭了会话,此时对session变量的引用将导致JSP页面转换成Servlet时出错
-
config ServletConfig 封装代码配置对象,该对象提供一些该Servlet的配置信息,是javax.servlet.ServletConfig接口的实现
-
exception 异常信息的对象,封装异常对象,代表了JSP文件运行时所产生的并且没有被捕获的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了
<%@ page isErrorPage="true "%>的JSP文件中使用 -
out 等价于response.getWriter() 封装输出对象,用来向客户端自定义输出内容,代表了向客户端发送数据的对象,是javax.servlet.jsp.JspWriter接口的实现。JspWriter是带缓冲的版本
-
pageContext 包装页面上下文对象,代表的是当前页面运行的一些属性,例如可以获取session、request、response、exception、ServletContext和ServletConfig的引用。是javax.servlet.jsp.PageContext接口的实现
四大域对象:
page request session application
1.page:
page是指当前页面,只对当前jsp页面有效
- page里面的变量没法从index.jsp传递到test.jsp,只要页面跳转了,它们就不见了
2.request
:是指从http请求到服务器处理结束,返回响应的整个过程,在这个过程中使用forward方式跳转多个jsp,在这些页面里你都可以使用这个变量.
- request里的变量可以跨越forward的前后两页,但是只要重新刷新页面,就开始重新计算
3.session:
有效范围当前会话,从浏览器的打开到浏览器的关闭
- session和application里的变量一直在累加,但是只要浏览器关闭,session对象就不见了
(1)设置session会话
HttpSession session=request.getSession()
session.setAttribute(“user”,ub);
(2)设置与上一次最长交互时间间隔 单位是秒
session.setMaxInactiveInterval(10)
(3)使session失效
session.invalidate()
4.application:
它的有效范围是整个应用
- 作用域里的变量,它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用
application里的变量一直在累加,除非重启tomcat,否则一直变大,作用域规定的是变量的有效期限
本文详细介绍了JSP的基础知识,包括JSP的基本语法、与Servlet的区别、运行原理及不能取代Servlet的原因。讲解了JSP的三个指令:page、Include和taglib,以及六大页面动作。此外,还阐述了JSP的四大域对象(page、request、session、application)及其作用范围和九大默认对象。通过对JSP的深入解析,帮助读者更好地理解和运用JSP。
1120

被折叠的 条评论
为什么被折叠?



