最近因为一个项目演练的需要,需要学习J2EE这一体系。采用的是struts2,发现好不顺利,第一天弄struts2就半天调不过去,最后发现是自己引入包之后没有重新部署,直接重启服务器造成包根本没有被引入到webroot目录下WEB-INF的lib目录中,以后要注意引入包之后不但需要重启服务器tomcat还需要重新部署项目。
今天又遇到一个问题,在学习struts2的命名空间时一直报错访问不到,现在终于理解了,把自己遇到的问题总结一下:
1.在配置struts.xml文件的package节的namespace属性时,必须添加“/”,今天就因为没有加这个,半天找不到,必须以斜线开头。
2.默认名字空间。如果你在配置package节的时候没有namespace属性,那就是使用默认的命名空间,默认名字空间在我的理解就是,你可以直接访问你的action,不管你的TestAction前面有多少层包,你都可以通过http://localhost:8080/webdemo/test.action访问(webdemo为网站名称)。这里有一个很有趣的现象就是,访问默认名字空间的内容的url可以是任意的,比如访问上述的test.action,你可以在webdemo和test.action之间加入任何东西,如:http://localhost:8080/webdemo/abc/egeag/sagjiea/test.action。原因在于他会在“/abc/egeag/sagjiea”这个名字空间下寻找test.action,如果没有找到,他会在所有默认的名字空间的包中寻找,也就是说他会在所有的没有namespace属性的package当中寻找,因而无论你加什么限定,他都会找到!!!感觉很神奇。
3.加入名字空间之后的访问时需要加上名字空间的限定名,如果package内的namespace的属性是"/test"那么访问需要这样来写http://localhost:8080/webdemo/test/test.action。
4.对于控制台打印出的信息需要好好检查一下,今天就因为没有注意出错信息,访问半天访问不到,最后发现报错的地方是没有找到struts2-default父包,原来是我在extends属性写的是struts2-default不是struts-default,粗心之极,刚接触就闹出这么多麻烦。
5.我的理解是名字空间就是一个解决地址冲突的方法,你可以通过namespace方式来解决这个冲突。
个人笔记,有错误希望指出。