基于Servlet+jsp的web计算器
这次老大为了让我们自己复习web中页面的跳转给不值得任务
天下代码一大抄,关键看你怎么抄
首先我想到的计算算法不是什么堆栈,是简单的(其实很复杂,但是我就只需要知道有这个东西,东西别人做好了...传说中的CV大法好?Emmm,当你知道有这么个算法但是不会自己写可是自己会用的时候,也就相当于...自己会了.....)
废话不多说一下是收集的正则工具类,支持括号运算
package pers.cal.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式实现的计算器带括号版本
* @author Administrator
*
*/
public class UtilArithmetic {
/**
* 计算可能含有括号的表达式
*
* @param s
* @return
*/
public static String calcu(String s) {
s = s.replaceAll(" +", "");// 消除空格,空格可以是一个或多个,找到就替换
// \\(为左括号 \\)右括号,表示在括号内没有其他括号,然后用括号括起来是一个子组e
Pattern pa = Pattern.compile("\\(([^\\(\\)]*)\\)");
while (true) {
Matcher ma = pa.matcher(s);
if (ma.find() == false)
break;
// 先计算括号内,然后消除括号
s = s.replace(ma.group(), calcuNoParen(ma.group(1)));
}
return calcuNoParen(s);
}
/**
* 计算没有括号的运算
*
* @param s2
* @return
*/
public static String calcuNoParen(String s2) {
if (s2.length() < 1)
return s2;
// 先把乘法消除
Pattern pat = Pattern.compile("([0-9]+)\\*([0-9]+)");//0-9一个或多个,乘法
while (true) {
Matcher mc = pat.matcher(s2);
if (mc.find() == false)
break;
int res = Integer.parseInt(mc.group(1)) * Integer.parseInt(mc.group(2));
// 计算出结果,并且消除括号,注意这里不能用replaceAll
s2 = s2.replace(mc.group(), res + "");
}
// 再从左到右消除所有加法和减法
pat = Pattern.compile("([0-9]+)([\\+\\-])([0-9]+)");// 0-9一个或多个,加法或者减法
while (true) {
Matcher mc = pat.matcher(s2);
if (mc.find() == false)
break;
int res = 0;
switch (mc.group(2)) {
case "+":
res = Integer.parseInt(mc.group(1)) + Integer.parseInt(mc.group(3));
break;
case "-":
res = Integer.parseInt(mc.group(1)) - Integer.parseInt(mc.group(3));
break;
}
// 计算出结果,并且消除括号,注意这里不能用replaceAl
s2 = s2.replace(mc.group(), res + "");
}
return s2;
}
}
调用的时候直接用calcu()
就好
然后是对应的前台jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>基于Servlet+jsp的Web计算器的项目</title>
<link href="./css/index.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var cleartext = false;//设置标识值
function getNum(num) {
//alert(num);
var result = document.getElementById("result");
if (cleartext) {
result.value = "";
//cleartext = false;
}
result.value += num;
}
function getResult() {
var result = document.getElementById("result");
//result.value=result.value+"="+eval(result.value);
//next is the str we need
result.value = result.value;
//this result.value is the str we need
//alert(result.value);
//cleartext = true;//计算结果后改变标识
}
</script>
</head>
<body>
<div class="calculator">
<span class="copyRight">金 聖 聰 ?</span>
<form action="calculator.do" method="post" name="From"
onclick="return getResult">
<div class="calculator-display">
<input type="text" name="result" id="result" size="33"
readonly=readonly value="${ count}" >
</div>
<div class="calculator-keys">
<button type="button" class="all-clear" value="all-clear"
onclick="document.getElementById('result').value=''">AC</button>
<button type="button" value="9" onclick="getNum('(')">(</button>
<button type="button" value="9" onclick="getNum(')')">)</button>
<button type="button" class="operator" value="+"
onclick="getNum('+')">+</button>
<button type="button" value="7" onclick="getNum(7)">7</button>
<button type="button" value="8" onclick="getNum(8)">8</button>
<button type="button" value="9" onclick="getNum(9)">9</button>
<button type="button" class="operator" value="-"
onclick="getNum('-')">-</button>
<button type="button" value="4" onclick="getNum(4)">4</button>
<button type="button" value="5" onclick="getNum(5)">5</button>
<button type="button" value="6" onclick="getNum(6)">6</button>
<button type="button" class="operator" value="*"
onclick="getNum('*')">×</button>
<button type="button" value="1" onclick="getNum(1)">1</button>
<button type="button" value="2" onclick="getNum(2)">2</button>
<button type="button" value="3" onclick="getNum(3)">3</button>
<button type="button" class="operator" value="/"
onclick="getNum('/')">÷</button>
<button type="button" value="0" onclick="getNum(0)">0</button>
<button type="button" class="decimal" value="."
onclick="getNum('.')">.</button>
<button class="equal-sign" value="=" onclick="getResult('.')">=</button>
</div>
</form>
</div>
</body>
</html>
他的css
html {
font-size: 62.5%;
box-sizing: border-box;
margin: 0;
padding: 0;
box-sizing: inherit
}
body {
width: 100vw;
min-height: 100vh;
background-color: #B0C4DE;
display: flex;
justify-content: center;
align-items: center;
}
.calculator {
background: #1d1e22;
padding:2.8rem .64rem .64rem;
color: white;
border-radius: .5rem;
box-shadow: 0 .3rem 3rem .1rem rgba(0,0,0,0.6);
position: relative;
min-width: 40rem;
}
.calculator-display {
font-size: 5rem;
height: 80px;
padding: 0 20px;
background-color: #1d1e22;
color: #fff;
display: flex;
align-items: center;
justify-content: flex-end;
}
#result{
color:white;
background-color:#003300;
width:100%;
height:50%;
font-size:33%;
text-align:right;
}
button {
height: 60px;
border-radius: 3px;
border: 1px solid #c4c4c4;
font-size: 2rem;
background-color: #fff;
}
.calculator-keys {
display: grid;
grid-gap: 2rem;
padding: 2rem 1.36rem;
background-color: #fff;
}
.equal-sign {
grid-row: 5 / span 1;
grid-column: 3 / 5;
height: 100%;
}
.copyRight{
text-align: center;
display:block;
color:black;
font-weight:bolder;
font-size: 33px;
}
长这个样子
用到了El表达式
相关jar包
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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Calculation</display-name>
<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>pers.cal.servlet.CalculationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/calculator.do</url-pattern>
</servlet-mapping>
</web-app>
对应的Servlet
package pers.cal.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import pers.cal.util.UtilArithmetic;
public class CalculationServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String result = req.getParameter("result");
// req.setAttribute("result", "admin");
String finalRes = result;
result = finalRes+UtilArithmetic.calcu(result);
HttpSession session = req.getSession();
session.setAttribute("count",result);
System.out.println(result);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
最后是结构
晚安。
做个好梦
おやすみ~
原文地址:https://www.cnblogs.com/jsccc520/p/10325489.html
时间: 2024-10-08 00:59:09