我交了个新朋友——TA叫JSP(Java Server Pages)(附加小型面试问答)(一)

JSP概述

JSP全名为Java Server Pages,即Java服务器页面,是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点儿类似ASP技术,它是在传统的网页HTML文件中插入Java程序段和JSP标记,从而形成JSP文件,后缀名为.jsp。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

它实现了HTML语法中的Java扩展(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

All in all,JSP = Java + Html + Servlet

JSP特性

在这里插入图片描述

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

Make Friends(操作)

Dynamic web module version要尽可能低,不要配4.0这些,低版本的就可以动态自动生成相关的servlet-mapping配置信息
在这里插入图片描述
在这里插入图片描述
在WebContent下建立JSP
在这里插入图片描述
运行前:
在这里插入图片描述
我的Tomcat服务器工作的容器位置(你们的位置可能和我不同)

D:\Tomcat\apache-tomcat-9.0.38\apache-tomcat-9.0.38\work\Catalina\localhost\Review

可见,现在容器内还妹东西
在这里插入图片描述
启动服务器
在这里插入图片描述
运行效果如下:
在这里插入图片描述
再回到tomcat服务器的jsp容器会发现出现了一个文件夹
在这里插入图片描述
打开.java文件看看
在这里插入图片描述
jsp继承了org.apache.jasper.runtime.HttpJspBase
在这里插入图片描述
接下来我们继续追根溯源可以得到(找类的快捷键为ctrl + shift + t)更多有用的可以看我的这篇文章个人玩eclipse常用的快捷键方式
在这里插入图片描述
在这里插入图片描述
Ta-da!可见jsp就是建立在HttpServlet基础上的

JSP运行原理

通过上面的探索,我们不难得出一个这样的流程图
在这里插入图片描述
机制概述:可以把JSP页面的执行分成两个阶段,一个是转译阶段,一个是请求阶段。

转译阶段:JSP页面转换成Servlet类。
请求阶段:Servlet类执行,将响应结果发送至客户端,可分为以下6步完成。

  • (1)用户(客户机)访问响应的JSP页面,如http://localhost:8080/test/NewFile.jsp。
  • (2)服务器找到相应的JSP页面。
  • (3)服务器将JSP转译成Servlet的源代码。
  • (4)服务器将Servlet源代码编译为class文件。
  • (5)服务器将class文件加载到内存并执行。
  • (6)服务器将class文件执行后生成HTML代码发送给客户机,客户机浏览器根据相应的HTML代码进行显示。
    如果该JSP页面为第一次执行,那么会经过这两个阶段,而如果不是第一次执行,那么将只会执行请求阶段。这也是为什么第二次执行JSP页面时明显比第一次执行要快的原因。如果修改了JSP页面,那么服务器将发现该修改,并重新执行转译阶段和请求阶段。这也是修改页面后访问速度变慢的原因。

另一种解释:

JSP的运行过程具体如下:

  • (1)客户端发出请求,请求访问JSP文件。
  • (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果发现JSP文件中存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
  • (3)如果转换成功,则JSP容器将生成的Java源文件编译成相应的字节码文件*.class。该class文件就是一个Servlet,Servlet容器会像处理其他Servlet一样来处理它。
  • (4)由Servlet容器加载转换后的Servlet类(.class文件)创建一个该Servlet(JSP页面的转换结果)实例,并执行Servlet的jspInit()方法。jspInit()方法在Servlet的整个生命周期中只会执行一次。
  • (5)执行jspService()方法来处理客户端的请求。对于每一个请求,JSP容器都会创建一个新的线程来处理它。如果多个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每一个客户端请求都对应一个线程。JSP运行过程中采用的这种多线程的执行方式可以极大地降低对系统资源的需求,提高系统的并发量并缩短响应时间。需要注意的是,由于第(4)步生成的Servlet是常驻内存的,所以响应速度非常快。
  • (6)如果JSP文件被修改了,则服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则使用重新编译后的结果取代内存中常驻的Servlet,并继续上述处理过程
  • (7)虽然JSP效率很高,但在第一次调用的时候往往由于需要转换和编译,所以会产生一些轻微的延迟。此外,由于系统资源不足等原因,JSP容器可能会以某种不确定的方式将Servlet从内存中移除,发生这种情况时首先会调用jspDestroy()方法,然后Servlet实例会被加入“垃圾收集”处理。
  • (8)当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息发送回客户端。
    在这里插入图片描述

JSP基本语法

在这里插入图片描述

  • 1、JSP脚本段JSP脚本段(Scriptlet)是指一个有效的程序段,在这个程序段中可以声明要用到的变量和方法、编写Java语句,以及使用任何隐含的对象等。JSP脚本段的基本语法为<%Java程序段%>
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
    JSP脚本段中只能出现Java代码,不能出现其他模板元素。JSP脚本段中,Java程序段必须严格遵循Java语法。在一个 JSP 页面中可以有多个脚本段,在两个或多个脚本段间可以嵌入文本、HTML 标记和其他JSP元素。多个脚本段中的代码可以相互访问,单个脚本段中的 Java 语句可以是不完整的,但多个脚本段代码组合后的结果必须是完整的
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
  • 2、JSP声明语句在JSP页面中,可以声明合法的变量和方法,变量类型可以是Java语言允许的任何数据类型。这种声明是全局变量。JSP声明(Declaration)的基本语法为<%! 声明1; 声明2; … 声明n; %>
    但是方法中定义的变量只在该方法内有效,声明的本质就是将声明的变量和方法作为Servlet类的变量和方法。下面用一个例子来解释如何声明变量和方法。
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
    每刷新一次count都会加1
    在这里插入图片描述
    可以直接使用在<%@ page %>中已经声明的变量和方法,不需要对它们重新进行声明。一个声明仅在一个页面中生效。如果要在多个页面中用到该声明,则可将它们写成一个单独的文件,然后用<%@ include %>或< jsp:include >包含进来。
  • 3、JSP表达式在JSP页面中,可以用表达式(Expression)将程序数据输出到客户端,其等价于out.print。表达式元素表示的是一个在脚本语言中定义的表达式,在运行后会自动转换为字符串,然后插入到这个表达式在 JSP 页面中的位置并显示。
    JSP 表达式的基本语法为<%=变量或表达式%>,表达式的本质就是将 JSP页面转化为Servlet后,使用out.print()将表达式的值输出
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

expression.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>表达式实例1</title>
</head>
<%
	int sum = 0;
	for(int i = 0; i <= 10; i++)
		sum += i;
	out.print("<h1>sum = " + sum + "</h1>");
%>
<%!
	String url = "expressionHref.jsp";
%>

<body>

	<!-- html -->
	<%
		//java注释
		
	%>
	<%--jsp注释 --%>
	

	<a href="<%=url %>">点击跳转</a>
	<form action="<%=url %>">
		<input type="submit" value = "点击跳转"/>
	</form>
	
</body>
</html>

小结

在这里插入图片描述
JSP脚本元素和JSP表达式都是生成在该方法内

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

在这里插入图片描述
而JSP声明元素在成员位置

总之,<%!和%>是用来定义成员变量属性和方法的,<%和%>主要是用来输出内容的,因此如果涉及到了成员变量的操作,那么就应该使用<%!和%>,而如果是涉及到了输出内容的时候,就使用<%和%>。

JSP注释

在JSP页面中,注释分为两大类:静态注释和动态注释。静态注释是直接使用HTML风格的注释,这类注释在浏览器中查看源文件时是可以看到注释内容的;动态注释包括Java注释和JSP注释两种,这类注释在浏览器中查看源文件时是看不到注释内容的。

  • 静态注释
<!--注释内容-->
  • Java注释
//单行注释
/*
多行注释
*/
  • JSP注释
<%--注释--%>

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

小型面试题

  • 面试官:什么是JSP?
    应聘者:Java Server Pages是一项支持动态内容的Web网页开发技术,它可以帮助开发人员通过利用特殊的JSP标签在HTML页面中插入Java代码,这些标签大部分都是以<%和%>为标记。

  • 面试官:使用JSP的优点是什么?
    应聘者:JSP提供了如下所列的几个优势:因为JSP允许在HTML页面本身中嵌入动态元素而不是使用一个单独的CGI文件,所以性能明显更好一点儿;JSP在被服务器处理之前总会被编译一次,它不像CGI/Perl那样,每一次页面被请求时,服务器都需要加载一个解释器和目标脚本;Java Server Pages是在Java Servlets API之上创建的,所以JSP可以像Servlets那样也可以访问所有强大的企业级的Java APIs,包括JDBC、JNDI、EJB、JAXP等;JSP页面可以结合Servlets进行使用,处理业务逻辑,该模型是通过Java Servlet模板引擎支持的。

  • 面试官:和单纯的Servlet相比,JSP的优势是什么?
    应聘者:与通过使用大量的println语句生成的HTML相比,JSP在编写(和修改)常规的HTML上更方便。其他的优点是:在HTML页面中嵌入Java代码,跨平台,创建数据库驱动的Web应用程序,服务器端的编程功能。

  • 面试官:和JavaScript相比,JSP的优势是什么?
    应聘者:JavaScript可以在客户端生成动态的HTML,却不能和Web服务器进行交互来完成复杂的任务,例如,数据库的访问和图像处理等。

后话(servlet-api.jar和jsp.api.jar很重要!)

由于Servlet和jsp是JavaEE程序而不是JavaSE,所以外部的JAR包都要自己导入,然后如果我们配置好了服务器tomcat则不需要再导入这两个JAR包了,因为服务器lib里面有
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值