JavaEE 从入门到放弃(三):为什么要用 JSP?
yuyutoo 2024-10-12 01:06 6 浏览 0 评论
一、Servlet 与 JSP
Servlet 通常使用字符串拼接的方式动态生成 html,大量的 html 内容使代码难以维护、可读性差。
感受一下,简单地加一个 table 得酱写:
都快看不出来是 Java 代码了。
后来,大佬们想,既然能在 Java 中写 html,能不能在 html 中写 Java 呢?
于是 JSP(JavaServer Pages) 诞生了。
JSP 是基于 Servlet API 的,所以拥有 Servlet 拥有的一系列好处,可以实现各种功能,同时可以很方便地编写或修改网页,不用面对大量的 println 语句,但是,什么事情都要把握一个度,在 html 中混入大量、复杂的业务逻辑也是不可取的。
一种双剑合璧、扬长避短的方法是把 Servlet 当成 Controller 层,用于处理浏览器请求,并调用核心业务逻辑(Model)。而 JSP 则用作 View 层,负责动态地把处理结果输出到 html 中去。
Model、View、Controller,没错,这就是我们所说的 MVC 模式啦!这里先不赘述,以后会有一篇文章专门介绍 MVC 。
二、JSP 简介
JSP 是如何实现这种功能的呢?
通过分析源码,我们发现,JSP 被服务器 “转译” 成了 Servlet。
我们知道,在服务器中部署 Servlet,需要先把 Servlet 编译成 .class 文件,所以添加或修改 Servlet 需要重启服务器才能生效。而 JSP 的转译与编译均由服务完成,服务器如果设置了 JSP 监视,则不需重启就可以应用新增或修改的 JSP。
下面动手来个实践。
本部分内容来自 How2J 的 JSP 教程
test.jsp
在 web 目录下新建一个文件 test.jsp
(Tomcat 的 web 根目录为 /webapps/ROOT)
<%@page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
hello,jsp
<br>
<%=new Date().toLocaleString()%>
12345678
访问 localhost/test.jsp,可以看到运行结果
1 代码分析
Page 指令
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
1
<%@page ... %> 是 JSP 的 Page 指令,为浏览器提供当前页面的使用说明,与 html 的头对应。等价的 XML 格式为
<jsp:directive.page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"/>
1
JSP 表达式
JSP 表达式的语法格式为:<%= 表达式 %>,JSP表达式会先被转化为 String,然后插入到表达式出现的地方。
<%=new Date().toLocaleString()%>
1
本行代码输出当前的时间。
表达式可以出现在文本行中,而不一定是 html 标签。可以使用任何符合 Java 语言规范的表达式。
JSP 执行过程
test.jsp 的执行过程为:
- test.jsp 被转译为 test_jsp.java(该类继承自 HttpJspBase,而 HttpJspBase 继承自 HttpServlet)
- test_jsp.java 被编译成 hello_jsp.class
- 执行 hello_jsp.class,生成 html
- 通过 HTTP 协议把 html 响应返回给浏览器
2 页面元素
除了上面提到的指令和表达式,JSP 还有以下几种页面元素:
静态内容
即 html/css/javascript 等内容
Scriptlet
在 <% %> 之间,可以写任何 Java 代码
声明
在 <% ! %> 之间可以声明字段或方法,但是不建议这么做。
动作
<jsp:include page="Filename"> 在 JSP 页面中包含另一个页面。
注释
<%-- jsp代码 --%>
1
3 其它细节
其它细节方面的内容感兴趣的小伙伴可以自行去了解,还是那句话,编程最重要的是动手去做,不撸个几百万行代码怎么好意思说自己室程序员呢?
Servlet 和 JSP 实际上是各有千秋,我们应该如何扬长避短呢?且听下回分解——
相关推荐
- WMS系统设计拆解-入库管理1(wms入库作业流程图)
-
入库业务是仓储管理系统(WMS)中最基础、最关键的环节之一,直接影响到库存准确性、作业效率以及后续的出库和库内操作。作为仓储产品经理,深入理解入库业务的复杂性并设计出高效、灵活的解决方案,是提升仓储整...
- WMS系统的序列号管理(smart cover序列号)
-
在现代物流和仓储管理中,序列号管理扮演着至关重要的角色。它不仅帮助企业追踪商品流转,还能有效防止盗窃和伪造。然而,许多企业在实施序列号管理时常常面临各种挑战。本文将详细介绍在WMS(仓库管理系统)中,...
- 什么是系统管理?#企业管理(系统管理主要包括哪些内容?)
-
什么是系统管理?邱奕玮,营利增长地图顾问。我们老说要搭建管理系统,搭建管理体系到底什么是管理系统?很多时候老板其实概念是很模管理,给员工说你要做流程,员工就做一套流程文件,然后又说要做绩效考,员工又做...
- 公务员管理系统(公务员管理系统hzb怎么导出)
-
公务员管理系统headerfooter...
- 物流管理系统(比亚迪物流管理系统)
-
以管理员身份登录,进入系统业绩管理页面。1、创建界面后,继续完成相关操作。2、根据业绩管理模块的指引进行软件操作。3、更多模块请参见哲程CRM客户管理软件物流版官方操作手册。(9744083)...
- 更多驱动适配 + 跨平台共享,deepin深度操作系统打印管理升级
-
IT之家4月8日消息,深度操作系统今日发文宣布:为了解决打印机驱动的兼容性问题,deepin正式推出全新驱动下载平台,并升级了打印管理器,重点扩展驱动覆盖范围、优化跨平台兼容性、并深度支持...
- ERP系统功能拆解——生产管理是什么?怎么用?
-
本文深入探讨了ERP系统中的生产管理功能,揭示了如何通过高效的计划和控制来优化生产过程。从生产工单的制定到生产入库,每一个环节都被详细拆解,展示了简道云ERP管理系统如何实现流程自动化和数据跟踪。这是...
- 如何在NetBeans IDE中写出更好的Javadoc
-
作为一名在IDR解决方案上的开发者,我花了我很多时间来增加Javadoc中JPedal的JavaPDF库,使之更易于使用。我认为这可能是非常有用的,显示你的NetBeansIDE中如何简化这个过程...
- 6个最佳的Netbeans扩展插件(netbeans gui)
-
作为一个IDR解决方案的开发者,我花费大量的时间了解NetBeans的PDF查看器和NetBeans插件。下面跟大家分享一下哪些插件是比较值得安装的。下面是我认为比较有趣并值得安装的6个NetBean...
- HTTP404...前端必知,精辟简介(前端设置https)
-
1、介绍HTTP,超文本传输协议,是互联网中最为常用的一种网络协议。2、组成HTTP协议有HTTP请求和HTTP响应组成。...
- 会计人的 Python 速成指南:20 个常用代码块解析
-
--【AI会计革命:从账房先生到数据军师的跨界突围】【能力重构篇】泰山医院岳涛引言在数字化浪潮的冲击下,会计行业正经历着深刻变革。传统的账房先生式工作模式逐渐被智能化、自动化的流程所取代。对于会...
- EasyExcel导出Excel表格到浏览器,通过Postman测试导出Excel
-
一、前言小编最近接到一个导出Excel的需求,需求还是很简单的,只需要把表格展示的信息导出成Excel就可以了,也没有复杂的合并列什么的。...
- 用 Superb AI Suite 和 NVIDIA TAO Toolkit 创建高质量的计算机视觉应用
-
数据标记和模型训练一直被认为是团队在构建AI或机器学习基础设施时所面临的最大挑战。两者都是机器学习应用开发过程中的重要步骤,如果执行不当就会导致结果不准确和性能下降。...
- 二 计算机网络 前端学习 物理层 链路层 网络层 传输层 应用层 HTTP
-
一、基础概念请求和响应报文客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入相应报文中返回给客户端。...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)