游客发表

eclipse 搭建struts2框架

发帖时间:2026-10-17 05:00:06

用Eclipse搭Struts2,建s架最烦的建s架不是写代码,是建s架jar包冲突。我见过太多人卡在启动报错上,建s架折腾一下午发现是建s架少了个commons-lang3。所以先把该拉的建s架包拉齐:struts2-core、xwork-core、建s架ognl、建s架freemarker、建s架commons-fileupload、建s架commons-io、建s架commons-lang3、建s架javassist。建s架版本别乱选,建s架struts2-core 2.5.30配javassist 3.20左右比较稳,建s架用2.3.x的老版本反而容易和Tomcat 9打架。

新建Dynamic Web Project,Target runtime选Tomcat 9。关键一步在web.xml,FilterDispatcher是2.1时代的老东西,现在必须用StrutsPrepareAndExecuteFilter。配置大概长这样:

<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>

有人图省事写成<url-pattern>*.action</url-pattern>,结果静态资源全被拦,jsp里的css加载不出来。别问我怎么知道的。

把上面那堆jar丢进WEB-INF/lib,Eclipse有时候不认,得右键项目→Properties→Deployment Assembly手动加一遍。这一步漏了,Tomcat启动时ClassNotFoundException准时报到。

struts.xml放在src根目录下,编译后会自动进WEB-INF/classes。写个最简配置:

<struts> <package name="default" extends="struts-default" namespace="/"> <action name="hello" class="com.test.action.HelloAction"> <result name="success">/hello.jsp</result> </action> </package> </struts>

Action类不用继承任何东西,写个execute方法返回String就行。但要注意,Struts2的Action是多例的,每次请求new一个实例,所以成员变量可以放心用,不存在线程安全问题。这一点和Servlet正好相反,刚上手容易绕进去。

web.xml里还有个坑:如果没配<welcome-file>,访问项目根路径会404。加上index.jsp或者直接写个action跳转。另外struts.devMode设成true,开发阶段改配置不用重启,控制台还能看到详细报错。上线前记得关掉,不然日志能刷屏。

跑起来之后如果报“There is no Action mapped for namespace”,八成是struts.xml没编译进去。去WEB-INF/classes底下看一眼有没有这个文件,没有就clean一下项目重新build。Eclipse的自动编译偶尔抽风,手动Project→Clean能解决大半玄学问题。

最后说个实际观察:Struts2现在确实用得少了,Spring MVC和Spring Boot占了大半壁江山。但很多老项目还在跑,维护的时候绕不开。而且Struts2的拦截器栈设计挺有意思,理解它对看懂其他框架的过滤器链有帮助。搭环境本身不难,难的是遇到报错时知道去哪找线索——控制台日志、WEB-INF/lib目录、struts.xml位置,这三样查完基本能定位九成问题。

    热门排行

    友情链接