Sun公司推出JSP之后,有两种设计方法供选择,一个是JSP+JavaBean来实现一些比较简单的案例,另一个就是使用JSP+Servlet+Javabean来实现较为复杂的案例,但是对于现在流行的MVC设计模式而言,后者无可厚非是最好的,前者现在几乎已经不再使用,但是作为一个案例,还是写了一个最简单的Web版面的计算器。
主要的注意点有,精确计算一定要使用BigDecimal类来完成,否则会出现不精确的失误,然后由于是JSP+ JavaBean,所以请求的处理都是在JSP页面里面实现的,其实这个是非常不好的,因为JSP里面几乎不要写代码的,即使出现代码也要使用标签去除。
下面是代码,首先是作为封装数据的JavaBean
package com.bird.domain;
import java.math.BigDecimal;
/**
* @category 封装计算器数据的Bean
* @author Bird
*
*/
public class ClaculatorBean {
private String firstNum = "0";
private char operator = '+';
private String secondNum = "0";
private String result;
public String getFirstNum() {
return firstNum;
}
public void setFirstNum(String firstNum) {
this.firstNum = firstNum;
}
public char getOperator() {
return operator;
}
public void setOperator(char operator) {
this.operator = operator;
}
public String getSecondNum() {
return secondNum;
}
public void setSecondNum(String secondNum) {
this.secondNum = secondNum;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public void calculate(){
BigDecimal first = new BigDecimal(this.firstNum);
BigDecimal second = new BigDecimal(this.secondNum);
switch (this.operator) {
case '+':{
this.result = first.add(second).toString();
break;
}
case '-':{
this.result = first.subtract(second).toString();
break;
}
case '*':{
this.result = first.multiply(second).toString();
break;
}
case '/':{
if(second.doubleValue() == 0){
throw new RuntimeException("被除数不能为0");
}
this.result = first.divide(second,20,BigDecimal.ROUND_HALF_UP).toString();
break;
}
default:{
throw new RuntimeException("运算符只能为+ - * /");
}
}
}
}
第二个就是JSP界面
<%@page import="java.util.concurrent.ExecutionException"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>计算器</title>
</head>
<body style="text-align: center;">
<jsp:useBean id="claculatorBean" class="com.bird.domain.ClaculatorBean" scope="page"></jsp:useBean>
<jsp:setProperty name="claculatorBean" property="firstNum" param="firstNum"/>
<jsp:setProperty name="claculatorBean" property="operator" param="operator"/>
<jsp:setProperty name="claculatorBean" property="secondNum" param="secondNum"/>
<%
try{
claculatorBean.calculate();
}catch(Exception e){
out.write(e.getMessage());
}
%>
<br>--------------------------------------------------------------<br/>
计算结果为:
<jsp:getProperty name="claculatorBean" property="firstNum"/>
<jsp:getProperty name="claculatorBean" property="operator"/>
<jsp:getProperty name="claculatorBean" property="secondNum"/>
=
<jsp:getProperty name="claculatorBean" property="result"/>
<br>--------------------------------------------------------------<br/>
<form action="/Web/calculator.jsp" method="post">
<table width="40%" border="1">
<tr>
<td colspan="2">简单的计算器</td>
</tr>
<tr>
<td>第一个参数</td>
<td>
<input type="text" name="firstNum">
</td>
</tr>
<tr>
<td>操作符</td>
<td>
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
</td>
</tr>
<tr>
<td>第二个参数</td>
<td>
<input type="text" name="secondNum">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="计算">
</td>
</tr>
</table>
</form>
</body>
</html>
下面是运行效果图