JSP 全名是 Java Server Pages,它是建立在 Servlet 规范之上的动态网页开发技术。在 JSP文件中,HTML 代码与 Java 代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java 代码用来实现网页中动态内容的显示。为了与传统 HTML 有所区别,JSP 文件的扩展名为jisp。
JSP 技术所开发的 Web 应用程序是基于 Java 的,它可以用一种简捷而快速的方法从 Java程序生成 Web 页面,其使用上具有如下几点特征。
•跨平台:由于 JSP 是基于 Java i语言的,它可以使用 Java API,所以它也是跨平台的,可以应用于不同的系统中,如 Windows、Linux 等。当从一个平台移植到另一个平台时,JSP和JavaBean 的代码并不需要重新编译,这是因为 Java 的字节码是与平台无关的,这也应验了 Java语言“一次编译,到处运行”的特点。
•业务代码相分离:在使用 JSP 技术开发 Web 应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用 HTML 来设计界面,使用 JSP 标签和脚本来动态生成页面上的内容。在服务器端,JSP 引擎(或容器,本书中指 Tomcat )负责解析 JSP 标签和脚本程序,生成所请求的内容,并将执行结果以 HTML 页面的形式返回到浏览器。
•组件重用:JSP 中可以使用 JavaBean 编写业务组件,也就是使用一个JavaBean 类封装业务处理代码或者作为一个数据存储模型,在 JSP 页面中,甚至在整个项目中,都可以重复使用这个 JavaBean。同时,JavaBean 也可以应用到其他 Java 应用程序中。
•预编译:预编译就是在用户第 1 次通过浏览器访问 JSP 页面时,服务器将对 JSP 页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。这样不仅节约了服务器的 CPU 资源,还大大地提升了客户端的访问速度。
jsp的运行过程
(1)客户端发出请求,请求访问JSP 文件。
(2 )JSP客器先将 JSP 文件转换成一个 Java 源文件( Java Serylet源程序),在转换过程中。如果发现JSP 文件中存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
(3)如果转换成功,则JSP 容器将生成的 Java 源文件编译成相应的字节码文件*.class。该class 文件就是一个 Servlet,Servlet 容器会像处理其他 Servlet 一样来处理它。
(4)由 Servlet 容器加载转换后的 Servlet 类(.class 文件)创建一个该 Servlet(JSP 页面的转换结果)实例,并执行 Servlet 的 jisplnit()方法。jspInit()方法在 Servlet 的整个生命周期中只
会执行一次。
(5)执行 jspService()方法来处理客户端的请求。对于每一个请求,JSP 容器都会创建一个新的线程来处理它。如果多个客户端同时请求该 JSP 文件,则 JSP,容器也会创建多个线程,使得每一个客户端请求都对应一个线程。JSP 运行过程中采用的这种多线程的执行方式可以极大地
成的 Servlet 是常驻内存的,所以响应速度非常快。降低对系统资源的需求,提高系统的并发量并缩短响应时间。需要注意的是,由于第(4)步生成的servlet是常驻内存的,所以响应速度非常快。
(6)如果 JSP 文件被修改了,则服务器将根据设置决定是否对该文件重新编译。如果需要重新编译,则使用重新编译后的结果取代内存中常驻的 Servet,并继续上述处理过程。
(7)虽然 JSP 效率很高,但在第 1 次调用的时候往往由于需要转换和编译,所以会产生—些轻微的延迟。此外,由于系统资源不足等原因,JSP 容器可能会以某种不确定的方式将 Servet从内存中移除,发生这种情况时首先会调用 jspDestroy()方法,然后 Serviet 实例会被加入“垃圾收集”处理。
(8)当请求处理完成后,响应对象由 JSP 容器接收,并将 HTML 格式的响应信息发送回客户端。
JSP 脚本元素是指嵌套在<%和%>之中的一条或多条 Java 程序代码。通过 JSP 脚本元素可以将 Java 代码嵌入 HTML 页面中,所有可执行的 Java 代码,都可以通过 JSP 脚本来执行。
JSP 脚本元素主要如下 3 种类型。
• JSP scriptlets
• JSP 声明语句
. jsp 表达式
设置jsp页面中的一些信息,sun公司提供了jsp指令,jsp2.0中定义了page、include等指令,每种指令都定义了各自的属性。
page指令在jsp页面中,经常需要对页面的某些特性进行描述。例如页面的编码方式,jsp页面采用的语言等,这时可以通过page指令来实现。
include指令incloud指令只有一个file属性,该属性用来指定插入到jsp页面目标位置的文件与资源。
在实际开发时,有时需要在jsp页面静态包含一个文件,例如html文件,文本文件等。这时可以通过include指令来实现。
在jsp页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象,则会非常麻烦,为了简化web应用程序的开发,jsp2.0规范的提供了九个隐式对象,他们是jsp默认创建的,可以直接在jsp页面中使用。
out对象在 JSP 页面中,经常需要向客户端发送文本内容,这时,可以使用 out 对象来实现。out对象是 javax.servlet.jisp.JspWriter 类的实例对象,它的作用与ServletResponse.getWriter()方法返
回的 PrintWriter 对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out 对象的类型为 JspWriter,它相当于一种带缓存功能的 PrintWriter。接下来,通过一张图来描述 JSP页面的 out 对象与 Servlet 引擎提供的缓冲区之间的工作关系。
• pageContext.PAGE_SCOPE:表示页面范围
• pageContext.REQUEST_SCOPE:表示请求范围
• pageContext.SESSION_SCOPE:表示会话范围
•pageContext.APPLICATION_SCOPE:表示 Web 应用程序范围
在jsp页面中经常需要处理一些异常信息,这时可以通过exception对象来实现。
代码及成果展示<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.Date" %>Insert title here date.jsp页面用来输出当前时间: <% out.print(new Date().toLocaleString()); %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>Insert title here 用来显示错误信息: <%=exception.getMessage()%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <%! int a=1; int b=2; %> <%! public String dashuju(){ String str="dashuju"; return str; } %> <% out.print(a+b); %>
<% response.getWriter().print("dashuju"); %>
<% out.print(dashuju()); %>
<%=a+b %>
<%=dashuju() %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true"%>Insert title here html内容 <% //java注释 System.out.print("java注释"); new Date(); %> <%--jsp注释 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp"%>Insert title here <% int a=3; int b=2; %> 输出<%=(a/b)%>>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here 大数据2005 <% response.getWriter().print("2020080605045+袁雪华"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here 我是include页面,下面是我包含进来的页面: <%@ include file="date.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% response.getWriter().print("2020080605045袁雪华first line
"); out.print("second line
"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% HttpServletRequest req=(HttpServletRequest) pageContext.getRequest(); //req.setAttribute("yuanxuehua","dashuju"); pageContext.setAttribute("yuanxuehua", "pagecontext", PageContext.PAGE_SCOPE); pageContext.setAttribute("yuanxuehua", "REQUEST", PageContext.REQUEST_SCOPE); pageContext.setAttribute("yuanxuehua", "SESSION", PageContext.SESSION_SCOPE); pageContext.setAttribute("yuanxuehua", "APPLICATION", PageContext.APPLICATION_SCOPE); %> <%=pageContext.findAttribute("yuanxuehua")%>
<%=(String) req.getAttribute("yuanxuehua")%>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)