我认为JSP有问题(上)
(作者小龙亭主Blueski编译,原文发表于XXXX年XX月XX日)
在这个快速变化的web开发世界中,JSP作为一种由Sun公司大力推广的技术,已经崭露头角并日益受到重视。它的出现,解决了servlet中html代码与Java代码混杂的问题,加速了web应用开发和页面维护的速度。随着技术的不断进步和开发者对更高效、更便捷开发方式的追求,JSP也在不断地接受挑战和更新。
从最初的JSP 0.9到现在的JSP版本,开发者们一直在寻求更好的解决方案。直接使用servlets的方式在处理大量HTML代码时显得效率低下,使得页面维护变得复杂和繁琐。于是,JSP应运而生,允许开发者将Java代码嵌入到HTML文件中,使得页面生成更加动态和灵活。随着JSP技术的成熟,人们发现将Java代码嵌入HTML并不是最佳实践。于是,“Model 2”设计应运而生,它基于model-view-controller模型,将请求发送到servlet控制器,由控制器执行商业逻辑并决定返回哪个JSP页面进行显示。这使得JSP文件更像是一个基于数据的模板视图。
尽管JSP技术得到了广泛的应用和认可,但它仍然存在一些问题。其中最明显的是Java代码的模板化问题。尽管JSP试图将Java代码融入web页面,但这使得页面的结构变得复杂,难以理解和维护。这促使了template engines的发展。相比于JSP,template engines提供了更简单、更直观的语法,使得页面的结构更加清晰易懂。template engines还提供了更多的工具和功能,使得开发者能够更方便地进行开发。
JSP和template engines都是web开发的重要工具。它们各有优劣,开发者需要根据项目的需求和团队的技术背景来选择使用哪种技术。随着技术的不断进步和开发者对更高效、更便捷开发方式的追求,我们有理由相信,这两种技术将会在未来的web开发中发挥更大的作用。我们也期待有更多的新技术出现,为web开发带来更多的选择和可能性。在JSP页面中的Java代码使用问题
在JSP页面中,我们经常需要编写Java代码来实现特定的功能,比如决定当前Web应用的根上下文路径导向主页,或者设置Cookie来记录用户的配置信息。尽管可以使用HTML标签来避免直接写Java代码,但这往往会导致代码变得难以阅读和维护。
想象一下,如果我们想要决定当前Web应用的根上下文路径导向主页。在JSP中,我们可能会使用如下Java代码:
`/index.html"` > Home page
虽然可以使用HTML标签实现同样的效果,如使用``标签配合动态生成的URL,但这样往往会生成一些难以理解和维护的字符串,如`/index.html"` >HomePage。这样的代码对于非开发人员来说可能难以理解。
相比之下,使用模板引擎如WebMacro可以简化这个问题。在WebMacro中,我们可以使用类似Perl的语法来访问ContextPath属性,这样,就可以轻松实现同样的功能而无需编写Java代码。例如:
Home page
假设我们需要设置一个cookie来记录用户的默认颜色配置。在JSP中,我们需要编写Java代码来创建和添加cookie,如:
<% Cookie c = new Cookie("colorscheme", "blue"); response.addCookie(c); %>
而在WebMacro中,我们可以使用简单的语法来设置和获取cookie的值,如:
set $Cookie.colorscheme = "blue"
对于必须编写JSP的图形界面设计师来说,哪一种语法更容易学习呢?显然,WebMacro或其他模板引擎的语法更加直观和易于理解。它们允许设计师在不了解Java细节的情况下实现许多常见的任务。
JSP 1.1引入了自定义标记(custom tags)的功能,允许开发者创建与HTML相似的标记在JSP页面中执行Java代码。这是一个很有价值的特性,但需要有一个广泛知晓的、全功能的、可以免费得到的、标准化的标记库来支持。虽然目前还没有这样的标记库出现,但随着JSP技术的发展,我们期待这一领域的进步。
对于需要在JSP页面中编写Java代码的开发者来说,掌握模板引擎的语法和使用自定义标记的功能将使他们更高效地进行开发,同时提供更易于理解和维护的代码。而对于非开发人员的图形界面设计师来说,学习模板引擎的语法将是一个很好的技能提升方式。
编程语言
- 我认为JSP有问题(上)
- Mysql的max_allowed_packet设定
- Spring 自动代理创建器详细介绍及简单实例
- Bootstrap+jfinal实现省市级联下拉菜单
- javascript实现点击商品列表checkbox实时统计金额的
- JSON 数据详解及实例代码分析
- vue中rem的配置的方法示例
- .NET使用.NET Core CLI开发应用程序
- 前端程序员必须知道的高性能Javascript知识
- Bootstrap 中data-[-] 属性的整理
- koa-router源码学习小结
- axios全局请求参数设置,请求及返回拦截器的方法
- etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
- jQuery插件scroll实现无缝滚动效果
- ASP.NET编程简单实现生成静态页面的方法【附dem
- Validform+layer实现漂亮的表单验证特效