Struts 是为了规范 MVC 开发而发布的一个框架。类似的框架还有WebWork、SpringMVC 等。Struts2虽然是在Struts1的基础上发展的,但是它以Webwork为核心。Struts2控制器分为核心控制器与业务控制器。Struts2的核心控制器是Filterdispatcher,业务器是Action。其中,核心控制器在Web应用中负责拦截所有的用户请求。Struts2框架提供了强大的标签库,通过这些标签,可以大大减少JSP页面的代码编写。而且,Struts2的标签库并不只是提供了表现层数据处理,还提供了基本的流程控制等功能。
要编写基于Struts框架的应用,需要导入一些支持的包,也就是Struts开发包。复制到Web应用的WEB-IBN/lib目录下。这几个包可以在Struts2官网下载。下载完后解压在它的lib目录下,五个必须的包名如下所示:
struts2-core.jBr
commons-logging.jar
xwork.jar
Freemarker.jar
ognl.jar
现在我们来创建第一个Struts2的例子,本例在myeclipse下编写。
首先配置Web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
<!-- 定义struts2的过滤器 -->
<filter><!-- 加载核心库的控制标签filtername -->
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- strust2过滤器生效的地址 -->
<filter-mapping>
<filter-name>struts2</filter-name><!-- 可以不必是Struts2但必需与上个相同 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file><!--定义欢迎页 -->
</welcome-file-list>
</web-app>
创建Action类:
package com.wjrong.test.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
@SuppressWarnings("serial")
public class Login2Action extends ActionSupport implements ModelDriven<Admin> {
private Admin admin;
private static final String CURRCNT_USER = "CURRCNT_USER";
public void validateExecute(){
if(admin.getName().equals("wjrong") && admin.getPassword().equals("123")){
Map<String,Object>session=ActionContext.getContext().getSession();
if(session.containsKey(CURRCNT_USER)){
session.remove(CURRCNT_USER);
}
session.put(CURRCNT_USER, admin.getName());
}else {
super.addActionError("用户名为空,或用户名密码不匹配。");
}
}
@Override
public String execute() throws Exception {
System.out.println(admin.getName()+"---------"+admin.getPassword());
System.out.println("Login---->成功!" );
return "SUCCESS";
}
@Override
public Admin getModel() {
if(admin == null) admin = new Admin();
return admin;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
定义Struts2的action配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="xhtml"></constant>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="mydefault"></default-action-ref>
<action name="login" class="com.wjrong.test.action.LoginAction">
<result name="SUCCESS" type="redirect">/success.jsp</result>
<result name="FAIL" type="redirect">/fail.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="*User" class="com.wjrong.test.action.UserAction" method="{1}">
<result name="login" type="redirect">/login.jsp</result>
<result name="register" type="dispatcher">/register.jsp</result>
<result name="input">/index.jsp</result>
</action>
<!-- 定义一个缺省Action -->
<action name="mydefault">
<result>/error.jsp</result>
</action>
</package>
</struts>