`

为什么规范的页面不要用import语句?今天有个例子

    博客分类:
  • UI
阅读更多
<%@page import="xxx.xxx.common.XMLManager"%>


之前一直都坚持保持“干净的”jsp页面,也因此一直没遇到什么问题,所以也就不明白这样坚持的好处在哪里。

在新公司维护旧的项目,这里的jsp页面有大量的import,所以今天就碰到了问题。

重构的时候,感觉XMLManager放的package位置不太贴切,就用eclipse的refactor功能把这个类move到一个更合适的位置。因为知道eclipse会自动把依赖的类都进行相应修改,很放心地就提交了。结果过一会发现很多jsp页面各种异常。

一查就发现原因很简单,就是因为这些页面import了我刚刚移动的这个类,refactor功能是无法自动关联修改jsp页面的,所以要么自己把jsp页面都手动改了,要么就老老实实把类放回去。安全起见,我还是把XMLManager类又放回了原来的package。

重构失败了,不过也就知道了为什么规范的jsp页面应该尽量少用import语句。包括尽量不用java脚本,也是这个原因——维护困难。
分享到:
评论
14 楼 kyfxbl 2010-12-31  
确实是我忘记了。但是如果jsp里没有import java类,就不存在忘记不忘记了,呵呵。

你的步骤是可行的,但看了就感觉工作量很大。
13 楼 skzr.org 2010-12-30  
kyfxbl 写道
skzr.org 写道
其实jsp中不写import,那jsp调用java怎么办?

个人特别反对使用标签:这东西看着恶心。
如果在标签和模板解析中选择,重复性高的我会选择模板解析,如果重复性低的我就直接写个帮助类,做这个事情。

至于jsp的验证,使用MyEclipse的validate就可以检测出来问题的

重构的时候需要注意所有可能的影响,我一般先search file,考察影响范围,再考虑怎样重构

记得一个项目,原来没有考虑系统皮肤的问题,后来要考虑,一个search,基本上所有的
jsp,js和css里面都有需要更改的,最后设计一个search and replace的步骤,最终都改好了,几千个文件的修改,修改+测试用了3天!


我觉得你的案例已经说明了jsp和java耦合带来的问题,一次改几千个文件,这完全是维护噩梦嘛。

jsp不应该去调用java,页面中需要的值直接从action中传出来,或者在session里获取比较好一点。

用标签是最好的,不知道为什么你觉得恶心?难道你觉得一个自定义标签恶心,十几行甚至几十行java脚本反而不恶心?


换肤例子实际上是说明,重构的一般步骤,其实未涉及到标签、java和jsp:
1 确定范围:找到所有受到影响的地方: java,jsp等等一切相关资源文件,一般通过eclipse的search file,可以标识出来
2 确定实施方案:根据影响的范围,寻找合理的重构实施步骤
3 动手修改
4 验证此次修改

你的例子说的重构时发现jsp中的java代码未一起变动,只是重构时忘记 确定此次重构的影响范围而已
jsp标签感觉用处不大,我们的UI组件基本不会变化,因为从一个成熟的UI切换到其他的UI,还要重新学习,遇到问题还要重新解决,麻烦,就如领导要求的这个chart,要用标签,万一我门不用jfreechart,用flash chart呢?其实说不定此软件都消亡了,还没有遇到需要切换的时候
12 楼 wpfwupengfeiwpf 2010-12-28  
kyfxbl 写道
skzr.org 写道
其实jsp中不写import,那jsp调用java怎么办?

个人特别反对使用标签:这东西看着恶心。
如果在标签和模板解析中选择,重复性高的我会选择模板解析,如果重复性低的我就直接写个帮助类,做这个事情。

至于jsp的验证,使用MyEclipse的validate就可以检测出来问题的

重构的时候需要注意所有可能的影响,我一般先search file,考察影响范围,再考虑怎样重构

记得一个项目,原来没有考虑系统皮肤的问题,后来要考虑,一个search,基本上所有的
jsp,js和css里面都有需要更改的,最后设计一个search and replace的步骤,最终都改好了,几千个文件的修改,修改+测试用了3天!


我觉得你的案例已经说明了jsp和java耦合带来的问题,一次改几千个文件,这完全是维护噩梦嘛。

jsp不应该去调用java,页面中需要的值直接从action中传出来,或者在session里获取比较好一点。

用标签是最好的,不知道为什么你觉得恶心?难道你觉得一个自定义标签恶心,十几行甚至几十行java脚本反而不恶心?

也应该分情况而定吧,很多自定义标签和大量的值充斥到session,难道不影响性能么?
11 楼 kyfxbl 2010-12-28  
skzr.org 写道
其实jsp中不写import,那jsp调用java怎么办?

个人特别反对使用标签:这东西看着恶心。
如果在标签和模板解析中选择,重复性高的我会选择模板解析,如果重复性低的我就直接写个帮助类,做这个事情。

至于jsp的验证,使用MyEclipse的validate就可以检测出来问题的

重构的时候需要注意所有可能的影响,我一般先search file,考察影响范围,再考虑怎样重构

记得一个项目,原来没有考虑系统皮肤的问题,后来要考虑,一个search,基本上所有的
jsp,js和css里面都有需要更改的,最后设计一个search and replace的步骤,最终都改好了,几千个文件的修改,修改+测试用了3天!


我觉得你的案例已经说明了jsp和java耦合带来的问题,一次改几千个文件,这完全是维护噩梦嘛。

jsp不应该去调用java,页面中需要的值直接从action中传出来,或者在session里获取比较好一点。

用标签是最好的,不知道为什么你觉得恶心?难道你觉得一个自定义标签恶心,十几行甚至几十行java脚本反而不恶心?
10 楼 skzr.org 2010-12-28  
其实jsp中不写import,那jsp调用java怎么办?

个人特别反对使用标签:这东西看着恶心。
如果在标签和模板解析中选择,重复性高的我会选择模板解析,如果重复性低的我就直接写个帮助类,做这个事情。

至于jsp的验证,使用MyEclipse的validate就可以检测出来问题的

重构的时候需要注意所有可能的影响,我一般先search file,考察影响范围,再考虑怎样重构

记得一个项目,原来没有考虑系统皮肤的问题,后来要考虑,一个search,基本上所有的
jsp,js和css里面都有需要更改的,最后设计一个search and replace的步骤,最终都改好了,几千个文件的修改,修改+测试用了3天!
9 楼 白糖_ 2010-12-28  
这算不算MVC的原则呢,让展示层与后台代码分离
8 楼 helin 2010-12-27  
重构的时候选上页面,包括jsp,xml,这样就安全了。
7 楼 yunchow 2010-12-27  
mp_juan 写道
对于静态和常量数据,建议自己实现一个ContextLoaderListener,把所有的静态资源,常量加入到ServletContext中去,这样不就解决问题了?也可以自己实现标签,解析你的数据,这样页面不需要引入任何java类,包括常量。


小项目倒是可以,我有时也这么做的,但是大项目中,特别是在集群环境当中,如果太多其实也造成一定程度上的负担
6 楼 mp_juan 2010-12-27  
对于静态和常量数据,建议自己实现一个ContextLoaderListener,把所有的静态资源,常量加入到ServletContext中去,这样不就解决问题了?也可以自己实现标签,解析你的数据,这样页面不需要引入任何java类,包括常量。
5 楼 yunchow 2010-12-27  
jsp 也好重构啊, 如果用的是eclipse,直接ctrl+H, 如果不是,写个脚本搞定
4 楼 kyfxbl 2010-12-27  
leepengyu 写道
这是一个理想……
实际中要做到很难。


新项目的话,不难。重构已经比较庞大的旧项目,确实比较难。
3 楼 leepengyu 2010-12-27  
这是一个理想……
实际中要做到很难。
2 楼 hastune 2010-12-27  
jsp引入包0 0写java代码吗.

用标签神马的不是来得更爽吗
1 楼 davepkxxx 2010-12-24  
看吧,调用一些静态数据,枚举的话我还是会引用的

相关推荐

    详解webpack import()动态加载模块踩坑

    其中,`import()` 是 Webpack 提供的一种动态加载模块的功能,它基于 ES2015 的模块加载规范,实现了按需加载代码的能力,极大地优化了应用的加载性能。本文将深入探讨 `import()` 的使用及其可能遇到的问题。 `...

    web前端优化时为什么不建议使用css @import

    这就解释了为什么在优化中要避免使用@import,而推荐使用标签。 总结来说,在Web前端优化中建议避免使用CSS的@import指令有以下原因: 1. 导致CSS文件不能并行下载,增加了页面加载时间。 2. 在CSS文件完全下载并...

    300个JavaScript小例子

    这个名为"300个JavaScript小例子"的资源包,显然提供了一整套丰富的JavaScript代码示例,旨在帮助学习者理解和掌握JavaScript的各种功能和用法。这些小例子覆盖了JavaScript的基础到进阶的知识点,包括但不限于变量...

    JSTL 核心标签库小例子

    本教程将通过一个小例子来深入理解JSTL核心标签库的使用。** 在JSTL中,核心标签库(core tag library)是最常用的一部分,它提供了处理控制流、URL生成、条件语句、迭代等功能。下面我们将逐一探讨这些标签的用法...

    freeMarker例子

    在这个“freeMarker例子”中,我们可以深入学习FreeMarker的基本用法和特点。博客链接指向了iteye上的一个博客,尽管具体内容未给出,但通常会包含FreeMarker的安装、配置、基本语法、控制结构、内置函数以及与其他...

    JavaScript各种使用例子

    本资源包"JavaScript各种使用例子"收集了一系列JavaScript的实际应用示例,旨在帮助开发者更好地理解和运用JavaScript。下面我们将深入探讨其中可能涵盖的知识点。 1. **基础语法**:JavaScript的基础包括变量声明...

    js 实用小例子

    通过在`&lt;style&gt;`标签内使用`@import`语句,可以动态引入外部CSS文件: ```html &lt;style&gt;@import url("ie.css") ``` 这样做的好处是可以在不刷新整个页面的情况下更新页面样式。 ### 知识点五:实现全屏功能按钮 添加...

    深入理解CSS中的@import

    并且,如果@import使用不当,多个@import的顺序可能会导致加载问题,使得页面样式出现混乱。 由于这些问题,一些开发者和文章可能建议不要使用@import,尽管这是出于性能的考量。然而,@import在某些情况下仍然有其...

    jsp中使用echarts示例

    在Java Web开发中,我们常常用JSP(JavaServer Pages)作为前端页面,结合ECharts实现动态数据的可视化。下面将详细讲解如何在JSP中集成并使用ECharts。 1. **引入ECharts库** 在JSP页面中,首先需要引入ECharts的...

    jsp简单的登陆注册例子

    在JSP页面中,我们可以使用`request.getParameter()`方法获取这些参数,然后将它们保存到数据库中。数据库连接通常通过Java Database Connectivity (JDBC) API来实现,这包括加载数据库驱动,建立连接,执行SQL插入...

    javascript例子javascript例子

    这个"javascript例子javascript例子"的压缩包很可能包含了一系列用于教学或示例的JavaScript代码片段,总计320个。这些例子可能是为了帮助初学者理解和掌握JavaScript的核心概念和常见用法。 在JavaScript中,你...

    JavaScript实用例子

    这个名为"JavaScript实用例子"的压缩包包含了多种JavaScript的实际应用案例,旨在帮助开发者更好地理解和掌握JavaScript的基本语法以及高级特性。 一、JavaScript基础 JavaScript的基础包括变量、数据类型、操作符...

    300个JavaScript小例子.rar

    本压缩包"300个JavaScript小例子.rar"包含了一系列JavaScript编程实例,旨在帮助初学者和进阶者更好地理解和掌握JavaScript的核心概念与技巧。 1. **基础语法** JavaScript的基础包括变量声明(var、let、const)...

    tomcat连接池应用例子

    在这个例子中,我们首先通过`InitialContext`查找名为`jdbc/MyDB`的数据源,然后使用数据源创建数据库连接。执行完SQL操作后,记得关闭连接以释放资源。 连接池的主要优点包括减少数据库连接创建和销毁的开销,提供...

    Javascript45个经典例子

    这个压缩包包含45个JavaScript的经典实例,以及一个名为"Javascriptjavascript使用技巧.txt"的文本文件,旨在帮助用户深入理解和掌握这门语言的核心概念及实用技巧。 1. **变量与数据类型**:JavaScript支持动态...

    jsp数据库处理和文件操作例子

    **JSP(JavaServer Pages)数据库...通过这个例子,你可以学习到如何在JSP中有效地管理数据库,以及如何执行基本的文件操作,为你的Web应用程序添加更多功能。实践是学习的最好方式,建议动手尝试并理解每一个示例。

    javascript例子13套

    异步JavaScript和XML,实现在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容的技术,如今通常使用fetch API。 10. ES6及后续版本的新特性: 包括类(class)、模块(import/export)、解构赋值、模板...

    javascript多种经典例子

    这个压缩包文件“javascript多种经典例子”很可能是包含了一系列的JavaScript代码示例,用于帮助学习者理解并掌握JavaScript的关键概念和实际应用。 1. **变量与数据类型**: JavaScript 支持动态数据类型,这意味...

Global site tag (gtag.js) - Google Analytics