Как мне исправить ошибку индекса HTTP Status 500?

#java #xml #jsp #servlets #netbeans

#java #xml #jsp #сервлеты #netbeans

Вопрос:

Я создаю приложение, которое имеет два значения и возвращает множество различных ответов на функции (сложение, вычитание, деление, умножение и т. Д.). Это сделано с использованием JSP, и у меня есть индекс и ошибка JSP. Когда я пытаюсь запустить приложение с включенным error.jsp, оно всегда возвращает эту страницу, что бы я ни пытался, потому что в моем коде что-то не так, но я не понимаю, что. В приложении также есть раздел с простыми числами, в котором вы можете ввести число, нажав ok, и если число является простым, ничего не произойдет, но если это не так, вы получите сообщение об ошибке. Next prime и previous prime просто возвращают следующие и предыдущие простые числа из введенного вами числа.

index.jsp

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Home Page</title>
    </head>
    <body>
        <h1>Calculations using JSP pages</h1>
        <jsp:useBean id="math" scope="session" class="beans.MathBean" />
        <jsp:useBean id="primenumber" scope="session" class="beans.PrimeBean" />
        <jsp:setProperty name="math" property="*" />
        <jsp:setProperty name="primenumber" property="prime" />
        <form name="form1" method="post">
            <table>
                <tr>
                    <td>Number 1: </td>
                    <td><input type="text" name="numberA" value="${math.numbera}" style="width: 130px"</td>
                </tr>
                <tr>
                    <td>Number 2: </td>
                    <td><input type="text" name="numberB" value="${math.numberb}" style="width: 130px"</td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align: right"><input type="submit" value="OK"</td>
                </tr>
            </table>
        </form>
        <table>
            <tr>
                <td>Add</td><td>${math.add()}</td>
            </tr>
            <tr>
                <td>Subtract</td><td>${math.subtract()}</td>
            </tr>
            <tr>
                <td>Multiply</td><td>${math.multiply()}</td>
            </tr>
            <tr>
                <td>Divide</td><td>${math.divide()}</td>
            </tr>
        </table>
        <form name="form2" method="post">
            <input type="text" name="prime" value="${primenumber.prime}"/> amp;nbsp;amp;nbsp;
            <input type="submit" value="OK"/>
        </form>
        <p><a href="Primes?number=next">Next Prime</a>
        <p><a href="Primes?number=previous">Previous Prime</a>
    </body>
</html>
  

Error.jsp

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page isErrorPage="true"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Error page</title>
    </head>
    <body>
        <h1>Error!</h1>
        <p><a href="index.jsp">back 2 menu</a></p>
    </body>
</html>
  

web.xml файл просто используется по умолчанию с добавлением welcome-file-list, welcome-file с индексом.jsp в нем.

MathBean:

 package beans;
import java.io.Serializable;

public class MathBean implements Serializable{
    
    private long numbera, numberb;

    public MathBean(long numbera, long numberb) {
        this.numbera = numbera;
        this.numberb = numberb;
    }

    public long getNumbera() {
        return numbera;
    }

    public void setNumbera(long numbera) {
        this.numbera = numbera;
    }

    public long getNumberb() {
        return numberb;
    }
    public void setNumberb(long numberb) {
        this.numberb = numberb;
    }
    public long add() {
        return numbera   numberb;
    }
    public long subtract() {
        return numbera - numberb;
    }
    public long divide() {
        if (numberb == 0) {
            return 0;
        }
        return numbera / numberb; 
    }
    public long multiply() {
        return numbera * numberb;
    }
    
}
  

PrimeBean:

 
package beans;

public class PrimeBean {
    private static final long max = 9223372036854775783L;
    private long prime = 2;
    
    public PrimeBean() {
        
    }

    public long getPrime() {
        return prime;
    }

    public void setPrime(long p) throws Exception {
        if(!isPrime(p)) throw new Exception("Illegal number");
        prime = p;
    }
    private static boolean isPrime(long p) {
        if (p == 2 || p == 3 || p == 5 || p == 7) return true;
        if(p<11||p%2 == 0 ) return false;
        for(long t = 3, m = (long)Math.sqrt(p)   1; t <= m; t =2) if(p % t == 0) return false;
        return true;
    } 
   public boolean next() {
       if (prime < max) {
           if (prime == 2) prime = 3;
           else for(prime  = 2; !isPrime(prime); prime  = 2);
           return true;
       }
       return false;
   }
   public boolean previous() {
       if (prime > 2) {
           if(prime == 3) prime = 2;
           else for(prime -= 2; !isPrime(prime); prime -= 2);
           return true;
       }
       return false;
   }
    
}

  

PrimeServlet:

 
package servlets;

import beans.PrimeBean;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Primes", urlPatterns = {"/Primes"})
public class PrimeServlet extends HttpServlet {


    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException{
         PrimeBean bean = (PrimeBean) request.getSession().getAttribute("primenumber");
         String number = request.getParameter("number");
         if (number.equals("next")) bean.next(); else bean.previous();
         response.sendRedirect("index.jsp");
        }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the   sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
  

Извините за публикацию всего кода, но я действительно потерян и не понимаю, почему это не работает. Вся помощь приветствуется.

Спасибо!

Комментарии:

1. Есть ли трассировка стека исключений?

2. Вы можете получить обратную трассировку в веб-браузере или, возможно, в журнале сервера. Будет сложно отлаживать без обратной трассировки.

3. Вероятно, слишком много кода, чтобы определить проблему. Мой совет состоял бы в том, чтобы сузить проблему — либо запустить в debug и выполнить пошаговое выполнение, либо добавить немного протоколирования (в его простейшей форме, которая может быть просто частью System.out, например. «запуск метода умножения — numbera =» numbera «, numberb =» numberb и т. Д.

Ответ №1:

В реализации есть как минимум 2 проблемы:

  1. У компонентов должен быть общедоступный конструктор по умолчанию без аргументов:

     public MathBean() { ...
      

    У вас есть

     public MathBean(long numbera, long numberb) { ...
      
  2. Теги ввода HTML numberA numberB и submit on index.jsp не закрываются > .

Комментарии:

1. Устранение обеих этих проблем заставило все работать. Большое вам спасибо!