最近在学习JavaEE开发,今天学了下Struts2, 发现和书上略有不同,麻痹,新手学这个,感觉还真是有点操蛋,搞了TM一上午,终于把书上的第一个Struts2程序跑出来了,骂了隔壁,记录一下,要是以后再碰到,就有个参考了。
Filter的配置
在web.xml中,配置Filter,如果没有web.xml,在项目上单击右键,选择”JavaEE Tools”-“Generate Deployment Descriptor Stub”则会自动生成web.xml。在该文件中的配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我完全按照书上的步骤来,第一个坑就出现了。书上使用的类是
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
但是搞来搞去也搞不成,总是抛出java.lang.ClassNotFoundException,于是我把包打开一看,发现Struts2.5.10已经修改了路径,正确的路径如下:
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
为防止输入出错,建议打开struts2-core-2.5.10.jar,然后进入到org.apache.struts2.dispatcher.filter包,找到下面的类,然后右键选择“Copy Qualified Name”,这样可确保不会出错。
struts.xml
在Eclipse中生成xml文件,麻痹,不知道是不是我方法有问题,反正我生成的就是一个空白的xml文件,除了一个version声明,从structs目录下打开apps目录,里面有两个war文件,解压出来,依次打开”WEB-INF”-“src”,里面有一个struts.xml,可以从里面复制出DOCTYPE,如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
这样,Eclipse才会有提示。而且名字文件名字必须叫struts.xml,我在搞的时候写成了struts2.xml,结果TM又搞了好久才发现。
依赖包的问题
书上说要把依赖包加到”WEB-INF”-“lib”目录下,于是我右键选择”Import”,然后按书上导入依赖包,如下:
但是却出现了问题,经过百度,最终发现,原来需要手动把文件Copy到lib目录下,然后再Import才有用。麻蛋,搞个东西这么麻烦,可能是我初学,所以觉得真TM坑爹。
动态Action的问题
动态Action会出现两个很操蛋的问题,一个是
这个问题真TM操蛋,我TM大网上找了好多,全部都是说什么struts.xml文件名写错了,要么就是类名写错了什么,或者是位置一定要在src下,我检查一下,发现情况全部都符合,但还是出问题了,原来是要在struts.xml下加一句代码:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
第二个问题是
这个问题的解决方案是在package节点下添加一个允许方法列表
<global-allowed-methods>add, update</global-allowed-methods>
这样,动态Action就能正式跑起来了。
吐槽
麻痹,老子忍不住要说赃话,谁TM想出来的这种反人类的配置,简单直操蛋的一逼。搞了一天,身边也没什么人懂,就搞出来这样一个东西,日了狗了。
结束
好像听说现在企业用Struts2的企业已经不多了,新项目都不用这个了。但是书上按这个顺序来,我也就这么学了,不管有没有用,新技术总是从老技术的基础上发展过来的,所以继续学吧。