JSP extends WebTopServlet no Glassfish [RESOLVIDO]

3 respostas
daniel.joppi

Ola senhores,

Estou criando uma aplicação web no Glassfish e ocorreu um caso que seria interesante que meu JSP extendese um determinado Servlet. Implementei-os e testei no Tomcat, funcionou perfeitamente, mas essa semana que comecei a migrar a aplicação para o Glassfish este parou de funcionar e apresentou o seguinte erro.

HTTP Status 405 - HTTP method GET is not supported by this URL
O meu Servlet tem basicamente
@SuppressWarnings("serial")
public abstract class WebTopServlet extends HttpServlet {
	
	
	/*
	 * (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		super.doGet(req, res);
	}

	/*
	 * (non-Javadoc)
	 * @see javax.servlet.GenericServlet#destroy()
	 */
	@Override
	public void destroy() {
		super.destroy();
	}

	/*
	 * (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
	}

	protected void createMenuTree(AbstractMenu menu, JspWriter out) throws Exception {
		if (menu instanceof MenuTree) {
			out.println("<div id=\""+menu.getCode()+"\" class=\"menu\">");
			for(AbstractMenu m : ((MenuTree)menu).getMenus()) {
				createMenuNode(m, out);
			}
			out.println("</div/>");
			
			for(AbstractMenu m : ((MenuTree)menu).getMenus()) {
				createMenuTree(m, out);
			}
		}
	}
	
	protected void createMenuNode(AbstractMenu menu, JspWriter out) throws Exception {
		if (menu instanceof MenuTree) {
			out.println("<a id=\""+menu.getCode()+"\" class=\"{menu:'"+menu.getCode()+"', img: 'icon_14.png'}\"  >"+menu.getName()+"</a>");
		} else if (menu instanceof MenuNode) {
			out.println("<a href=\"#\" class=\"{img: 'ico_view.gif'}\" >"+menu.getName()+"</a>");
		} else if (menu instanceof MenuCustom) {
			MenuCustom mc = (MenuCustom) menu;
			if (mc.getStyleType() == MenuCustom.StyleType.SEPARATOR) {
				out.println("<a rel=\"separator\" > </a>");
			} else {
				out.println("<a rel=\"text\" >"+mc.getHtml()+"</a>");
			}
		}
	}
}

e o JSP

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page extends="com.engecorps.gaia.portal.WebTopServlet" %>
<%--@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"--%>
<%--@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"--%>

<%@page import="java.util.List"%>
<html>
	<head>
		<meta charset="utf-8">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta http-equiv="x-ua-compatible" content="ie=edge" />
	</head>
	<body>
   	<div id="ui-menubar" align="left">
		<table class="rootVoices" cellspacing='0' cellpadding='0' border='0'><tr>
<%
List<MenuBar> menusBar = ControllerEngine.load(MenuBar.class);
for(MenuBar menuBar : menusBar) {
	out.println("<td class=\"rootVoice {menu: '"+menuBar.getCode()+"'}\" >"+menuBar.getName()+"</td>");
}
		
		%>
		</tr></table>
	</div>
<%
for(MenuBar menuBar : menusBar) {
	createMenuTree(menuBar, out);
}
%>
  </div>
	</body>
</html>

Alguém tem uma idéia se no Glassfish eu preciso implementar ou estender outra classe?

3 Respostas

andreiribas

você não implementou o método doGet, então quando você faz uma requisição usando o método HTTP GET, o container vê que o método doGet não está implementado e te devolve isso.

daniel.joppi

Está implementado e com acesso public

daniel.joppi
Minha superclasse tinha que implementar javax.servlet.jsp.HttpJspPage ai em vez de estender javax.servlet.http.HttpServlet troquei por org.apache.jasper.runtime.HttpJspBase, pois o Glassfish possui essa biblioteca. A superclasse ficou assim:
import org.apache.jasper.runtime.HttpJspBase;

@SuppressWarnings("serial")
public abstract class WebTopServlet extends HttpJspBase {
	
	
	/*
	 * (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		super.doGet(req, res);
	}

	protected void createMenuTree(AbstractMenu menu, JspWriter out) throws Exception {
		if (menu instanceof MenuTree) {
			out.println("<div id=\""+menu.getCode()+"\" class=\"menu\">");
			for(AbstractMenu m : ((MenuTree)menu).getMenus()) {
				createMenuNode(m, out);
			}
			out.println("</div/>");
			
			for(AbstractMenu m : ((MenuTree)menu).getMenus()) {
				createMenuTree(m, out);
			}
		}
	}
	
	protected void createMenuNode(AbstractMenu menu, JspWriter out) throws Exception {
		if (menu instanceof MenuTree) {
			out.println("<a id=\""+menu.getCode()+"\" class=\"{menu:'"+menu.getCode()+"', img: 'icon_14.png'}\"  >"+menu.getName()+"</a>");
		} else if (menu instanceof MenuNode) {
			out.println("<a href=\"#\" class=\"{img: 'ico_view.gif'}\" >"+menu.getName()+"</a>");
		} else if (menu instanceof MenuCustom) {
			MenuCustom mc = (MenuCustom) menu;
			if (mc.getStyleType() == MenuCustom.StyleType.SEPARATOR) {
				out.println("<a rel=\"separator\" > </a>");
			} else {
				out.println("<a rel=\"text\" >"+mc.getHtml()+"</a>");
			}
		}
	}
}
Dependência do maven para quem quizer
<dependency>
			<groupId>tomcat</groupId>
			<artifactId>jasper-runtime</artifactId>
			<version>5.5.23</version>
			<scope>provided</scope>
		</dependency>
Criado 10 de agosto de 2011
Ultima resposta 10 de ago. de 2011
Respostas 3
Participantes 2