jstl标签实现网页版简易计算器(自定义jstl函数库)


jstl标签实现网页版简易计算器


页面效果:

在这里插入图片描述

## 要求
1.利用struct框架和自定义函数实现网页版计算器;
2.在jsp页面不能出现任何原生java代码;
3.通过标签直接调用方法;
4.计算器的加、减、乘、除…这些运算放在页面进行,而不是通过业务层前端控制器进行;

## 具体实现

  1. 写一个类:其中包括加、减、乘、除这些运算方法(由类调用,public static修饰)

  2. 需要一个标签描述文件(.tld文件),放在项目结构下的WEB-INF或者WEB-INF的任意子目录下;

  3. 提供一个表单,用于输入计算的值和选择运算符

  4. 写一个类继承Action,用于从表单bean中取得数据,以及告诉struts跳转到相应的jsp页面

  5. 提供相应的跳转页面,用自定义标签进行页面运算

  6. 配置相应的struts-config.xml文件

  7. 提供一个除0异常,跳转的jsp文件

代码

1.提供具体运算方法的类new_CalculatorFunction.java

	package com.cn.servlet;
	
	/***
	 * 提供具体操作的类
	 */
	public class new_CalculatorFunction {
		
		//实现+
		public static double add(double value1,double value2) {
			
			return value1+value2;
			
		}
		
		//实现-
		public static double sub(double value1,double value2) {
			
			return value1-value2;
			
		}
		//实现*
		public static double mul(double value1,double value2) {
			
			return value1*value2;
			
		}
		
		//实现/
		public static double mod(double value1,double value2) {
			
			return value1/value2;	
		}
	}

2.标签描述文件(myfunctions.tld)

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
    
  <description>functions library</description>
  <display-name>functions</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>sum</short-name>
  <uri>http://com.cn.cal/functions</uri>
  
  <function>
    <name>add</name>
    <function-class>com.cn.servlet.new_CalculatorFunction</function-class>
    <function-signature>double add(double,double)</function-signature>
  </function>
  
  <function>
    <name>sub</name>
    <function-class>com.cn.servlet.new_CalculatorFunction</function-class>
    <function-signature>double sub(double,double)</function-signature>
  </function>
  
  <function>
    <name>mul</name>
    <function-class>com.cn.servlet.new_CalculatorFunction</function-class>
    <function-signature>double mul(double,double)</function-signature>
  </function>
  
  <function>
    <name>mood</name>
    <function-class>com.cn.servlet.new_CalculatorFunction</function-class>
    <function-signature>double mod(double,double)</function-signature>
  </function>
  
</taglib>

3.提供一个表单,用于输入计算的值和选择运算符:calculatorForm.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>网页版简易计算器</title>
	<script language="javascript">
	//对文本框中未输入值做验证	
	function check1(){
		
		var num1=document.getElementByName("value1").value;
		var num2=document.getElementByName("value2").value;
		
		if(num1==""){
			
			alert("请输入第一个数字");
			document.getElementByName("value1").focus();
			return false;
		}
		
		if(num2==""){
			
			alert("请输入第二个数字");
			document.getElementByName("value2").focus();
			return false;
		}
		
		document.getElementByName("calForm").submit();
		
	}
	
	</script>

</head>
<body>
	<h1>简易计算器</h1>
	<form name="calForm" action="calculator2.do" method="post">
	<input type="text" name="value1">
	
	//将运算符做成下拉列表
	<select name="operChose">
		<option value="+" selected>+</option>
		<option value="-">-</option>
		<option value="*">×</option>
		<option value="/">÷</option>
	</select>
	
	<input type="text" name="value2">
	<input type="submit" value="="  onclick="check1()">

	</form>
</body>
</html>

4.写一个类继承Action,用于从表单bean中取得数据,以及告诉struts跳转到相应的jsp页面,进行运算:new_cal_strutsAction.java

