struts2注解需要struts2 convention plugin,所以你必须要理解Scanning Methodology 和Naming Converter原理
strust2扫描特定的包名struts,strust2,action,actions
扫描怎么工作:
扫描特定的类,放在struts,strust2,action或者actions
扫描符合下面条件之一的:
实现 com.opensymphony.xwork2.Action的接口
继承 com.opensymphony.xwork2.ActionSupport 类
或以Action结尾的类(UserAction,LoginAction)
命名转换:
如:LoginAction.java
首先去除类尾部的Action,
其次转换类的第一个字母为小写
LoginAction.action改变为login.action
pom.xml
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.1.8</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.1.8</version> </dependency>创建LoginAction继承ActionSupport,ActionSupport默认返回success字符串
package com.dufeng.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="/WEB-INF/view/login.jsp")
public class LoginAction extends ActionSupport{
}
xml相等的形式:
<package name="user" namespace="/User" extends="struts-default"> <action name="Login"> <result>pages/login.jsp</result> </action> </package>重载execute()方法,指定特定的@Action和@Result注解
package com.dufeng.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="/WEB-INF/view/welcome_user.jsp")
})
public String execute() {
return SUCCESS;
}
}
xml相等:
<package name="user" namespace="/User" extends="struts-default"> <action name="Welcome" class="com.dufeng.action.WelcomeUserAction"> <result name="SUCCESS">pages/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 Hello World Annotation Example</h1>
<s:form action="Welcome">
<s:textfield name="username" label="Username"/>
<s:password name="password" label="Password"/>
<s:submit/>
</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 Hello World Annotation Example</h1>
<h4>Hello <s:property value="username"/></h4>
</body>
</html>
web.xml
<!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>