要求:使用Struts2框架开发一个简单的应用,该应用为一个计算器,能进行加、减、乘、除操作,并能对输入的数据进行判断,当用户输入非数字信息时,显示出错提示。
编程步骤:
一、导入需要的struts包
1、struts2-core-2.3.24.1.jar ——struts2的核心jar包
2、commons-fileupload-1.3.1.jar——commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件
3、commons-io-2.2.jar——commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的
4、commons-lang3-3.2.jar——commons项目中的lang包
5、commons-logging-1.1.3.jar——日志记录
6、freemarker-2.3.22.jar——支持freemarker(struts2的UI标签的模板使用FreeMarker编写)的,在webwork中也有
7、javassist-3.11.0.GA.jar——一个开源的分析、编辑和创建Java字节码的类库(hibernate中也需要,引入其中一个即可)
8、ognl-3.0.6.jar——支持ognl语言(对象图导航语言(Object Graph Navigation Language))的,struts2框架通过其读写对象的属性,webwork也支持ognl语言
9、xwork-core-2.3.24.1.jar——xwork的核心jar包,由于struts2是webwork的升级版本,所以必定对其有所依赖(struts2在其基础上构建)
二、JSP页面
1、输入页面index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>计算器</title>
</head>
<body bgcolor="#FFFFCC">
<h1>算数计算器</h1>
<%@taglib uri="/struts-tags" prefix="s"%>
<s:form action="Calculate" theme="simple">
第一个数:<s:textfield name="num1"></s:textfield>
<font color="red">
<s:property value="errors['num1'][0]" />
</font><br>
第二个数:<s:textfield name="num2"></s:textfield>
<font color="red">
<s:property value="errors['num2'][0]" />
</font><br>
<s:submit value="加" name="operation"></s:submit>
<s:submit value="减" name="operation"></s:submit>
<s:submit value="乘" name="operation"></s:submit>
<s:submit value="除" name="operation"></s:submit>
</s:form>
</body>
</html>
2、计算结果显示页面result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>计算结果</title>
</head>
<body bgcolor="#FFFFCC">
<h1>算数计算器</h1>
<%@taglib uri="/struts-tags" prefix="s"%>
操作:<s:property value="operation"/><br>
第一个数:<s:property value="num1"/><br>
第二个数:<s:property value="num2"/><br>
结果:<s:property value="result"/><br>
<a href="index.jsp"><input type="button" value="返回" οnclick="javascript:history.back();"></a>
</body>
</html>
三、service类(判断输入的是不是数字)
CalculateService.java
package com.service;
public class CalculateService {
public static boolean isNumeric(String str){
for (int i = str.length();--i>=0;){
if (!Character.isDigit(str.charAt(i))) {
return false; }
}
return true;
}
}
四、action类
CalculateAction.java
package com.action;
import com.opensymphony.xwork2.ActionSupport;
import com.service.CalculateService;
public class CalculateAction extends ActionSupport {
private String num1;
private String num2;
private String operation;
private double result;
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
CalculateService cs=new CalculateService();
@Override
public void validate(){
boolean flag1,flag2;
flag1=cs.isNumeric(num1);
flag2=cs.isNumeric(num2);
if(flag1==false||num1==null||num1.equals("")){
this.addFieldError("num1", "只能输入数字。");
}
if(flag2==false||num2==null||num2.equals("")){
this.addFieldError("num2", "只能输入数字。");
}
}
public String execute(){
double num3=0;
double num4=0;
try{
num3=Double.parseDouble(num1);
num4=Double.parseDouble(num2);
}catch(Exception e){
this.addActionError("只能输入数字。");
e.printStackTrace();
return "fail";
}
if(operation.equals("加")){
result=num3+num4;
}else if(operation.equals("减")){
result=num3-num4;
}else if(operation.equals("乘")){
result=num3*num4;
}else if(operation.equals("除")){
if(num4==0){
this.addFieldError("num2", "除数不能为零!");
return "fail";
}else{
result=num3/num4;
}
}
return "success";
}
}
五、配置文件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>
<package name="SimpleCalculator" extends="struts-default">
<action name="Calculate" class="com.action.CalculateAction">
<result name="success">/result.jsp</result>
<result name="fail">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
六、过滤器配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SimpleCalculator</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- FilterDispatcher配置 -->
<filter>
<filter-name>FilterDispatcher</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDispatcher</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
工程目录:
运行页面显示: