- Java EE轻量级解决方案:S2SH
- 邵峰晶编著
- 1513字
- 2020-08-28 21:38:25
2.2 基于Struts2的加法器
在本书第1章中,使用了自定义的MVC框架来实现加法器,现在通过实现一个基于Struts2的加法器,进一步了解Struts2的处理流程。
在Struts2框架下开发加法器的具体步骤如下。
01 配置Struts2应用环境。
02 创建add.jsp页面,接收用户输入数据。
03 创建业务逻辑类Calculator,实现数据的算术运算。
04 创建AddAction类,实现execute()方法。
05 在struts.xml中配置AddAction。
06 创建add_result.jsp页面,显示计算结果。
2.2.1 配置应用环境
为了让Web应用支持Struts2的功能,必须将Struts2框架的核心类库增加到Web应用中。Struts2的5个核心jar文件分别是:
commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar struts2-core-2.0.14.jar xwork-2.0.7.jar
注意 本书中Struts2的版本为2.0.14,Struts2的下载及安装参见实践1。
将Struts2框架的核心jar文件复制到Web应用的lib路径下,如图2-2所示。
图2-2 Web应用中增加Struts2支持
在Web应用中加入Struts2的核心类库后,还需要修改web.xml配置文件,在web.xml文件中配置Struts2的核心控制器FilterDispatcher。配置文件代码如下。
【描述2.D.1】web.xml
<filter> <!-- 配置Struts2框架的核心Filter --> <filter-name>struts2</filter-name> <!-- 配置Struts2核心Filter的实现类 --> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <!-- 匹配所有请求 --> <url-pattern>/*</url-pattern> </filter-mapping>
上述代码中配置了Struts2的核心过滤器,指明过滤器类是FilterDispatcher,过滤器URL模式是匹配所有请求。如此,该Web应用就具备了Struts2框架的功能支持。
2.2.2 创建输入视图
下述代码用于实现任务描述2.D.1,在WebContent目录中创建加法器的输入页面add.jsp,用于接收两个数值。
【描述2.D.1】add.jsp
<%@ page contentType="text/html; charset=GBK"%> <html> <head> <title>Struts2计算器</title> </head> <body bgcolor="#ffffc0"> <h1>Struts2计算器</h1> <form id="calcForm" method="post" action="add.action"> <table> <tbody> <tr> <td>第一个数</td> <td><input type="text" name="num1" /></td> </tr> <tr> <td>第二个数</td> <td><input type="text" name="num2" /></td> </tr> <tr> <td><input type="submit" value="加" /></td> </tr> </tbody> </table> </form> </body> </html>
上述代码中的表单与任务描述1.D.1中的add.jsp没有任何区别,表单依然提交给“add.action”进行处理。
2.2.3 实现业务逻辑类
下述代码用于实现任务描述2.D.1,在com.haiersoft.ch02.biz包中创建加法器的业务逻辑类Calculator,实现加减乘除运算。
【描述2.D.1】Calculator.java
public class Calculator { /** * 实现算术加法 */ public double add(double a, double b) { return a + b; } /** * 实现算术减法 */ public double subtract(double a, double b) { return a - b; } /** * 实现算术乘法 */ public double multiply(double a, double b) { return a * b; } /** * 实现算术除法 */ public double divide(double a, double b) { // 注意:此处未判断除数不能为零,即b!=0,页面输入的第二个数不可为0,否则报错 return a / b; } }
上述代码与任务描述1.D.1中的Calculator.java无任何区别。
2.2.4 创建业务控制器
下述代码用于实现任务描述2.D.1,在com.haiersoft.ch02.action包中创建用于实现加法器的业务控制器AddAction。
【描述2.D.1】AddAction.java
public class AddAction { private double num1; private double num2; public double getNum1() { return num1; } public void setNum1(double num1) { this.num1 = num1; } public double getNum2() { return num2; } public void setNum2(double num2) { this.num2 = num2; } /** * 调用业务逻辑方法,实现业务,控制流程转向 */ public String execute() { // 新建业务逻辑对象 Calculator biz = new Calculator(); // 调用业务逻辑方法,获得返回值 double result = biz.add(num1, num2); // 将计算结果存入Session中 ActionContext.getContext().getSession().put("result", result); return "cal"; } }
上述代码中定义了两个属性num1和num2,并提供相应的getter/setter方法。num1和num2与add.jsp页面中表单的元素名相对应,如此,当表单提交时,表单中用户输入的元素值会通过setter方法设置到相应的属性中。在execute()方法中,先实例化一个Calculator类的对象,再调用此对象的add()方法进行加法运算。将计算的结果值保存到Session中,代码如下。
ActionContext.getContext().getSession().put("result", result);
Struts2的Action可以通过ActionContext来访问Servlet API,有关ActionContext的详细介绍见后续章节。
2.2.5 配置业务控制器
创建完AddAction类后,需要在struts.xml中对AddAction进行配置。如图2-3所示,在类文件的根目录(即src目录)下创建一个struts.xml文件。
图2-3 struts.xml位置
下述代码用于实现任务描述2.D.1,在struts.xml中配置业务控制器。
【描述2.D.1】struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 指定Struts2处于开发阶段,可以进行调试 --> <constant name="struts.devMode" value="true" /> <!-- Struts2的Action都必须配置在package里 --> <package name="p2" extends="struts-default"> <!-- 定义一个add的Action,实现类为com.haiersoft.ch02.action.AddAction --> <action name="add" class="com.haiersoft.ch02.action.AddAction"> <!-- 配置execute()方法返回值所对应的页面 --> <result name="cal">/add_result.jsp</result> </action> </package> </struts>
上述代码配置了一个名为add的Action,并指明对应的Action类。在<result>元素中指明返回值为“cal”时对应的跳转页面是add_result.jsp。
2.2.6 创建结果视图
下述代码用于实现任务描述2.D.1,在WebContent目录中创建add_result.jsp页面,显示计算结果值。
【描述2.D.1】add_result.jsp
<%@ page contentType="text/html; charset=GBK" pageEncoding="GBK"%> <html> <head> <title>计算器</title> </head> <body bgcolor="#ffffc0"> <h1>算术计算器</h1> <table> <tbody> <tr> <td>第一个数</td> <td>${param.num1}</td> </tr> <tr> <td>第二个数</td> <td>${param.num2}</td> </tr> <tr> <td>结果</td> <td>${sessionScope.result}</td> </tr> </tbody> </table> <button onclick="history.go(-1);">返回</button> </body> </html>
上述代码与任务描述1.D.1中的add_result.jsp一样,用于显示计算结果,只是结果值是从session中提取的,而非request中。
2.2.7 运行
到目前为止,基于Struts2的加法器已经完成,运行结果如图2-4所示。
图2-4 Struts2加法器的运行结果
基于Struts2的加法器在原理上与自定义框架的加法器是一样的。相比自定义框架的加法器实现,基于Struts2的加法器在代码上简化了许多;而且当增加一个Action时,只需在Struts2的配置文件中进行简单配置即可,无须使用大量代码进行控制实现。另外Struts2框架还提供了许多功能,例如,异常处理、Struts2标签库等,这些功能使Struts2开发更加轻松和完善。
注意 Struts2 除了支持JSP作为视图资源之外,还可以使用其他视图技术如FreeMarker、Velocity等。