基于Servlet+jsp的web计算器

这次老大为了让我们自己复习web中页面的跳转给布置得任务

天下代码一大抄,关键看你怎么抄

首先我想到的计算算法不是什么堆栈,是简单的(其实很复杂,但是我就只需要知道有这个东西,东西别人做好了...传说中的CV大法好?Emmm,当你知道有这么个算法但是不会自己写可是自己会用的时候,也就相当于...自己会了.....)

废话不多说一下是收集的正则工具类,支持括号运算

package pers.cal.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class UtilArithmetic {
// public static void main(String[] args) {
// String src = "(3 + (5 - 2) * 10 / 2 * 3 + 15) * (8 - 4)";
// System.out.println(cal(src));
// }
public static String cal(String src) {
StringBuilder builder = new StringBuilder();
if (src.contains("(")) {
Pattern pattern = Pattern.compile("\\(([^()]+)\\)");
Matcher matcher = pattern.matcher(src);
int lastEnd = 0;
while (matcher.find()) { builder.append(src.substring(lastEnd, matcher.start()));
System.out.println(builder.toString());
builder.append(cal(matcher.group(1)));
lastEnd = matcher.end();
}
builder.append(src.substring(lastEnd));
} else {
Pattern pattern = Pattern.compile("([\\d.]+)\\s*([*/])\\s*([\\d.]+)");
builder.append(src);
Matcher matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "*":
result = f1 * f2;
break;
case "/":
result = f1 / f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
pattern = Pattern.compile("([\\d.]+)\\s*([+-])\\s*([\\d.]+)");
matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "+":
result = f1 + f2;
break;
case "-":
result = f1 - f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
return builder.toString();
}
System.out.println(builder);
return cal(builder.toString());
}
}

调用的时候直接用cal(String str)就好

然后是对应的前台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('*')">&times;</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('/')">&divide;</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.cal(result); HttpSession session = req.getSession();
session.setAttribute("count",result);
System.out.println(result);
req.getRequestDispatcher("index.jsp").forward(req, resp);
} }

最后是结构

晚安。

做个好梦

おやすみ~

基于Servlet+jsp的web计算器的更多相关文章

  1. 基于servlet实现一个web框架

    servlet作为一个web规范.其本身就算做一个web开发框架,可是其web action (响应某个URI的实现)的实现都是基于类的,不是非常方便,而且3.0之前的版本号还必须通过web.xml配 ...

  2. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  3. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  4. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  5. javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  6. JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  7. [ Servlet / JSP ] J2EE Web Application 中的 JSESSIONID 是什么?

    JSESSIONID is a cookie in J2EE web application which is used in session tracking. Since HTTP is a st ...

  8. 《Head First Servlet JSP》web服务器,容器,servlet的职责

    (一)web服务器,容器,servlet的职责 (二)J2EE服务器与web容器

  9. Servlet & JSP - Java Web 访问资源的路径问题

    假设 Web 工程的目录结构如下图所示,并且 HelloServlet 配置为 @WebServlet(name = "helloServlet", urlPatterns = { ...

随机推荐

  1. 5月2日——iOS11定位失效问题

    所存在的问题: (1)定位不能正常使用 (2)首次安装APP 时 "是否允许使用定位信息"  系统提示框不显示 iOS定位失效原因: 因为苹果现在增加了一项新的隐私保护功能 NSL ...

  2. 0513JS数组遍历、内置方法、训练

    一.定义一个数组把其中的偶数取出,组成一个新的数组 var attr = [9,34,80,27,56]; var attr1 = []; for(var i in attr){ if(attr[i] ...

  3. Python_json

    import json ''' Python内置了json包来帮助我们完成对json的操作. 将Python的字典结构导出到json使用json.dumps(),将json读成Python的字典结构, ...

  4. String的trim()用于去掉字符串前后的空格

    String的trim()可以去掉字符串的前导和后继字符串,即去掉字符串前面和后面的空格. eg:String userName = " good man "; System.ou ...

  5. Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份

    xtrabackup-2.4.8的安装及使用 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备 ...

  6. PAT1102: Invert a Binary Tree

    1102. Invert a Binary Tree (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例

    本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1.  摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...

  8. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  9. React Native系列(6) - 编译安卓私有React-Native代码

    为何要自己编译React Native安卓私有代码 我们在开发中遇到一个HTTP2的问题,React Native安卓客户端在和HTTP2支持的服务器通讯的过程中会有crash,见 React-Nat ...

  10. mysql用户链接数

    show status like 'Threads_connected';  当前连接数 show variables like '%max_connections%'; 最大链接数 set GLOB ...