自己写了个类struts的框架,请大家提提意见
用过滤器完成,并没有特别高深的技术。
基本上记住三个对应,即页面和类、路径和包、页面参数和方法对应就可以直接使用了。给个例子。页面文件名和类名对应实例:/user/show.jsp对应类应该是org.seefan.action.user.ShowAction。
对应关系为:页面(不包括扩展名)文件名+Action=类名,文件名的第一个字母会自动大写。
例如: index.jsp对应的类名是 IndexAction。
路径和包名必须对应实例: /book/star/show.jsp对应类应该是org.seefan.action .book.star.ShowAction。
对应关系为:起始包名+路径(把 / 替换为 .)=包名,起始包名由startpackage参数在配置文件里定义。
本例中startpackage=org.seefan.action。
方法名和页面参数实例。例如:/user/login.jsp?action=doLogin,其实就是调用org.seefan.action.user.LoginAction类的 doLogin方法。
方法必须为public的方法 剩下的东东就看自己怎么高兴写了,我是用hibernate+el+prism(就是我自己写的这个框架啊,哈哈)写的自己的站,也是prism的官网哦。地址是http://my.jianel.net/prism/,有兴趣的朋友可以一起交流一下。目前存在的主要问题是第一次调用页面时速度比较慢,可能是反射和文件操作比较影响性能,不知道大家有什么好的建议。
用过滤器完成,并没有特别高深的技术。
基本上记住三个对应,即页面和类、路径和包、页面参数和方法对应就可以直接使用了。给个例子。页面文件名和类名对应实例:/user/show.jsp对应类应该是org.seefan.action.user.ShowAction。
对应关系为:页面(不包括扩展名)文件名+Action=类名,文件名的第一个字母会自动大写。
例如: index.jsp对应的类名是 IndexAction。
路径和包名必须对应实例: /book/star/show.jsp对应类应该是org.seefan.action .book.star.ShowAction。
对应关系为:起始包名+路径(把 / 替换为 .)=包名,起始包名由startpackage参数在配置文件里定义。
本例中startpackage=org.seefan.action。
方法名和页面参数实例。例如:/user/login.jsp?action=doLogin,其实就是调用org.seefan.action.user.LoginAction类的 doLogin方法。
方法必须为public的方法 剩下的东东就看自己怎么高兴写了,我是用hibernate+el+prism(就是我自己写的这个框架啊,哈哈)写的自己的站,也是prism的官网哦。地址是http://my.jianel.net/prism/,有兴趣的朋友可以一起交流一下。目前存在的主要问题是第一次调用页面时速度比较慢,可能是反射和文件操作比较影响性能,不知道大家有什么好的建议。
解决方案 »
- 跨域登陆的问题
- JavaEE的常用安全框架是什么
- 你有什么办法将这个singleton的class ,制造多个instances
- 初学者 java 书籍
- JSP连接sqlserver2005出现问题。请指教,谢谢!
- 关于自考本科 望有经验的同行给点建议~
- 谁能帮我解决一个spring的事务问题,另开贴200分相送
- 急求java api?
- JAVA程序运行的时候,如何得到本地机器上的SQL Server数据库的名字?
- 借问:现在外面搞J2EE的主流开发工具是什么
- 使用getRequestDispatcher出现NullPointerException的问题
- 看我写的 Hibernate 操作总觉得很别扭!
这样的对应关系不够灵活,因为jsp的页面相对独立,所以jsp存放的路径也很可能改变,改之后,不重新编译代码是不行的呀。需要配制的方法。
即然不想多做配置,也就没什么太好的方法。只能是加入一些搜索的代码。有一点是可以肯定的,页文文件名和类名应该是对应的。问题是当jsp路径改变是怎么办? 我的想法是可以在发送请求是多加一个参数(是可选的),是一个唯一的id,如/user/login.jsp?action=doLogin&xxxxxid=1234。在服务器端,(我想你的Action类应该有一个interface吧,所有的action类都implement它?)所以再加一个方法,getXXXXXID(),强制每个类都有这个方法,然后只返回一个固定的唯一的值(这个值可以用UUID产生)。这样,当过滤器收到一个请求,就还按照你原来的方法找对应的类。如果找不到,又没有XXXXID参数,就放弃(因为不需要对应的action),如果有id参数,应该扩大查找的范围,如果找到唯一的对应名字的Action类,那就是它了。如果找到多个,则用到那个ID来判断用哪一个,因为每个action类的ID都是唯一的。优化方法,如果资源充足,可以考虑在过滤器中加一个cache并hash所有的action类的ID,以便快速查找。这样做,你现在的框架功能没有改变,可以正常运行,如果真的出现页面路径更改的问题,代码是可以看到的,所以ID也是可知的,jsp是可以在线更改的,只要更改JSP加入这个ID参数就实现了移动查找,又不用重新编译。我的一点想法,仅供参考。
确实是个办法,虽然不能直接加到prism里去,确提醒了我。在java类里如果继承了java.io.Serializable,一般是要求写个serialVersionUID的,呵呵,我想我可以在这个上面做做文章,呵呵。前面你提到的一点说“我想你的Action类应该有一个interface吧,所有的action类都implement它?”,这个是没有的,呵呵,我前面说过,基于prism写的项目是不需要引入prism的任何类的,其实不需要引入接口的,也就是说项目里的东东和prism没有任何联系的,呵呵。
这也是我最被写它的原因,用一点点的规则换最大的自由。