• 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.

0 głosów
233 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,240 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ź 271 wizyt
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 25 maja 2018 w Java przez 87kelthuzad Obywatel (1,270 p.)
0 głosów
2 odpowiedzi 844 wizyt
pytanie zadane 29 października 2019 w Java przez Piotrek1604 Użytkownik (560 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...