自己写了个类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/,有兴趣的朋友可以一起交流一下。目前存在的主要问题是第一次调用页面时速度比较慢,可能是反射和文件操作比较影响性能,不知道大家有什么好的建议。

解决方案 »

  1.   

    谢谢楼上的回复啊,其实不算完全模访,毕竟我写的这个除了一个简单的过滤器那块要配置一下,其它地方是不要配置的,而且基于prism写的项目也是不需要引入prism相关类的,就是说,不用继承我的类的,struts可是要继承的,而且每个方法都是一样的格式。prism就没有这个要求了,随便您怎么写都可以的。
      

  2.   

    支持一下楼主。提个意见:
    这样的对应关系不够灵活,因为jsp的页面相对独立,所以jsp存放的路径也很可能改变,改之后,不重新编译代码是不行的呀。需要配制的方法。
      

  3.   


    即然不想多做配置,也就没什么太好的方法。只能是加入一些搜索的代码。有一点是可以肯定的,页文文件名和类名应该是对应的。问题是当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参数就实现了移动查找,又不用重新编译。我的一点想法,仅供参考。
      

  4.   


    确实是个办法,虽然不能直接加到prism里去,确提醒了我。在java类里如果继承了java.io.Serializable,一般是要求写个serialVersionUID的,呵呵,我想我可以在这个上面做做文章,呵呵。前面你提到的一点说“我想你的Action类应该有一个interface吧,所有的action类都implement它?”,这个是没有的,呵呵,我前面说过,基于prism写的项目是不需要引入prism的任何类的,其实不需要引入接口的,也就是说项目里的东东和prism没有任何联系的,呵呵。
    这也是我最被写它的原因,用一点点的规则换最大的自由。