blad Tomcata nie obsluguje metody POST

0

witam
raczkuje dopeiro w tematyce JSP i serwletow ale wdrazajac przykladowa aplikacje natkanlem sie na blad i nie moge z niego wybrnac niestety. W przykladowej stronie ktora stowrzylem ( sciagalem z ksiazki) przy wywolaniu serwletu tomcat wyrzuca mi nast. blad:

HTTP Status 405 - HTTP method POST is not supported by this URL

type Status report

message HTTP method POST is not supported by this URL

description The specified HTTP method is not allowed for the requested resource (HTTP method POST is not supported by this URL).
Apache Tomcat/6.0.20

analizowalem kod DD kod strony i kod serwletu wiele razy i nic mi nie przycohdzi do glowy dlaczego to niedziala moze konieczna jest rekonfiguracja tomcata [???] Wrzuce kod aplikacji (pochodzi z ksiazki head first jsp/servlets)

desktyptor wdrozenia:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
	<servlet-name>R3 PIWO</servlet-name>
	<servlet-class>com.example.web.WyborPiwa</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>R3 PIWO</servlet-name>
	<url-pattern>/WybierzPiwo.do</url-pattern>
</servlet-mapping>
</web-app>

Kod HTML formularza:

<html>
<head>
<title>Strona Testowa</title>
</head>
<body>
<form method="POST" action="WybierzPiwo.do">
Wybierz wlasciwosci piwa <p>
Kolor:
<select name="kolor" size="1">
<option value="jasny">jasny</option>
<option value="bursztynowy">bursztynowy</option>
<option value="brazowy">brazowy</option>
<option value="ciemny">ciemny</option>
</select>
<br><br>
<center>
	<input type="SUBMIT">
</center>
</form>
</body>
</html>

Kod servletu:

package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class WyborPiwa extends HttpServlet
{
	
	public void doPost (HttpServletResponse response, HttpServletRequest request) throws IOException, ServletException 
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("Porada piwna<br>");
		String c = request.getParameter("kolor");
		out.println("<br>Wybrany kolor piwa: " + c);
	}
}
0

Mapowany url do servletu to /WybierzPiwo.do, natomiast action w formie html masz WybierzPiwo.do (bez pierwszego slasha) - moze sie zdarzyc ze twoj servlet nie jest znaleziony?

0

w tym momencie jestem w pracy , niemoge tego sprawdzic teraz...:/ ale na pewno to zrobie. Sprawdzilem w ksiazce i jest dokladnie tak jak napisalem wyzej :-(

0

Zaloze sie ze nie jest - masz zamienione kolejnoscia parametry - najpierw powinien byc request, pozniej response. Ty stworzyles nowa metode, ktora wcale nie jest wolana, a tomcat wola metode z HttpServlet ktora wlasnie rzuca taki oto wyjatek jak nie znajdzie przeciazonej metody. Jestem pewien bo tez czytalem Head First i nie mialem takich problemow ;d
Na przyszlosc uzywac adnotacji @Override na metodach ktore sa przeciazane. Gdybys to zrobil tutaj to bys od razu dostal komunikat od kompilatora ze jest blad.

0

dzieki pikseloza, faktycznie nie przeciazylem metody tylko stworzylem nowa. Mam nadzieje ze to rzeczywiscie rozwiaze ten problem. :-)

0

ok wszystko zadzialalo ale idac dalej trafilem na kolejny blad, ktory wystepuje tylko gdy cala aplikacje wdrazam na serwer Tomcat manualnie, tzn przy wywolaniu przez serwlet strony JSP dostaje od przegladarki nast blad:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:350)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.example.web.WyborPiwa.doPost(WyborPiwa.java:22)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.IllegalStateException: No output folder
	org.apache.jasper.JspCompilationContext.createOutputDir(JspCompilationContext.java:668)
	org.apache.jasper.JspCompilationContext.getOutputDir(JspCompilationContext.java:197)
	org.apache.jasper.JspCompilationContext.getClassFileName(JspCompilationContext.java:511)
	org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:429)
	org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:377)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:582)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.example.web.WyborPiwa.doPost(WyborPiwa.java:22)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.

Przy uruchamianiu w NetBeans 6.7 wszystko dziala jak nalezy. Mam prosbe jesli ktos by mogl mi podpowiedziec brak jakiefo folderu chodzi bo po bledzie wnioskuje ze " brak jakiegos folderu wyjsciowego"???

OK Juz wszystko Dziala pisze rozwiazanie problemu jakby ktos kiedys mial podobne klopoty.

Tomcat niemial mozliowsci zapisu pliku kompilacji strony JSP w swoim roboczym katalogu ./tomcat/work/Catalina/localhost/"nazwa_projektu" gdyz niewiem dlaczego ten folder byl zablokowany... Nadalem mu prawa do zapisu i wszystko dziala jak nalezy :-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1