对于Struts2应用的开发者而言,Action才是应用的核心,开发者需要提供大量的Action类,并在struts.xml文件中配置Action.Action类里包含了对用户请求的处理,Action类也被称谓控制器。
1. 简单的Struts2应用
(1). 在web.xml文件中定义核心Filter来拦截请求。在服务启动时,web的容器将会自动去加载struts2的相关配置。
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 让Struts 2的核心Filter拦截所有请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
(2). 如果需要发POST方式提交请求,则定义包含表单数据的JSP页面。如果仅仅只是GET方法方式发送请求,则无须经过这一步。
(3). 定义处理用户请求的Action类。这个Action就是MVC设计中的C,也就是控制器,该控制器负责调用Model里的方法来处理请求。(这里的包是:com.owen.action)
public class LoginAction extends ActionSupport
{
// 定义封装请求参数的username和password成员变量
private String username;
private String password;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
// 定义处理用户请求的execute方法
public String execute() throws Exception
{
// 当username为crazyit.org,password为leegang时即登录成功
if (getUsername().equals("crazyit.org")
&& getPassword().equals("leegang") )
{
ActionContext.getContext().getSession()
.put("user" , getUsername());
return SUCCESS;
}
return ERROR;
}
}
(4). 配置Action.Action配置主要就是要执行哪个Action类,及对于返回的处理所对应的物理视图是哪个(即中JSP的页面)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 指定全局国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true" />
<!-- 所有的Action定义都应该放在package下 -->
<package name="crazyit" namespace="/" extends="struts-default">
<action name="login" class="com.owen.action.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
(5). 编写视图资源。