JSP 加法口算案例:使用 Servlet 实现

本案例使用 JSP 和 Servlet 实现一个简单的加法口算练习,用户需要根据页面显示的随机生成的两个数字进行计算,并提交答案。Servlet 负责生成随机数字、判断答案是否正确并显示结果。

项目结构

  • src/main/webapp
    • index.jsp:链接列表页
    • calculateByServlet.jsp:加法口算页
  • src/main/java/com
    • CalculateByServlet.java:Servlet 类文件

index.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>
    <h1>加法口算</h1>
    <ul>
        <li><a href='calculateByServlet.jsp'>使用Servlet实现</a></li>
    </ul>
</body>
</html>

calculateByServlet.jsp

<%@ page language='java' contentType='text/html; charset=UTF-8' pageEncoding='UTF-8'%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>加法口算</title>
</head>
<body>
    <h1>加法口算</h1>
    <form action='CalculateByServlet' method='post'>
        <p>
            <%= session.getAttribute('number1') %> + <%= session.getAttribute('number2') %> = 
            <input type='text' name='answer'>
        </p>
        <p>
            <input type='submit' value='提交'>
            <a href='CalculateByServlet?reset=true'>重新生成</a>
        </p>
    </form>
    <c:if test='${not empty requestScope.msg}'>
        <p>${requestScope.msg}</p>
    </c:if>
</body>
</html>

CalculateByServlet.java

package com;

import java.io.IOException;
import java.util.Random;

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 javax.servlet.http.HttpSession;

/**
 * Servlet implementation class CalculateByServlet
 */
@WebServlet('/CalculateByServlet')
public class CalculateByServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CalculateByServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String reset = request.getParameter('reset');
        if ('true'.equals(reset)) {
            randomNumberToSession(request.getSession());
        }
        request.getRequestDispatcher('/calculateByServlet.jsp').forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        Integer number1 = (Integer) session.getAttribute('number1');
        Integer number2 = (Integer) session.getAttribute('number2');
        String answer = request.getParameter('answer');
        if (number1 == null || number2 == null || answer == null) {
            randomNumberToSession(session);
        } else {
            try {
                Integer result = Integer.parseInt(answer);
                if (result.equals(number1 + number2)) {
                    randomNumberToSession(session);
                    request.setAttribute('msg', '口算结果正确,再接再厉!');
                } else {
                    request.setAttribute('msg', '口算结果错误,再试一次吧!');
                }
            } catch (NumberFormatException e) {
                request.setAttribute('msg', '请输入一个整数!');
            }
        }
        request.getRequestDispatcher('/calculateByServlet.jsp').forward(request, response);
    }

    private void randomNumberToSession(HttpSession session) {
        Random random = new Random();
        int number1 = random.nextInt(51);
        int number2 = random.nextInt(51);
        session.setAttribute('number1', number1);
        session.setAttribute('number2', number2);
    }
}

代码说明

  1. index.jsp:提供一个链接指向加法口算页面 calculateByServlet.jsp
  2. calculateByServlet.jsp
    • 使用 EL 表达式获取 session 中的随机数 number1number2 并显示在页面上。
    • 使用 <c:if> 标签判断 request 中是否存在消息 msg,并显示消息内容。
  3. CalculateByServlet.java
    • doGet() 方法处理重新生成随机数的请求,调用 randomNumberToSession() 方法并转发到 calculateByServlet.jsp 页面。
    • doPost() 方法处理用户提交答案的请求:
      • 获取 session 中的随机数和用户输入的答案。
      • 判断用户输入是否为空或 session 中是否存在随机数,如果是,则重新生成随机数。
      • 否则,将用户输入的答案转换为整数类型,并判断答案是否正确,将结果消息保存在 request 对象中,并转发到 calculateByServlet.jsp 页面。
    • randomNumberToSession() 方法用于生成两个 0~50 之间的随机整数并保存到 session 对象中。

运行程序

  1. 将项目部署到 Web 服务器。
  2. 访问 index.jsp 页面,点击链接进入 calculateByServlet.jsp 页面。
  3. 根据页面显示的随机数字进行计算,输入答案并提交。
  4. Servlet 会判断答案是否正确,并将结果消息显示在页面上。

总结

本案例展示了使用 JSP 和 Servlet 实现一个简单的加法口算练习的步骤,并使用了 session、EL 表达式等技术,可以帮助初学者更好地理解 JSP 和 Servlet 的应用。

JSP 加法口算案例:使用 Servlet 实现

原文地址: https://www.cveoy.top/t/topic/noT3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录