jstl标签实现网页版简易计算器
页面效果:
## 要求
1.利用struct框架和自定义函数实现网页版计算器;
2.在jsp页面不能出现任何原生java代码;
3.通过标签直接调用方法;
4.计算器的加、减、乘、除…这些运算放在页面进行,而不是通过业务层前端控制器进行;
## 具体实现
-
写一个类:其中包括加、减、乘、除这些运算方法(由类调用,public static修饰)
-
需要一个标签描述文件(.tld文件),放在项目结构下的WEB-INF或者WEB-INF的任意子目录下;
-
提供一个表单,用于输入计算的值和选择运算符
-
写一个类继承Action,用于从表单bean中取得数据,以及告诉struts跳转到相应的jsp页面
-
提供相应的跳转页面,用自定义标签进行页面运算
-
配置相应的struts-config.xml文件
-
提供一个除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>
附:感谢您的阅读,希望对您能有所收获呀!