Java基础(16)JSP

Java Server Pages (JSP) 是一个帮助开发者创建动态生成的网页的技术,它基于Java Servlet API。JSP将Java代码与HTML标签混合,使得Web开发者可以更快地开发和管理动态网页。

JSP 基础

在JSP中,你可以直接在HTML代码中插入Java代码。这些Java代码块在服务端执行,并且能够动态地生成客户端的HTML。

JSP 支持以下类型的标签:

  • 指令标签(Directives):配置JSP页面的设置,比如导入类、设置内容类型等。
  • 声明标签(Declarations):声明全局变量和方法。
  • 表达式标签(Expressions):在JSP页面中输出Java表达式的值。
  • 脚本片段标签(Scriptlets):包含任意的Java代码。
  • 动作标签(Actions):用于执行存在的组件或JSP页面,或者用于重用组件。

JSP 生命周期

JSP 页面的生命周期可以分为以下几个步骤:

  1. 转译:JSP页面被转译成相应的Servlet。
  2. 编译:转译生成的Servlet代码被编译成字节码。
  3. 初始化 :调用Servlet的init方法。
  4. 执行 :对每次客户端请求,Servlet的service方法被调用。
  5. 销毁 :调用Servlet的destroy方法。

JSP 例子

以下是一个简单的JSP页面的例子:

jsp 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
<%-- This is a JSP comment --%>

<%!
    // 声明方法
    public String getTime() {
        return new java.util.Date().toString();
    }
%>

<h1>Hello, JSP!</h1>
<p>The time is: <%= getTime() %></p> <!-- 输出时间 -->

</body>
</html>

在这个例子中:

  • <%@ page ... %> 是一个指令,它告诉JSP页面使用UTF-8编码和Java作为脚本语言。
  • <%! ... %> 是一个声明,用于定义一个可在JSP页面中使用的方法。
  • <%= ... %> 是一个表达式,用来输出getTime方法的结果。
  • <%-- ... --%> 是一个JSP注释。

JSP 转换成 Servlet

当JSP页面被请求时,它首先会被转化为一个Servlet源码,然后编译成.class文件。这个过程是自动的,并且通常是由JSP容器或Web服务器来处理。

如果我们上面的JSP页面转换成Servlet,它看起来可能是这样的:

java 复制代码
public class Hello_jsp extends HttpServlet {
    public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello JSP</title>");
        out.println("</head>");
        out.println("<body>");

        out.println("<h1>Hello, JSP!</h1>");
        out.println("<p>The time is: " + new java.util.Date() + "</p>");

        out.println("</body>");
        out.println("</html>");
        out.println();
    }
}

在实际的转换中,会有更多的模板化代码,以及对于错误处理、线程安全等方面的处理,但上面的示例提供了一个基本的概念。

注意事项

  • 在实际的生产环境中,常常会使用JSP标准标签库(JSTL)和表达式语言(EL),来避免在JSP中编写Java代码,从而把表示层和逻辑层分离开来。
  • 虽然JSP允许你在HTML中直接编写Java代码,但这并不是一种好的实践。将业务逻辑和展示逻辑混合在一起会使代码难以维护和测试。
  • JSP现在已经不是新项目的首选技术,现代的Java Web开发通常使用基于MVC模式的框架,比如Spring MVC。这些框架提供了更清晰的分层架构和更强的功能。
相关推荐
sg_knight3 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
喵个咪6 小时前
初学者入门:用 go-kratos-admin + protoc-gen-typescript-http 快速搭建企业级 Admin 系统
后端·typescript·go
用户21411832636027 小时前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
计算机毕设匠心工作室9 小时前
【python大数据毕设实战】全面皮肤病症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
摆烂工程师9 小时前
2025年12月最新的 Google AI One Pro 1年会员教育认证通关指南
前端·后端·ai编程
qq_124987075310 小时前
基于SpringBoot+vue的小黄蜂外卖平台(源码+论文+部署+安装)
java·开发语言·vue.js·spring boot·后端·mysql·毕业设计
代码与野兽10 小时前
AI交易,怎么让LLM自己挑选数据源?
前端·javascript·后端
天天摸鱼的java工程师10 小时前
JDK 25 到底更新了什么?这篇全景式解读带你全面掌握
java·后端
非鱼feiyu10 小时前
自关联数据表查询优化实践:以 Django + 递归 CTE 构建树结构为例
数据库·后端·django
零日失眠者10 小时前
这5个Python库一旦掌握就离不开
后端·python