JSP,全称为JavaServer Pages,是一个由Sun Microsystems公司倡导和许多公司参与共同 创建的网页开发技术标准。JSP技术是以Java语言作为脚本语言的,在HTML网页中嵌入Java程序的网页开发技术。
注意: 学习JSP的前置条件需包括掌握Java基本语法和HTML。此外,了解一门数据库语言,如SQL,也是很有帮助的,因为JSP经常与数据库交互。掌握这些基础知识可以更好地理解和应用JSP技术。
基本特点:
- 将内容的生成和显示进行分离。使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。
- 强调可重用的组件。绝大多数JSP页面依赖于可重用的、跨平台的组件来执行应用程序所要求的更为复杂的处理。
- 采用标识简化页面开发。Web页面开发人员不会都是熟悉Java语言的程序员。JSP技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。
工作原理:
JSP工作原理图是用户发送请求,请求被Web服务器接收,Web服务器把请求传送给JSP引擎,JSP引擎处理请求后返回响应给Web服务器,Web服务器再把响应传送给用户。
执行过程:
- 用户发送请求。
- Web服务器接收请求并响应用户的请求。
- JSP引擎从磁盘(硬盘)中加载JSP文件。
- JSP引擎将JSP文件转化为Servlet文件(.java)。
- JSP引擎编译Servlet文件,生成字节码文件(.class)。
- JSP引擎执行字节码文件。
- JSP引擎将执行结果返回给Web服务器。
- Web服务器将结果响应给用户。
1.JSP的优点:
- 一次编写,到处运行。由于JSP基于Java语言,因此它继承了Java强大的跨平台能力。
- 分离业务逻辑和显示逻辑。开发者可以将业务处理逻辑放在Servlet中,而将显示逻辑放在JSP中。
- 支持可重用的基于组件的设计。JSP中可以使用JavaBean,这使得JSP具有更强大的应用能力。
2. JSP的基本语法:
- JSP表达式:<%= expression %>,用于在页面中输出Java表达式的结果。
- JSP脚本片段:<% code %>,用于在页面中插入Java代码片段。
- JSP声明:<%! declaration %>,用于在页面中声明全局变量和方法。
- JSP指令:用于控制JSP页面的整体结构,如page指令用于定义页面依赖属性,include指令用于包含其他文件内容。
如下所示:
xml
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP基本语法示例</title>
</head>
<body>
<% String greeting = "Hello, JSP!"; %>
<h1><%= greeting %></h1>
<%
int number1 = 10;
int number2 = 20;
int sum = number1 + number2;
%>
<p>The sum of <%= number1 %> and <%= number2 %> is <%= sum %>.</p>
<%!
public String getWelcomeMessage() {
return "Welcome to JSP!";
}
%>
<p><%= getWelcomeMessage() %></p>
</body>
</html>
在这个例子中,使用了不同类型的JSP语法:
<%@ page ... %>
是指令,用于设置JSP页面的属性。在这个示例中,设置了页面的语言为Java,以及内容的编码为UTF-8。<%= ... %>
是表达式,用于在HTML中输出Java表达式的结果。例如<%= greeting %>
就会输出 "Hello, JSP!"。<% ... %>
是脚本片段,可以包含任何有效的Java代码。在示例中,它用于计算和输出两个数字的和。<%! ... %>
是声明,用于声明在JSP页面中使用的变量和方法。在示例中,它声明了一个名为getWelcomeMessage
的方法,该方法返回一个欢迎消息。
这就是一个简单的使用JSP基本语法的示例。需要注意的是,虽然可以在JSP中直接编写Java代码,但是为了保持代码的清晰和可维护性,最好尽量少在JSP中直接编写复杂的Java代码,而是将业务逻辑放在Servlet或其他Java类中,然后通过请求属性、会话属性等方式将数据传递给JSP进行显示。
3. JSP内置对象:
JSP有9个内置对象,它们不需要声明即可直接使用,这些对象包括request、response、session、application、out、config、page、pageContext和exception。
如下所示:
xml
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP内置对象示例</title>
</head>
<body>
<h1>JSP内置对象示例</h1>
<h2>request对象:</h2>
<p>Method: <%= request.getMethod() %></p>
<p>Request URI: <%= request.getRequestURI() %></p>
<h2>response对象:</h2>
<p>Content Type: <%= response.getContentType() %></p>
<h2>session对象:</h2>
<p>Session ID: <%= session.getId() %></p>
<h2>application对象:</h2>
<p>ServletContext Name: <%= application.getServerInfo() %></p>
<h2>out对象:</h2>
<% out.print("This is an output from out object."); %>
<h2>config对象:</h2>
<p>Servlet Context Init Parameter: <%= config.getInitParameter("paramName") %></p>
<h2>page对象:</h2>
<p>This is the current JSP page.</p>
<h2>pageContext对象:</h2>
<p>Page Context Attribute: <%= pageContext.getAttribute("attributeName") %></p>
<%
exception e = new exception("This is a test exception.");
pageContext.setAttribute("exception", e);
%>
<h2>exception对象:</h2>
<p>Exception Message: <%= exception.getMessage() %></p>
</body>
</html>
在这个例子中,使用了JSP的9个内置对象:request、response、session、application、out、config、page、pageContext和exception。但是请注意,这个示例只是为了展示这些内置对象如何被访问和使用,并不代表它们在实际应用中的典型用法。其中一些对象,比如exception,通常不会在页面级别直接使用。
另外需要注意的是,对于内置对象的实际使用,通常会依赖于具体的业务逻辑和需求,因此在实际开发中,务必需要更详细、更深入地理解和运用这些对象。
4. JSP的生命周期:
JSP的生命周期主要包括三个阶段,解析阶段、编译阶段和执行阶段。在解析阶段,JSP引擎将JSP文件解析为Servlet源代码。在编译阶段,JSP引擎将Servlet源代码编译为字节码。在执行阶段,JSP引擎加载并执行该字节码。
- 解析阶段:这是JSP页面的起始阶段。当浏览器首次请求JSP页面或JSP页面在上次编译后被更改时,JSP引擎会检查是否需要编译这个页面。如果需要编译,JSP引擎会解析JSP页面,将其转换为Servlet源代码。
- 编译阶段:在解析阶段之后,JSP引擎将生成的Servlet源代码编译为Java字节码,形成Servlet类。编译阶段只会在首次请求页面或JSP页面更改时发生。
- 加载和实例化阶段:在这个阶段,JSP引擎加载并实例化Servlet类。然后,容器调用jspInit()方法进行初始化。这个方法在整个JSP生命周期中只会被调用一次。
- 请求处理阶段:在加载和实例化之后,JSP引擎将调用_jspService()方法,这个方法负责处理所有的请求。每当有请求发生时,_jspService()方法就会被调用一次,并负责产生响应。
- 销毁阶段:当JSP页面需要从容器中被移除时,JSP引擎首先会调用jspDestroy()方法,然后销毁Servlet实例。jspDestroy()方法在JSP生命周期中也只会被调用一次。
5. JSP与Servlet的关系:
JSP实际上就是一个Servlet,当JSP页面第一次被访问或请求时,JSP引擎将把JSP页面翻译成一个Servlet源文件,然后编译成Servlet字节码文件,最后由JVM执行这些字节码文件。因此,我们甚至可以把JSP页面看成是一个特殊的Servlet。
1. 本质联系:
- JSP和Servlet都是基于Java技术的Web开发技术,它们都是运行在Web服务器上的,用于生成动态Web内容。
2. 底层实现:
- 其实JSP本质上就是一个Servlet。当JSP页面第一次被访问或请求时,JSP引擎会将JSP页面翻译成一个Servlet源文件,然后编译为Servlet字节码文件,并由JVM执行这些字节码文件。因此,我们甚至可以把JSP看作是Servlet的一个特殊形式。
3. 职责划分:
- 在实际开发中,JSP和Servlet往往配合使用,职责分明。Servlet通常作为控制器(Controller)使用,负责接收请求,处理逻辑,然后转发请求到JSP页面。JSP则作为视图(View)使用,负责数据的显示和呈现。这种模式被称为MVC(Model-View-Controller)模式,是一种典型的Web应用程序开发模式。
4. 语法特性:
- JSP的语法更加接近HTML,因此对于前端开发人员来说更加友好,可以更方便地嵌入Java代码和表达式,用于动态生成Web页面。而Servlet则是纯粹的Java类,其开发需要写更多的Java代码。
5. 编译和运行:
- JSP在服务器上被编译成为Servlet并运行。因此,任何可以在Servlet中完成的事情也可以在JSP中完成,但是,JSP被设计为更侧重于视图,而Servlet更侧重于控制器。
总结来说,JSP和Servlet关系密切,本质相同,但在实际使用中职责分明,相互配合,共同构建高效、可维护的Web应用程序。