日期:2014-05-18  浏览次数:20637 次

struts2的设计问题,为什么它会是这样的?
这几天拿struts2做试验,发现几个我无法理解的地方: 

1.既然我已经是mvc架构,为何struts2仍然允许访问真实路径的jsp文件? 
  这点尤其困惑,在asp.net mvc里客户是不能直接访问源页面的,访问就会出错,可能有人会觉得这很呆板,但是这解决了后面一个问题,什么问题我后面叙述,如果有人知道struts2为啥会这么设计请告诉我 

2.action的路径、所谓的上下文路径、物理文件的真实物理路径,之间是否有什么关联?上下文路径似乎是可以变化的,它变化的时候,对action,以及jsp内部的链接地址是否产生影响?。 

3.struts2里action的result有一个类型是重定向,问题在于,这个重定向到底改变了什么没有?我做试验,重定向到子目录下的一个文件,用request.getContextPath()得到的结果是这个重定向根本没有改变上下文路径,我仍然在根目录下,那么重定向仅仅是把客户端引到一个新地址去吗? 

4.最重要的一个问题,也是第一个问题造成的麻烦来了,我本希望用action做成一个全网站无jsp后缀的伪静态网站,然后我找到了一个网上的例子,利用fifter过滤未授权的访问,我测试以后,发现它过滤的是真实物理路径的jsp文件!它不能过滤action!我希望的是全站禁止用户访问真实物理文件,同时能用权限管理控制用户访问管理action。如何做到?

------解决方案--------------------
看得出来楼主是个爱思考的人,但是好像一些问题超出了楼主的知识范围。
建议楼主好好读一读servlet规范和http协议的内容,看起来楼主想要做的就是第4个问题的提的内容:我本希望用action做成一个全网站无jsp后缀的伪静态网站。 如果楼主真地理解了http协议和servlet的工作原理,这绝对不是一个问题,也绝对不需要从网上找一个例子。一个JSP开发的网站,工作方式其实真地算是很简单(不然不会这么多JAVA WEB程序猿(包括我)整天抱怨工资问题了)。
最后,楼主想要了解的问题,绝对是不用深究structs的。框架是用来简化开发工作的,但是90%的程序猿都被训练成只会用框架的机器,希望楼主能早日解决问题!
------解决方案--------------------
Struts2的动态地址与JSP的动态地中,最大的不同点在于Struts2把所有的静态地址都显示成了动态地址,Struts2没有真正的from标摊提交的地址。

而JSP的地址都是动态地址,对静态页面不设置动态地址,所有from表单提交的瞬间也要设置提交的地址,这就是重定向。即使只有瞬间的信息提交,这个提交动作的地址也是存在的!!!

所以Struts的result和重定向的区别很大,你慢慢的在做项目的同时就能够理解的,我推推荐你最好使用Struts的动态Action来完成,我们一般都用动态Action,有三种提交的动态地址的写法。静态Action就是小儿科,开发的速度还比较慢!!!