Cześć. Napisałem prosty serwlet i skonfigurowałem intelliJ IDEA ale po deploy nadal nie odpowiada serwlet.
Od początku to szło tak:
#Utworzyłem nowy projekt mavenowy w IntelliJ IDEA Ultimate z archetypu maven-archetype-webapp.
#Dodałem zależność i plugin do poma (źródło pom.xml poniżej).
#Wszedłem w Run -> Edit Configuration i skonfigurowałem GlassFish'a (screeny z konfiguracji również poniżej).
#W folderze main projektu dodałem folder java ustawiając go w File -> Project Structure… -> Modules jako Sources.
#W folderze utworzyłem pakiet test a w nim klasę serwletu Servlet.java (źródło tej klasy poniżej).
#Klikam [Shift]+[F10] (Run), wszystko ładnie się buduje i następuje deploy i… no właśnie. W przeglądarce plik index.jsp się otwiera ale gdy chcę zobaczyć odpowiedź z serwletu to jedynie co widzę to status 404.
Co muszę jeszcze zrobić by to zadziałało i serwlet był widoczny?
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>servlet</groupId>
<artifactId>servlet</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
<build>
<finalName>servlet</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
klasa serwletu Servlet.java:
package test;
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.ws.rs.core.MediaType;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "Main Servlet", urlPatterns = {"/servlet"})
public class Servlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(MediaType.TEXT_PLAIN);
try(PrintWriter out = response.getWriter()) {
out.println("POST");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(MediaType.TEXT_PLAIN);
try(PrintWriter out = response.getWriter()) {
out.println("GET");
}
}
}
screeny z konfiguracji GlassFish i struktura katalogów:
Dodam, że cały projekt buduje się i następuje deploy nawet bez jednego ostrzeżenia. A co do adnotacji
@WebServlet(name = "Main Servlet", urlPatterns = {"/servlet"})
to nic to nie zmieni jeśli zamienię ją na o wiele prostrzą
@WebServlet("/servlet")
bez względu czy będzie tam /servlet
czy servlet
(sprawdziłem to, myślę, że tu chodzi o coś innego).