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 后显示: