• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda POST w formularzu HTML nie widzi zadeklarowanego serwletu.

Object Storage Arubacloud
0 głosów
101 wizyt
pytanie zadane 17 marca 2020 w Java przez Adam Domański Początkujący (370 p.)

Cześć,

w rzeczywistości jest to niewielki, ale irytujący problem. Tworzę appkę w JSP i Mavenie z podpięciem do bazy danych Oracle. Mój formularz ma dwa dane wejściowe: indexNo i passAcc, w których wpisuję numer indeksu i hasło studenta.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Wikamp | Student Login</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <ul class="navbar-nav">
        <li class="nav-item active">
            <a class="nav-link">Wikamp</a>
        </li>
    </ul>
</nav>
<section>
    <div class="wrapper fadeInDown">
        <div class="formContent">
            <div class="fadeIn first">
                <img src="photos/student__graduation__degree__hat__education-512.png" class="icon" alt="User Icon" />
            </div>
            <form action="StudentLogin" method="POST">
                <input type="text" name="indexNo" class="fadeIn fourth" required autofocus></br>
                <input type="password" name="passAcc" class="fadeIn fourth" required></br>
                <input type="submit" class="fadeIn fourth" value="Log In">
            </form>
        </div>
    </div>
</section>
</body>
</html>


Jednak projekt nie może nawet znaleźć serwletu, w którym metoda doPost powinna dokonać przekierowania na stronę. Serwlet nazywa się StudentLogin i poniżej znajduje się jego kod.
http://localhost:8090/Wikamp/StudentLogin - jest to link, który pojawia się po kliknięciu przycisku "Log In" w pliku .jsp, którego kod można znaleźć powyżej.

package com.wikamp.servlets;

import com.wikamp.dao.StudentDAO;
import com.wikamp.users.Student;

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;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet("/StudentLogin")
public class StudentLogin extends HttpServlet {
    private StudentDAO studentDAO;
    private Student student;

    private int indexNo;
    private String passwordAcc;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);

        try {
            studentDAO = new StudentDAO();

            indexNo = Integer.valueOf(request.getParameter("indexNo"));
            passwordAcc = request.getParameter("passAcc");

            student = studentDAO.getStudent(indexNo,passwordAcc);

            if (student!=null && (student.getNUMER_INDEKSU()>1000 && student.getPASSWORD_ACC()!=null)) {
                HttpSession httpSession = request.getSession();
                httpSession.setAttribute("indexNo",indexNo);
                response.sendRedirect("StudentDashboard?indexNo="+indexNo);
            }
            else {
                response.sendRedirect("None");
            }
        }
        catch (NullPointerException | SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


Obawiam się, że zrobiłem coś źle w strukturze projektu lub pliku pom.xml. Na wszelki wypadek udostępniam również następujący kod:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.wikamp</groupId>
<artifactId>Wikamp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>Wikamp Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
  </dependency>
</dependencies>

<repositories>
  <repository>
    <id>maven.oracle.com</id>
    <name>oracle-maven-repo</name>
    <url>https://maven.oracle.com</url>
    <layout>default</layout>
    <releases>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </releases>
  </repository>
</repositories>
<pluginRepositories>
  <pluginRepository>
    <id>maven.oracle.com</id>
    <name>oracle-maven-repo</name>
    <url>https://maven.oracle.com</url>
    <layout>default</layout>
    <releases>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </releases>
  </pluginRepository>
</pluginRepositories>

<build>
  <finalName>Wikamp</finalName>
  <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>3.1.0</version>
      </plugin>
      <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.2</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>
</project>

Dodam jeszcze, że mam na swoim laptopie dwa projekty JSP, i obydwa uruchamiam z pomoca Tomcata na porcie 8090.

Poproszę o pomoc, bo na tym drugim projekcie wszystko mi idealnie działa, w przeciwieństwie to tego przedstawionego powyżej.

1 odpowiedź

0 głosów
odpowiedź 18 marca 2020 przez mbabane Szeryf (79,280 p.)

Generalnie odradzam używanie serwletów do robienia jakiegoś większego projektu, bo się o nie zabijesz. Zobacz jak działają jak się ich używa w przykładach typu Hello World (oczywiście nie bronie ich używania w jakimś większym zakresie, ale nie jest to przyjemne) i je po prostu odstaw (doczytaj informacje na ich temat i to wszystko).

Dużo wygodniej zrobisz to w Spring'u lub Javie EE (aktualnie Jakarta EE).

Wracając do problemu z tematu, czemu używasz javy 7, a nie przynajmniej 8?

Jeśli używasz Java 7 to prawdopodobnie masz Apache Tomcat w wersji nie większej niż 8.5.x, a ta obsługuje servlety w wersji max 3.1. W pom.xml podajesz że chcesz mieć wersję servlet 4.0.1. Więc polecam upgrade javy na, w sumie, najlepiej na najnowszą czyli 13 lub 11 (11 jest Long term support, więc będzie najstabilniejsza i inne biblioteki będą prawdopodobnie z nią dobrze współgrały) lub do javy 8 i podnieść tomcata do wersji co najmniej 9. Tutaj masz spis kompatybilności Tomcat'ów z java itd:

http://tomcat.apache.org/whichversion.html

Lub jeśli musisz używać javy 7 to zrób downgrade servletów.

Podobne pytania

0 głosów
1 odpowiedź 141 wizyt
0 głosów
1 odpowiedź 170 wizyt
pytanie zadane 25 maja 2018 w Java przez 87kelthuzad Obywatel (1,270 p.)
0 głosów
2 odpowiedzi 350 wizyt
pytanie zadane 29 października 2019 w Java przez Piotrek1604 Użytkownik (560 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...