在IDEA中利用JSP+Servlet实现计算器(图文)
jiangwei_suc
编辑于 2024年09月17日 15:35
收录于文集
共5篇

在IDEA中创建Java Web项目(详细图文),参考上一个教程(地址:网页链接​)。

下面的重点在于利用JSP+Servlet开发一个基于Web的计算器。

1、创建一个新项目

2、创建一个计算器的页面calcu_servlet.jsp

页面不复杂,如下图所示。

详细代码:

<%--

Created by IntelliJ IDEA.

User: jiangwei

Date: 2024/9/8

Time: 16:27

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><% String path = request.getContextPath();%> <html> <head> <title>Servlet + JSP 实现计算器</title> </head> <body> <form method="post" action="<%=path%>/calculServlet"> <table > <tr width="50%" border="1px" style="font-size: 28px;" > <td colspan="2"> 软件工程概论 <br \> 2024~2025学年第1学期<br \> </td> </tr> <tr> <td colspan="2"><img src="images/bottom.jpg" height="60px"> </td> </tr> <tr> <td colspan="2" style="font-size: 25px; color: black">实验二(1):JSP+Servlet开发一个计算器</td> </tr> <tr> <td align="right" style="font-size: 20px; color: black">第一个参数:</td> <td align="left"> <input type="text" name="num1" id="num1" style="font-size: 20px; color: black"> </td> </tr> <tr> <td align="right" style="font-size: 20px; color: black">运算符选择:</td> <td align="left"> <select name="op" style="font-size: 20px; color: black"> <option value="+">+</option> <option value="-">-</option> <option value="*">*</option> <option value="/">/</option> </select> </td> </tr> <tr> <td align="right" style="font-size: 20px; color: black">第二个参数:</td> <td align="left"><input type="text" name="num2" id="num2" style="font-size: 20px; color: black"> </td> </tr> <tr> <td colspan="2"><button style="display: block; margin: 0 auto; font-size: 20px;" type="submit" name="calculate" >计 算</button></td> </tr> <tr></tr> <tr> <td colspan="2" height="100px" style="font-size: 25px"> ${result} </td> </tr> </table> </form> </body> </html>

为了确保更改的东西立即在页面上生效,确保以下2个地方做修改。

第1个如下图:

如果没有这么多选项,下一步执行完再回来设定。

第2个,切换到Deployment选项卡,按下图标识进行设置

应用并确定。

3、创建一个Servlet用于业务逻辑控制

package com.jiangwei;

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class CalculServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doGet(req, resp); int num1 = Integer.parseInt(req.getParameter("num1")); int num2 = Integer.parseInt(req.getParameter("num2")); String op = req.getParameter("op"); System.out.println(num1); System.out.println(num2); System.out.println(op); Calculator cal = new Calculator(); String result = cal.operate(op, num1, num2); System.out.println("运算结果:"+result); //业务逻辑跳转 req.setAttribute("result","结果:"+result); req.getRequestDispatcher("/calcu_servlet.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

4、修改web.xml配置

添加如下内容:

<servlet>

<servlet-name>calculServlet</servlet-name> <servlet-class>com.jiangwei.CalculServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>calculServlet</servlet-name> <url-pattern>/calculServlet</url-pattern> </servlet-mapping>

5、添加计算器类

package com.jiangwei;

public class Calculator { public String operate(String op,int num1,int num2){ String result =""; switch(op){ case "+": return String.valueOf(num1+num2); case "-": return String.valueOf(num1-num2); case "*": return String.valueOf(num1*num2); case "/": // 这里可以加一个判断分母是否为0的逻辑,避免除数为0的异常 if (num2 == 0) { return "错误:除数不能为0"; } return String.valueOf(num1/(float)num2); default: return "输入有误,请重新选择需要的运算"; } } }

6、测试

1、注意页面用post协议,地址栏不会出现参数

2、如果用get协议,则地址看会有参数显示

7、其它需要注意的事项

页面无法跳转的情况,解决办法就是把super这一行代码删掉

这一行代码简单理解就是:HTTPServlet的doPost方法的默认实现返回HTTP 405状态码。

父类HttpServlet的doGet或doPost方法覆盖了你重写的方法,而父类 HttpServlet的doGet或doPost方法的默认实现是返回状态代码为405的HTTP错误,表示对于指定资源的请求方法不被允许。

扩展:下一节利用“工厂模式”对此项目进行代码重构。