简单上手JSP

JSP,全称为JavaServer Pages,是一个由Sun Microsystems公司倡导和许多公司参与共同 创建的网页开发技术标准。JSP技术是以Java语言作为脚本语言的,在HTML网页中嵌入Java程序的网页开发技术。

注意: 学习JSP的前置条件需包括掌握Java基本语法和HTML。此外,了解一门数据库语言,如SQL,也是很有帮助的,因为JSP经常与数据库交互。掌握这些基础知识可以更好地理解和应用JSP技术。

基本特点

  1. 将内容的生成和显示进行分离。使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。
  2. 强调可重用的组件。绝大多数JSP页面依赖于可重用的、跨平台的组件来执行应用程序所要求的更为复杂的处理。
  3. 采用标识简化页面开发。Web页面开发人员不会都是熟悉Java语言的程序员。JSP技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。

工作原理

JSP工作原理图是用户发送请求,请求被Web服务器接收,Web服务器把请求传送给JSP引擎,JSP引擎处理请求后返回响应给Web服务器,Web服务器再把响应传送给用户。

执行过程

  1. 用户发送请求。
  2. Web服务器接收请求并响应用户的请求。
  3. JSP引擎从磁盘(硬盘)中加载JSP文件。
  4. JSP引擎将JSP文件转化为Servlet文件(.java)。
  5. JSP引擎编译Servlet文件,生成字节码文件(.class)。
  6. JSP引擎执行字节码文件。
  7. JSP引擎将执行结果返回给Web服务器。
  8. 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语法:

  1. <%@ page ... %> 是指令,用于设置JSP页面的属性。在这个示例中,设置了页面的语言为Java,以及内容的编码为UTF-8。
  2. <%= ... %> 是表达式,用于在HTML中输出Java表达式的结果。例如 <%= greeting %> 就会输出 "Hello, JSP!"。
  3. <% ... %> 是脚本片段,可以包含任何有效的Java代码。在示例中,它用于计算和输出两个数字的和。
  4. <%! ... %> 是声明,用于声明在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引擎加载并执行该字节码。

  1. 解析阶段:这是JSP页面的起始阶段。当浏览器首次请求JSP页面或JSP页面在上次编译后被更改时,JSP引擎会检查是否需要编译这个页面。如果需要编译,JSP引擎会解析JSP页面,将其转换为Servlet源代码。
  2. 编译阶段:在解析阶段之后,JSP引擎将生成的Servlet源代码编译为Java字节码,形成Servlet类。编译阶段只会在首次请求页面或JSP页面更改时发生。
  3. 加载和实例化阶段:在这个阶段,JSP引擎加载并实例化Servlet类。然后,容器调用jspInit()方法进行初始化。这个方法在整个JSP生命周期中只会被调用一次。
  4. 请求处理阶段:在加载和实例化之后,JSP引擎将调用_jspService()方法,这个方法负责处理所有的请求。每当有请求发生时,_jspService()方法就会被调用一次,并负责产生响应。
  5. 销毁阶段:当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应用程序。

相关推荐
Swift社区1 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT2 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy2 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss4 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续4 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0444 小时前
ReAct模式解读
java·ai
轮到我狗叫了5 小时前
牛客.小红的子串牛客.kotori和抽卡牛客.循环汉诺塔牛客.ruby和薯条
java·开发语言·算法
正义的大古5 小时前
OpenLayers常用控件 -- 章节六:全屏控件教程
前端·javascript·html·openlayers
OC溥哥9996 小时前
Flask论坛与个人中心页面开发教程完整详细版
后端·python·flask·html