Servlet e Jsp[Resolvido]

Galera é o seguinte eu tenho uma página jsp que recebe dois parâmetros status e um código esses parâmentros são enviados pela url. Dessa mesma página jsp
tentei chamar um método java que realiza-se um processamento para atualização do status de um registro sendo que por algum motivo que eu desconheçõ ela
não faz nada. To postando meu código aqui para que vocês possam dar uma olhada e me orientar. Outra forma de fazer que eu pensei foi quando essa página
fosse chamada imediatamente ela chama-se um servlet que faria a mesma chamada para o processamento e pegaria os parâmentros pela url usando o método
doGet do servlet mas não estou sabendo como chamar esse servlet na inicialização dessa página jsp então gostaria de saber de alguém pode me ajudar com
uma dessas duas soluções.

Página jsp tentando chamar o processedimento direto sem o uso do servlet

[code]
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

<%@page import=“br.com.clickEnvie.servico.ServicoMensagem”%>

Insert title here

<%
String MsgId = request.getParameter(“cliMsgId”);
String status = request.getParameter(“status”);

String rota = "clickaTell";

ServicoMensagem sm = new ServicoMensagem();

sm.atualizarStatusMensagem(MsgId, status, rota);

%>

[/code]

Essa parte foi extraida do meu arquivo web.xml onde eu tenho um servlet que também realiza a mesma chamada feita na minha página jsp pelo seu método doGet


         <servlet>
		<description>
		</description>
		<display-name>ClickEnvieServletClickaTell</display-name>
		<servlet-name>ClickEnvieServletClickaTell</servlet-name>
		<servlet-class>br.com.clickEnvie.servlet.ClickEnvieServletClickaTell</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>ClickEnvieServletClickaTell</servlet-name>
		<url-pattern>/ClickEnvieServletClickaTell</url-pattern>
	</servlet-mapping>

agradeço a ajuda sei que é uma besteira mas pra quem tá começando parece um mundo.

Para que o servlet seja chamado depois de pegar os atributos e criar o objeto ServicoMensagem, é só atribuir o objeto ao request e criar um RequestDispatcher para mandar para o servlet.

Mais ou menos assim:


resquest.setAttribute("servico", sm );

RequestDispatcher rd = request.getRequestDispatcher("ClickEnvieServletClickaTell");

rd.foward(request, response);

Depois para pegar o objeto no servlet, seria:


ServicoMensagem sm = (ServicoMensagem ) request.getAttribute("servico");

A outra forma que você quer seria criar este método atualizaStatusMensagem como estático;

O que o método sm.atualizarStatusMensagem(MsgId, status, rota); faz ?

É que assim, se você deseja imprimir algo na jsp, este método deveria retornar código html e você poderia imprimí-lo com o comando ou.print(sm.atualizarStatusMensagem(MsgId, status, rota));

Não é recomendado este tipo de código na jsp. O mais correto é chamar o servlet, o servlet realizar a lógica, setar algo nos atributos e encaminhar para a pagina jsp. Na pagina jsp, você pegaria os atributos necessarios setados no servlet e imprimiria na jsp. Ou seja, deixar o jsp somente responsável pela view.

Para chamar diretamente o servlet, basta ir para o endereço dele: http://suaaplicacao:suaporta/seuservlet. A pagina nao chamaria o servlet e sim o servlet chamaria a página.

Espero ter ajudado.

Galera eu preciso chamar o servlet a partir do jsp porque essa página jps irá ficar disponível para outra aplicação executar e a mesma só aceita a página jsp e não o servlet direto
o problema é que quando executo essa página jsp não acontece nada na aplicação o método atualizarStatusMensagem o que ele faz é apenas atualizar o status de um registro se ele
foi mandado ou não no banco de dados ele não retorna nada para a página jsp nenhum retorno essa página serve apenas pra essa aplicação acessar o sistema e passar os parâmetros
via url e a minha aplicação atualiza o status.

jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="br.com.clickEnvie.servico.ServicoMensagem"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Capturando Retorno SMS ClickaTell</title>
</head>
<body>
<%RequestDispatcher rd = request.getRequestDispatcher("ClickEnvieServletClickaTell");%>
</body>
</html>

Minha classe servlet


public class ClickEnvieServletClickaTell extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ClickEnvieServletClickaTell() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		String MsgId = request.getParameter("cliMsgId");
		String status = request.getParameter("status");

		String rota = "clickaTell";

		ServicoMensagem sm = new ServicoMensagem();
		
		sm.atualizarStatusMensagem(MsgId, status, rota);

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

ainda não consegui fazer a aplicação rodar quando chamo a página jsp fica tudo na mesma ele abre a página mas não faz nada no banco pq a página não está chamando o servlet. Agradeço a ajuda mais uma vez se alguém puder me dizer como contorna isso.

Dá erro 404?
o valor do parametro passado no getRequestDispatcher() depende de como você configurou a servlet no server.xml

Galera resolvi o problema do servlet e jsp colocando no web.xml na tag servlet mapping o nomedomeujsp.jsp só isso resolveu agradeço a ajuda de todos.

desculpa, errei o nome do xml. O correto é web.xml. :slight_smile: