简单上手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应用程序。

相关推荐
一只爱打拳的程序猿1 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧3 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck5 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
为将者,自当识天晓地。23 分钟前
c++多线程
java·开发语言
daqinzl31 分钟前
java获取机器ip、mac
java·mac·ip
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
假装我不帅2 小时前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc