`

为什么规范的页面不要用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  
看吧,调用一些静态数据,枚举的话我还是会引用的

相关推荐

    jsp中使用echarts示例

    jsp中使用echarts包括echarts的饼图,柱状图,折线图等等

    创造一个Python浏览器.rar

    在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器。关于 PyQt ,你可能已经有所耳闻了,它是 Qt 框架下的一系列 Python 组件,...这个例子十分短小,连 import 语句和空行在内也只有 13 行代码。

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    疯狂JAVA讲义

    学生提问:为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器里不就可以了吗? 143 5.6 类的继承 144 5.6.1 继承的特点 144 5.6.2 重写父类的方法 145 5.6.3 父类实例的...

    freemarker总结

    使用??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false ########################### 最常用的概念 1、 scalars:存储单值 字符串:简单文本由单或双引号括起来。 ...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    虽然说学习ASP.NET不需要任何ASP基础,但是我觉得如果大家ASP不会,还是先看一下【十天学会ASP教程】,大家所需要了解的不是ASP的程序怎么写,而是怎么构建服务器,怎么使用HTML表单,同时对SQL语句有一个基础和理解...

    Servlet与JSP核心编程第2版

    11.9 使用scriptlet将jsp页面的某些部分条件化 11.10 使用声明 11.11 声明的例子 11.12 使用预定义变量 11.13 jsp表达式、scriptlet和声明的比较 第12章 控制所生成的servlet的结构:jsppage指令 12.1 ...

    Python核心编程第二版

     10.10 (现在)为什么用异常   10.11 到底为什么要异常   10.12 异常和sys模块   10.13 相关模块   10.14 练习   第11章 函数和函数式编程   11.1 什么是函数?   11.1.1 函数vs过程   ...

    windows编程资料大全

    编译执行后,你会发现出现一个非法操作错误,为什么呢?在我们以段页式内存管理的win2K操作系统中,编译时会把所有的常量编译在PE文件的.data节中,而代码段则在.text中,所以,我们拷备到宿主进程中的代码是在.text...

    DWR.xml配置文件说明书(含源码)

    这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creator和converter需要有个id属性来允许以后进行引用. 配置文件的allow部分定义哪些类可以建立和转换,每个被准许的类都...

    Python核心编程第二版(ok)

     10.10 (现在)为什么用异常   10.11 到底为什么要异常   10.12 异常和sys模块   10.13 相关模块   10.14 练习   第11章 函数和函数式编程   11.1 什么是函数?   11.1.1 函数vs过程   ...

    excel导入sql2005的几种方法归纳

     在这个例子中,我们将使用windows验证连接到本地SQL Server实例,所使用的数据库将是ImportExcel。  在Specify Table Copy or Query(指定表复制或查询)向导界面中,选择copy data from one or more tables or ...

    使用Matlab下载googlefinance上面的option数据版本2012a-getoption.m

    使用Matlab下载googlefinance上面的option数据版本2012a-getoption.m 本帖最后由 1989111 于 2014-3-31 12:00 编辑 之前一直潜水,但是后来写了点程序回馈大家,献丑了!大家都知道下载yahoo 或者google的的股票...

Global site tag (gtag.js) - Google Analytics