package com.cn.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.cn.bean.calFormBean;

	/***
	 * 告诉框架应该如何跳转
	 */
	public class new_cal_strutsAction extends Action{

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		 calFormBean myForm= (calFormBean)form;
		
		double value1=myForm.getValue1();
		
		String operChose=myForm.getOperChose();
		double value2=myForm.getValue2();
		
		if("/".equals(operChose)&& value2==0) {
			
			myForm.setResult("Infinity");
			return mapping.findForward("Exception");
			
		}else {
			return mapping.findForward("caljstl");
		}
	}	
}

5.提供相应的跳转页面,用自定义标签进行页面运算:new_cal_jstl.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--  引入jstl标签核心库以及自定义函数库 -->
 <%@page import="com.cn.struts.new_cal_strutsAction"%>
  <%@page import="com.cn.servlet.new_CalculatorFunction"%>
 <%@page isELIgnored="false" %>
 <%@taglib prefix="sum" uri="http://com.cn.cal/functions"%>
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl标签实现网页计算器</title>
</head>
<body>

	<h1>网页版简易计算器</h1>
	<c:if test="${myForm.operChose=='+'}">
		${myForm.value1}${myForm.operChose}${myForm.value2}=${sum:add(myForm.value1,myForm.value2)}
		
	</c:if>
	<c:if test="${myForm.operChose=='-'}">
		${myForm.value1}${myForm.operChose}${myForm.value2}=${sum:sub(myForm.value1,myForm.value2)}
	</c:if>
	
	<c:if test="${myForm.operChose=='*'}">
	
		${myForm.value1}${myForm.operChose}${myForm.value2}=${sum:mul(myForm.value1,myForm.value2)}
	</c:if>
	
	<c:if test="${myForm.operChose=='/'}">
	
		${myForm.value1}${myForm.operChose}${myForm.value2}=${sum:mood(myForm.value1,myForm.value2)}
		
	</c:if>
	
	<br><br>
	<a href="calculatorForm.jsp">回到计算页面</a>

</body>
</html>

6.配置相应的struts-config.xml文件

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
<!-- ================================================ Form Bean Definitions -->
    <form-beans>
			<form-bean name="myForm" type="com.cn.bean.calFormBean"/>
    </form-beans>
<!-- =========================================== Action Mapping Definitions -->
    <action-mappings>
        	
             <!--2jstl标签实现的计算器 -->
           <action path="/calculator2"
        			type="com.cn.struts.new_cal_strutsAction"
        			name="myForm"
        			scope="request"
        			validate="true">
   		   <forward name="Exception" path="/cal_error.jsp"/>
   		   <forward name="caljstl" path="/new_cal_jstl.jsp"/>
           </action>
    </action-mappings>
   
</struts-config>

7.提供一个除0异常,跳转的jsp文件:cal_error.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算失败显示页面</title>
</head>
<body style="font-size:25px">

	<h2>输入不规范,计算失败</h2>
	${myForm.value1}${myForm.operChose}${myForm.value2}=${myForm.result}
	<br><a href="calculatorForm.jsp">回到计算界面</a>
</body>
</html>

总结
1.在myfunctions.tld中对<function-signature>中的方法返回值类型为基本数据类型,所以可以直接写double,传入的实参也用double,必须让该myfunctions.tld文件中的方法定义与new_CalculatorFunction.java中的方法定义一致。
2.new_CalculatorFunction.java该类中的所有用于计算的方法需要写成public static修饰,因为是由类调用的;
3.在new_cal_jstl.jsp页面中,需要注意EL表达式中不能出现空格,最重要的是一定要将自定义的函数库通过<%@taglib prefix=“自定义函数库的短名(根据tld文件写)” uri=“自定义函数库的uri(根据tld文件写)”%>

以上是我个人在写该程序时碰到的问题的总结,本文章仅供参考哦!

 <function>
    <name>myAdd</name>
    <function-class>com.cn.servlet.CalculatorFunction</function-class>
    <function-signature>java.lang.String Cal_add(java.lang.String ,java.lang.String )</function-signature>
  </function>

附:感谢您的阅读,希望对您能有所收获呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值