设计一个web应用,该web提供两个jsp页面,一个页面使得用户可以输入一元二次方程的系数;另一个页面可以显示一元二次方程的系数和根。web应用提供一个名字为handle的servlet对象,handle负责计算一元二次方程的根,然后将有关数据存储到javabean中;web应用提供的javabean负责刻画一元二次方程,提供简单的获取数据和修改数据的方法。注意要对输入的数据合法性进行判断
参考chitGPT教程:
首先,您需要创建一个 Java Web 项目,并创建一个名为 "Calculator" 的 Servlet。
在 doGet 方法中,编写 HTML 表单,包括两个文本框和四个按钮(加、减、乘、除),并将表单提交到 doPost 方法。
在 doPost 方法中,获取表单提交的参数,并将它们转换为浮点数。
根据用户选择的操作符,进行相应的计算操作,并将结果存储在变量中。
最后,将计算结果返回给用户,在 HTML 页面中显示出来。
下面是一个简单的代码示例:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Calculator extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Calculator</title></head>");
out.println("<body>");
out.println("<h1>Calculator</h1>");
out.println("<form method='post'>");
out.println("<input type='text' name='num1' /><br />");
out.println("<input type='text' name='num2' /><br />");
out.println("<input type='submit' name='add' value='+' />");
out.println("<input type='submit' name='subtract' value='-' />");
out.println("<input type='submit' name='multiply' value='*' />");
out.println("<input type='submit' name='divide' value='/' />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Calculator Result</title></head>");
out.println("<body>");
out.println("<h1>Calculator Result</h1>");
double num1 = Double.parseDouble(request.getParameter("num1"));
double num2 = Double.parseDouble(request.getParameter("num2"));
double result = 0;
if (request.getParameter("add") != null) {
result = num1 + num2;
out.println(num1 + " + " + num2 + " = " + result);
} else if (request.getParameter("subtract") != null) {
result = num1 - num2;
out.println(num1 + " - " + num2 + " = " + result);
} else if (request.getParameter("multiply") != null) {
result = num1 * num2;
out.println(num1 + " * " + num2 + " = " + result);
} else if (request.getParameter("divide") != null) {
result = num1 / num2;
out.println(num1 + " / " + num2 + " = " + result);
}
out.println("</body>");
out.println("</html>");
}
}
这个简易计算器实现了四种基本的计算操作,并可以在 HTML 页面中显示出计算结果。您可以根据需要对这个示例进行修改和扩展。
本题要求设计一个简易计算器,包括两个JSP页面和一个名为handle的Servlet对象,用于计算一元二次方程的根并将数据存储到JavaBean中。为了提高代码可读性和可维护性,本题使用MVC模式进行设计。具体方案如下:
JavaBean类名为Equation,包含以下变量和方法:
public class Equation {
private double a;
private double b;
private double c;
private double x1;
private double x2;
// Getters and Setters
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getC() {
return c;
}
public void setC(double c) {
this.c = c;
}
public double getX1() {
return x1;
}
public void setX1(double x1) {
this.x1 = x1;
}
public double getX2() {
return x2;
}
public void setX2(double x2) {
this.x2 = x2;
}
// Calculate the roots of the equation
public void calculateRoots() {
double delta = b * b - 4 * a * c;
if(delta < 0) {
x1 = Double.NaN;
x2 = Double.NaN;
}
else if(delta == 0) {
x1 = -b / (2 * a);
x2 = x1;
}
else {
x1 = (-b + Math.sqrt(delta)) / (2 * a);
x2 = (-b - Math.sqrt(delta)) / (2 * a);
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>input.jsp</title>
</head>
<body>
<h1>一元二次方程求根</h1>
<form action="handle" method="post">
<label>a:</label><input type="text" name="a"><br/>
<label>b:</label><input type="text" name="b"><br/>
<label>c:</label><input type="text" name="c"><br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
在input.jsp页面中,用户可以输入一元二次方程的系数a、b、c,并通过提交按钮将数据提交给handle Servlet进行处理。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>output.jsp</title>
</head>
<body>
<h1>一元二次方程求根结果</h1>
<p>a:${equation.a}</p>
<p>b:${equation.b}</p>
<p>c:${equation.c}</p>
<p>x1:${equation.x1}</p>
<p>x2:${equation.x2}</p>
<a href="input.jsp">返回输入页面</a>
</body>
</html>
在output.jsp页面中,展示了用户输入的一元二次方程的系数a、b、c以及计算得到的根x1、x2。同时,页面提供了一个返回按钮,链接到输入页面。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "handle", urlPatterns = "/handle")
public class HandleServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String aString = request.getParameter("a");
String bString = request.getParameter("b");
String cString = request.getParameter("c");
// Check if input is valid
if(aString == null || aString.trim().length() == 0 ||
bString == null || bString.trim().length() == 0 ||
cString == null || cString.trim().length() == 0) {
response.sendRedirect("input.jsp");
return;
}
try {
// Parse input and calculate roots
double a = Double.parseDouble(aString);
double b = Double.parseDouble(bString);
double c = Double.parseDouble(cString);
Equation equation = new Equation();
equation.setA(a);
equation.setB(b);
equation.setC(c);
equation.calculateRoots();
// Save data to session and redirect to result page
request.getSession().setAttribute("equation", equation);
response.sendRedirect("output.jsp");
} catch (NumberFormatException e) {
// If input is not a number, redirect to the input page
response.sendRedirect("input.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
在handle Servlet中,首先获取用户输入的系数a、b、c。然后判断输入是否合法,如果不合法则重定向到输入页面。如果输入合法,则将数据存储到JavaBean对象中,然后将该对象存储到session中,并重定向到结果展示页面output.jsp。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>HandleServlet</servlet-name>
<servlet-class>HandleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HandleServlet</servlet-name>
<url-pattern>/handle</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>input.jsp</welcome-file>
</welcome-file-list>
</web-app>
在浏览器中访问http://localhost:8080/Calculator/,页面会自动跳转到input.jsp页面。在该页面输入一元二次方程的系数,点击提交按钮,即可跳转到输出结果页面,展示方程系数和根。如果输入的数据不合法,会自动跳转到输入页面,需要重新输入。
参考链接: