struts2菜鸟教程

 人参与 | 时间:2026-10-17 06:53:30

struts2菜鸟教程

我第一次用Struts2的菜鸟时候,差点把电脑砸了。教程不是菜鸟因为它难,而是教程网上教程全在讲"什么是MVC""为什么要用框架"——我管你什么架构,我就想把表单数据存进数据库,菜鸟结果配了三天环境还在看理论。教程所以这篇直接讲怎么跑起来,菜鸟踩过的教程坑我都给你标出来。

先装东西。菜鸟去Apache官网下个struts-2.5.30-all.zip,教程别下最新的菜鸟2.5.31,那个版本有坑,教程跟某些旧版Tomcat不兼容。菜鸟解压后把lib文件夹里所有jar包复制到项目的教程WEB-INF/lib下——别偷懒只复制几个,我试过,菜鸟缺一个就报ClassNotFound。然后改web.xml,加个过滤器,这玩意儿是Struts2的核心入口。代码长这样:

<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,那样静态资源会被拦截,CSS全挂。我第一次就栽在这,页面丑得没法看,排查了半天才发现是过滤器把图片也拦了。

接着在src目录下建个struts.xml。这是Struts2的大脑,所有请求映射都靠它。最简配置就一个action和一个result:

<struts> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.test.LoginAction"> <result name="success">/welcome.jsp</result> <result name="error">/login.jsp</result> </action> </package> </struts> 

namespace="/"意味着URL直接就是localhost:8080/项目名/login.action。别问我为什么非得加.action后缀,这是Struts2的默认后缀,你可以在struts.xml里改,但新手别碰,改了容易出幺蛾子。

写Action类。这个类就是个普通Java类,不用继承任何东西。核心是写个execute方法,返回String,用来告诉Struts2跳哪去。看这个例子:

public class LoginAction {  private String username; private String password; public String execute() {  if("admin".equals(username) && "123".equals(password)) {  return "success"; } return "error"; } // getter和setter必须写,Struts2靠反射取值 } 

这里有个坑:getter/setter必须写全,少一个就报错。而且属性名不能带大写字母,比如userName会出问题,得写username。我同事写过userName,结果页面表单提交后值全是null,找了一下午bug。

JSP页面里接收数据也简单。表单直接提交到login.action,Struts2会自动把请求参数塞进Action的属性里。回显数据用s:property标签,记得在JSP头部加<%@ taglib prefix="s" uri="/struts-tags" %>。比如登录失败后显示错误信息,就写<s:property value="message"/>,然后在Action里set个message属性就行。

跑起来试试。Tomcat启动,访问login.jsp,填admin/123,跳转到welcome.jsp。填错了,回到login.jsp。就这么简单。Struts2的核心思想就是:请求来了,根据struts.xml找到对应Action,执行execute方法,根据返回值跳页面。其他什么拦截器、类型转换、校验,都是在这个基础上加料。

最后说个最坑的版本问题。Struts2在2013年爆过远程代码执行漏洞,所以老教程里很多写法现在都不能用了。比如<result type="redirect">里面带参数,新版本写法变了。你如果跟着旧教程配,可能直接500。认准2.5.x版本,别用2.3的,漏洞太多。

写完了。你照着配一遍,能跑通就算入门了。跑不通也别急,八成是jar包冲突——把tomcat的lib目录和项目的lib目录对比一下,删掉重复的。我当年卡在这步卡了两天,最后发现是servlet-api.jar重复了。

顶: 26785踩: 7