大二第七次jsp技术

JSP技术

jsp概述

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运行原理

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基本语法

jsp脚本元素

JSP 脚本元素是指嵌套在<%和%>之中的一条或多条 Java 程序代码。通过 JSP 脚本元素可以将 Java 代码嵌入 HTML 页面中,所有可执行的 Java 代码,都可以通过 JSP 脚本来执行。
JSP 脚本元素主要如下 3 种类型。
• JSP Scriptlets
• JSP 声明语句
. jsp 表达式

jsp声明语句

jsp表达式

jsp注释

jsp指令

设置jsp页面中的一些信息,sun公司提供了jsp指令,jsp2.0中定义了page、include等指令,每种指令都定义了各自的属性。

page指令

在jsp页面中,经常需要对页面的某些特性进行描述。例如页面的编码方式,jsp页面采用的语言等,这时可以通过page指令来实现。

include指令

incloud指令只有一个file属性,该属性用来指定插入到jsp页面目标位置的文件与资源。
在实际开发时,有时需要在jsp页面静态包含一个文件,例如html文件,文本文件等。这时可以通过include指令来实现。

jsp隐式对象

隐式对象的概述

在jsp页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象,则会非常麻烦,为了简化web应用程序的开发,jsp2.0规范的提供了九个隐式对象,他们是jsp默认创建的,可以直接在jsp页面中使用。

out对象

在 JSP 页面中,经常需要向客户端发送文本内容,这时,可以使用 out 对象来实现。out对象是 javax.servlet.jisp.JspWriter 类的实例对象,它的作用与ServletResponse.getWriter()方法返
回的 PrintWriter 对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out 对象的类型为 JspWriter,它相当于一种带缓存功能的 PrintWriter。接下来,通过一张图来描述 JSP页面的 out 对象与 Servlet 引擎提供的缓冲区之间的工作关系。

page Context对象

• pageContext.PAGE_SCOPE:表示页面范围
• pageContext.REQUEST_SCOPE:表示请求范围
• pageContext.SESSION_SCOPE:表示会话范围
•pageContext.APPLICATION_SCOPE:表示 Web 应用程序范围

exception对象

在jsp页面中经常需要处理一些异常信息,这时可以通过exception对象来实现。

代码及成果展示

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
date.jsp页面用来输出当前时间:
<% out.print(new Date().toLocaleString()); %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	用来显示错误信息:
	<%=exception.getMessage()%>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
   int a=1;
   int b=2;
   %>
 <%!
   public String dashuju(){
	 String str="dashuju";
	 return str;
 }
   %>
   <% out.print(a+b); %>
   <br/>
   <% response.getWriter().print("dashuju"); %>
   <br/>
   <% out.print(dashuju()); %>
   <br/>
   <br/><br/><br/>
   <%=a+b %>
   <br/>
   <%=dashuju() %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    html内容
    <!-- html注释 -->
    <% 
    //java注释
      System.out.print("java注释");
    new Date();
      %>
      <%--jsp注释 --%>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
   int a=3;
   int b=2;
%>
输出<%=(a/b)%>>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
大数据2005
<% response.getWriter().print("2020080605045+袁雪华"); %>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是include页面,下面是我包含进来的页面:
<%@ include file="date.jsp"%>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <% 
      response.getWriter().print("2020080605045袁雪华first line <br/>");
      out.print("second line <br/>");
     %>
   
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 	<%
 		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")%>
 	<hr/>
	<%=(String) req.getAttribute("yuanxuehua")%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2020080605045 袁雪华 大数据2005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值