sun公司推出了jsp以后,同时也推出了两种web应用程序的开发模式,一种是jsp+javabean的开发模式,一种是jsp+servler+javabean模式。
jsp+javabean的开发模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,javabean用于封装业务数据,jsp即负责用户处理请求,又显示数据。
jsp+servler+javabean(MVC)设计模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。
jsp+servler+javabean(MVC)设计模式程序各个模块之间层次清晰,web开发推荐采用这种模式。
使用jsp+javabean编写一个计算器页面,javabean具有firstNum,secondNum,Result,Operater属性,并提供一个calculate方法。
package cn.it.domain;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double a = 0.1;
double b = 0.006;
System.out.println(a+b);
}
}
控制台:
0.10600000000000001
double类型的数据在进行相加时不能用于精确计算,在转换成二进制数据,因为位数的限制会出现数据省略的情况。
一般使用java.math.BigDecimal进行运算
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.006");
System.out.println(a.add(b).toString()); //+
System.out.println(a.multiply(b).toString()); //*
System.out.println(a.divide(b, 10, BigDecimal.ROUND_HALF_UP)); //\
System.out.println(a.subtract(b).toString()); //
控制台
0.106
0.0006
16.6666666667
0.094
好了,开始编写web计算器的案例:
封装数据的javabean:swtich()变量类型只能是int、short、char、byte和enum类型。
package cn.it.domain;
import java.math.BigDecimal;
//封装计算机数据的javabean
public class Calculator {
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 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 char getOperator() {
return operator;
}
public void setOperator(char operator) {
this.operator = operator;
}
public void calculate(){
BigDecimal a = new BigDecimal(this.firstNum);
BigDecimal b = new BigDecimal(this.secondNUm);
switch (this.operator) {
case '+':{
this.result=a.add(b).toString();
break;
}
case '-':{
this.result=a.subtract(b).toString();
break;
}
case '*':{
this.result=a.multiply(b).toString();
break;
}
case '/':{
if(b.doubleValue()==0){
throw new RuntimeException("被除数不能为0");
}
this.result=a.divide(b,20,BigDecimal.ROUND_HALF_UP).toString();
break;
}
default:
throw new RuntimeException("运算符只能是:+,-,*,/");
}
}
}
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'calculator.jsp' starting page</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body style="text-align: center">
<jsp:useBean id="caculatorBean" class="cn.it.domain.Calculator" ></jsp:useBean>
<jsp:setProperty property="*" name="caculatorBean"/>
<%
try{
caculatorBean.calculate();
}catch(Exception e){
out.write(e.getMessage());
}
%>
<br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</br>
计算结果是:
<jsp:getProperty property="firstNum" name="caculatorBean"/>
<jsp:getProperty property="operator" name="caculatorBean"/>
<jsp:getProperty property="secondNUm" name="caculatorBean"/>
=
<jsp:getProperty property="result" name="caculatorBean"/>
<br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</br>
<form action="/day12/calculator.jsp" method="get">
<table width="50%" border="1" style="margin:0 auto">
<tr>
<td colspan="2">简单web计算器</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>
通过访问jsp页面展示: