2023年11月28日发(作者:)

JSP基础知识总结

JSP

JSP基础

jsp⼯作原理:web服务器(tomcatjboss等)先把jsp⽂件翻译成servlet的java⽂件,然后编译成字节码⽂件,就是.class⽂件,当客户

端访问的时候,服务器直接装载jsp对应的servlet的字节码⽂件。

基本语法

jsp的脚本

⼩脚本的格式:

<%

java代码

%>

表达式格式:

<%=表达式 %>

通过对编译后的java⽂件分析发现,表达式脚本的底层就是<% 定义变量的语句; (变量) %>

输出是相同的:

<% int i=10;

out.print(i);

%>

<%=i%>

声明格式:

<%! %> 表⽰定义全局变量和静态代码块,也可以声明⽅法。

成员变量我们直接在<% %>中定义即可。

<%! %>是我们⽤来声明全局变量、创建静态代码块、声明⽅法的地⽅。

2、请求到达服务器[IP地址和端⼝号]

3、服务器进⾏请求资源的定位 /pp/,如果不存在则直接对客户端响应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程序员还⽐较少。

2. JSP程序调试困难。jsp页⾯⾸先被转化为⼀个.java⽂件(servlet),然后再被编译。这样, 出错信息实际上指向的是经过转化的那个

.java⽂件⽽不是jsp本⾝。 例如在.jsp⽂件第⼀⾏的错误可能被显⽰为第20⾏。如果试图通过反跟踪来解决这个问题 有时会使结果显

得很滑稽。(但是,在Resin的引擎中,错误已经可以指向.jsp⽂件的出错⾏。) 你也可以使⽤⼀些集成设计⼯具IDE如VAJ或

JDeveloper,但这有悖于JSP简单易⽤这⼀基本特性。

3. 数据库连接并不那么容易。⼤多数servlet引擎并不⽀持本地的缓冲池连接。 因此,不得不写很多代码来完成这项⼯作。

4. 很难选择合适的servlet引擎。没有⼀个独⽴的组织来对各种引擎提供独⽴的benchmark测试。 提供商当然地对他们⾃⼰的产品提供

了benchmark测试,但结论通常以数据形式给出, 但均回避了稳定性。

JSP的三个指令

JSP相关技术,觉的要掌握的点还是⾮常多的,包括三个指令,六个动作,九个内置对象还有四⼤域对象等。下⾯就简单写⼀下我对三个指

令的理解。

JSP的三个指令:JSP指令是为JSP引擎⽽设计的,他们并不直接产⽣任何可见输出,⽽只是告诉引擎如何处理JSP页⾯中的其余部分

1. page 指令

作⽤ : ⽤于定义JSP页⾯的各种属性,告诉tomcat服务器如何翻译JSP⽂件。

属性:

① import 和java中的import 是⼀样的

<%@ page import=","%>

<%@ page import=""%>

<%@ page import=""%>

JSP会⾃动导⼊以下的包:

② session(会话): 是否会⾃动创建session对象。默认值是true;

③ buffer: JSP中有ter输出字符流。设置。输出数据的缓存⼤⼩,默认是8KB。

④ errorPage: 如果页⾯中有错误,则跳转到指定的资源。

errorPage="/uri" 如果写“/”则代表当前应⽤的⽬录下,绝对路径。

如果不写“/”则代表相对路径。

⑤ isErrorPage: 是否创建throwable对象。默认是false;

⑥ contentType: 等同于tentType(“text/html;charset=utf-8”);

⑦ pageEncoding: 告诉JSP引擎要翻译的⽂件使⽤的编码。

⑧ isELIgnored: 是否⽀持EL表达式。 默认是false

2. Include指令:

作⽤:在当前页⾯⽤于包含其他页⾯。

静态包含: 把其它资源包含到当前页⾯中,代码格式:

<%@ include file="/include/" %>

动态包含:

<jsp:include page="/include/">jsp:include>

3. taglib指令

作⽤:在JSP页⾯中导⼊JSTL标签库。替换jsp中的java代码⽚段。

<%@ taglib uri="/jsp/jstl/core" prefix="c" %>

六⼤页⾯动作

Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin

下⾯是每个动作的具体含义:

jsp:include:在页⾯被请求的时候引⼊⼀个⽂件。

jsp:useBean:寻找或者实例化⼀个JavaBean。

jsp:setProperty:设置JavaBean的属性。

page this 封装页⾯对象,该对象代表了正在运⾏的由JSP⽂件产⽣的类对象,相当于this。⼀般情况下不建议使⽤该对象

request ServletRequest,封装请求对象,代表的是来⾃客户端的请求HttpServletRequest。包括从GET/POST请求传递过来的参

response ServletResponse,封装响应对象,代表的是对客户端的响应HttpServletResponse。⽹页传回客户端的信息

application ServletContext,封装应⽤程序对象,负责提供应⽤程序在服务器中运⾏时的⼀些全局信息,是⼀个容器级的共享对象数

作⽤域⾥的变量,它的存活时间是最长的,如果不进⾏⼿⼯删除,它们就⼀直可以使⽤