Avatar billede mergelspir Seniormester
29. juni 2023 - 15:39 Der er 13 kommentarer

Hvordan læser jeg 404 message

Når Tomcat opdager en err 404 fejl, så skriver den noget i stil med:
Type Status Report
Message /ServletTutoriel/
Description The origin bla bla...

Jeg har i web.xml erstattet den besked med en flot "err404.jsp" side.
MEN, hvordan kan jeg få at vide, hvad der gav anledning til at siden blev kaldt?
Jeg vil meget gerne fx kunne logge ovenstående Message: "/ServletTutorial/", så jeg har mulighed for at finde og rette fejlen.

Spørgsmål:
Hvordan læser jeg 404 message "/ServletTutoriel/" fra min "err404.jsp" side?

På forhånd tak
Avatar billede claes57 Ekspert
29. juni 2023 - 16:22 #1
Avatar billede arne_v Ekspert
29. juni 2023 - 16:28 #2
Prøv med den her som err404.jsp:


<%@ page import="java.util.*" %>
<h1>Page not found</h1>
<h2>Info:</h2>
<p>
jakarta.servlet.forward.request_uri = <%=request.getAttribute("jakarta.servlet.forward.request_uri")%>
</p>
<p>
jakarta.servlet.forward.context_path = <%=request.getAttribute("jakarta.servlet.forward.context_path")%>
</p>
<p>
jakarta.servlet.forward.servlet_path = <%=request.getAttribute("jakarta.servlet.forward.servlet_path")%>
</p>
<p>
jakarta.servlet.error.message = <%=request.getAttribute("jakarta.servlet.error.message")%>
</p>
<p>
jakarta.servlet.error.request_uri = <%=request.getAttribute("jakarta.servlet.error.request_uri")%>
</p>
<p>
jakarta.servlet.error.status_code = <%=request.getAttribute("jakarta.servlet.error.status_code")%>
</p>


Så kan du se hvad du kan fiske ud.
Avatar billede arne_v Ekspert
29. juni 2023 - 16:30 #3
<%@ page import="java.util.*" %>

er ikke nødvendig - jeg havde brug for Enumeration<String> da jeg itererede over request.getAttributeNames() for at finde ud af hvilke attributter der er.
Avatar billede arne_v Ekspert
29. juni 2023 - 16:32 #4
De attributter er ikke særligt veldokumenterede.

Men jeg fandt:

https://www.logicbig.com/tutorials/java-ee-tutorial/java-servlet/error-handling.html

Jeg tror at jeg vil tilføje noget til min servlet/JSP side.
Avatar billede mergelspir Seniormester
29. juni 2023 - 17:27 #5
ad #1)
Tak fordi du tog dig til til at svare, men dit link viser, hvordan jeg kan kaste en exception, der kalder min "err404.jsp".
Jeg har brug for det modsatte. Jeg vil gerne vide, hvorfor min "err404.jsp" blev kaldt.
Avatar billede mergelspir Seniormester
29. juni 2023 - 17:31 #6
ad #2)
Godt bud, men alle returnerer NULL.

Jeg har prøvet med:
request.getRequestURI()
men den returnerer blot "/err404.jsp", og det kan jeg jo ikke bruge til så meget.

Jeg glemte at fortælle, at jeg benytter Cloudflare som frontend. Måske det kaster grus i maskineriet.
Avatar billede arne_v Ekspert
29. juni 2023 - 17:48 #7
Mystisk.

Jeg tested med Tomcat 10 og med http://localhost:8080/test/fubar fik jeg:

Page not found
Info:

jakarta.servlet.forward.request_uri = /test/fubar

jakarta.servlet.forward.context_path = /test

jakarta.servlet.forward.servlet_path = /fubar

jakarta.servlet.error.message = The requested resource [/test/fubar] is not available

jakarta.servlet.error.request_uri = /test/fubar

jakarta.servlet.error.status_code = 404
Avatar billede arne_v Ekspert
29. juni 2023 - 17:49 #8
Hvilken version af Tomcat og hvilken servlet version i web.xml?
Avatar billede mergelspir Seniormester
29. juni 2023 - 19:13 #9
ad #7)
Jeg har nu også prøvet at liste de request.getAttributeNames() der måtte være, men jeg kan kun se de AttributeNames, som jeg selv har oprettet.
Avatar billede mergelspir Seniormester
29. juni 2023 - 19:15 #10
ad #8)
Tomcat Version: Apache Tomcat/8.0.48
Servlet Specification Version: 3.1
JSP version: 2.3
Avatar billede arne_v Ekspert
29. juni 2023 - 19:33 #11
Med 8.0.48 får jeg også kun null.
Avatar billede arne_v Ekspert
29. juni 2023 - 19:39 #12
Det ser ud som om det er en ny feature i servlet 5.0.

:-(
Avatar billede arne_v Ekspert
30. juni 2023 - 13:32 #13
Og lige netop den kode er specielt vanskelig.

For de fleste koder vil flowet være:
* servlet container modtager request
* servlet container kalder web app
* web app returnerer fejl kode eller exception
* servlet container enten returnerer fejl kode modtaget eller konstrurerer en fejl kode udfra exception

Og her vil man kunne putte et servlet filter ind mellem servlet container og web app.

Men 404 er:
* servlet container modtager request
* servlet container kan ikke kalde web app og returnerer en fejl kode

Så jeg tror ikke at man kan bruge et servlet filter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester