引入相关jar包之后进行如下配置:
1、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置前端控制器 -->
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2、系统会默认搜索struts.xml,因此action在该文件中配置
struts.xml文件配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 引入不同的xml文件 -->
<!-- 引入公共模块 -->
<include file="struts-common.xml"/>
<!-- 引入资费模块 -->
<include file="struts-cost.xml"/>
<!-- 引入登录模块 -->
<include file="struts-login.xml"/>
</struts>
sturts-common.xml:(定义公共请求部分,如拦截器)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 自定义包,用于封装通用的配置,仅仅是用于复用代码的 -->
<package name="netctoss" extends="json-default">
<!-- 注册拦截器 -->
<interceptors>
<!-- 登录检查拦截器 -->
<interceptor name="loginInter"
class="com.netctoss.interceptor.LoginInterceptor"/>
<!-- 登录检查拦截器栈 -->
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInter"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 覆盖默认拦截器的引用,相当于当前包下所有的Action都默认使用该拦截器 -->
<default-interceptor-ref name="loginStack"/>
<!-- 定义全局的Result,当前包下所有的Action都可以直接使用该Result,即相当于每个Action下都追加了该Result配置 -->
<global-results>
<result name="login" type="redirectAction">
<param name="namespace">/login</param>
<param name="actionName">toLogin</param>
</result>
<result name="error">
/WEB-INF/main/error.jsp
</result>
</global-results>
</package>
</struts>
struts-cost.xml:(业务部分action配置)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 资费模块配置,注意该package继承与netctoss包,这样就引入了拦截器和全局action -->
<package name="cost" namespace="/cost"
extends="netctoss">
<!-- 查询的Action method可以省略,当省略时Struts2会自动调用execute方法-->
<!--result不指定type时则为转发类型-->
<action name="findCost"
class="com.netctoss.action.cost.FindCostAction">
<param name="pageSize">4</param>
<result name="success">
/WEB-INF/cost/findCost.jsp
</result>
<result name="error">
/WEB-INF/cost/error.jsp
</result>
</action>
<!-- 删除Action -->
<action name="deleteCost"
class="com.netctoss.action.cost.DeleteCostAction">
<result name="success" type="redirectAction">
findCost
</result>
</action>
<!-- 跳转到新增页面,struts不指定类的时候则默认调用ActionSupport类execute方法返回success -->
<action name="toAddCost">
<result name="success">
/WEB-INF/cost/addCost.jsp
</result>
</action>
<!-- 新增保存Action -->
<action name="addCost"
class="com.netctoss.action.cost.AddCostAction">
<result name="success" type="redirectAction">
findCost
</result>
</action>
<!-- 校验资费名Action,result type为json类型,该处具体java代码见下-->
<action name="checkCostName"
class="com.netctoss.action.cost.CheckCostNameAction">
<result name="success" type="json">
<param name="root">info</param>
</result>
</action>
<!-- 打开修改页面 -->
<action name="toUpdateCost"
class="com.netctoss.action.cost.ToUpdateCostAction">
<result name="success">
/WEB-INF/cost/updateCost.jsp
</result>
</action>
<!-- 修改保存Action -->
<action name="updateCost"
class="com.netctoss.action.cost.UpdateCostAction">
<result name="success" type="redirectAction">
findCost
</result>
</action>
</package>
</struts>
上面result type为json时部分代码,定义为map类型,返回struts2自动转成了json类型:
private Map<String,Object> info =
new HashMap<String,Object>();
public String execute() {
ICostDAO dao = DAOFactory.getCostDAO();
try {
Cost cost = dao.findByName(name);
if(cost == null) {
//没查到,说明没重名,验证通过
info.put("pass", true);
info.put("message", "资费名有效.");
} else {
//查到了,说明重名了,验证失败
info.put("pass", false);
info.put("message", "资费名重复.");
}
} catch (DAOException e) {
e.printStackTrace();
//发生异常时,给予错误的提示
info.put("pass", false);
info.put("message", "系统异常,请联系系统管理员.");
}
return "success";
}
struts-login.xml:(登录action)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 登录模块的配置,该包继承与默认的包-->
<package name="login" namespace="/login"
extends="struts-default">
<!-- 跳转到登录页Action -->
<action name="toLogin">
<result name="success">
/WEB-INF/main/login.jsp
</result>
</action>
<!-- 登录验证Action -->
<action name="login"
class="com.netctoss.action.login.LoginAction">
<result name="success">
/WEB-INF/main/index.jsp
</result>
<result name="fail">
/WEB-INF/main/login.jsp
</result>
<result name="error">
/WEB-INF/main/error.jsp
</result>
</action>
<!-- 生成验证码Action -->
<action name="createImage"
class="com.netctoss.action.login.CreateImageAction">
<result name="success" type="stream">
<param name="inputName">
imageStream
</param>
</result>
</action>
</package>
</struts>