JSP基础知识总结
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的运⾏原理
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程序员还⽐较少。
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="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>
java和jsp3. taglib指令
作⽤:在JSP页⾯中导⼊JSTL标签库。替换jsp中的java代码⽚段。
<%@ taglib uri="java.sun/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 等价于Writer() 封装输出对象,⽤来向客户端⾃定义输出内容,代表了向客户端发送数据的对象,是
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,只要页⾯跳转了,它们就不见了
:是指从http请求到服务器处理结束,返回响应的整个过程,在这个过程中使⽤forward⽅式跳转多个jsp,在这些页⾯⾥你都可以使⽤这个变量.
request⾥的变量可以跨越forward的前后两页,但是只要重新刷新页⾯,就开始重新计算
3.session:
有效范围当前会话,从浏览器的打开到浏览器的关闭
session和application⾥的变量⼀直在累加,但是只要浏览器关闭,session对象就不见了
(1)设置session会话
HttpSession Session()
session.setAttribute(“user”,ub);
(2)设置与上⼀次最长交互时间间隔 单位是秒
session.setMaxInactiveInterval(10)
(3)使session失效
session.invalidate()
4.application:
它的有效范围是整个应⽤
作⽤域⾥的变量,它的存活时间是最长的,如果不进⾏⼿⼯删除,它们就⼀直可以使⽤
application⾥的变量⼀直在累加,除⾮重启tomcat,否则⼀直变⼤,作⽤域规定的是变量的有效期限

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。