web.xml
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filterdispatcher</filter-class> <init-param> <param-name>actionpackages</param-name> <param-value>com.h3.common</param-value> </init-param> </filter>
从测试(struts22.1.6和2.1.8版本),这是不正确的,不管你把在“param-value”还是 “struts.convention.action.packages“, 在struts 2会忽略它,并只扫描指定的文件夹命名:struts, struts2, action 或 actions 。
详细请查看这里struts 2 约定插件文件
例如 : loginaction.java
最终的项目结构

扩展actionsupport并创建了loginaction,什么也不做,actionsupport 默认返回 “success” 字符串,这将匹配 @result 并重定位到 “pages/login.jsp“.
注解版本
package com.h3.user.action;
import org.apache.struts2.convention.annotation.namespace;
import org.apache.struts2.convention.annotation.result;
import org.apache.struts2.convention.annotation.resultpath;
import com.opensymphony.xwork2.actionsupport;
@namespace("/user")
@resultpath(value="/")
@result(name="success",location="/login.jsp")
public class loginaction extends actionsupport{
}
xml 实现版本
<package name="user" namespace="/user" extends="struts-default"> <action name="login"> <result>/login.jsp</result> </action> </package>
重写execute()方法并指定 @action 和 @result 注解。
注解版本
package com.h3.user.action;
import org.apache.struts2.convention.annotation.action;
import org.apache.struts2.convention.annotation.namespace;
import org.apache.struts2.convention.annotation.result;
import org.apache.struts2.convention.annotation.resultpath;
import com.opensymphony.xwork2.actionsupport;
@namespace("/user")
@resultpath(value="/")
public class welcomeuseraction extends actionsupport{
private string username;
public string getusername() {
return username;
}
public void setusername(string username) {
this.username = username;
}
@action(value="welcome", results={
@result(name="success",location="welcome_user.jsp")
})
public string execute() {
return success;
}
}
xml 实现版本
<package name="user" namespace="/user" extends="struts-default"> <action name="welcome" class="com.h3.user.action.welcomeuseraction"> <result name="success">/welcome_user.jsp</result> </action> </package>
login.jsp
<%@ page contenttype="text/html; charset=utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head></head> <body> <h1>struts 2 注解示例</h1> <s:form action="welcome"> <s:textfield name="username" label="用户名" /> <s:password name="password" label="密码" /> <s:submit value="提交"/> </s:form> </body> </html>
welcome_user.jsp
<%@ page contenttype="text/html; charset=utf-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head></head> <body> <h1>struts 2 注解示例</h1> <h4>您好, <s:property value="username"/></h4> </body> </html>
只要创建一个典型的web.xml文件,并声明filterdispatcher过滤器标准。
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>struts 2 web application</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filterdispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
http://localhost:8080/struts2example/user/login.action

提交到 http://localhost:8080/struts2example/user/welcome.action 后显示:
