dúvida struts 2

13 respostas
rodrigo.fai

Estou iniciando com struts 2 e estou com problemas...

quando faço a autenticação do usuário e sou redirecionado p/ a pagina home.jsp por exemplo é exibida a seguinte msm:

type Exception report

message

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

exception

javax.servlet.ServletException: Exception in JSP: /home.jsp:16

Dei uma analizada na pagina home.jsp e retirei o codigo jsp onde continha chamadas aos métodos do objeto "request"! Funcionou perfeitamente...

Ou seja, não sei c o problema está com o código jsp ou com o request!?!?!?!?

Estou esquecendo de alguma configuração do struts???

Obrigado.

13 Respostas

T

assim fica difícil… poste seu jsp e se struts.xml para a gente analisar…

rodrigo.fai

Sao bem simples!!!

home.jsp:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>TSDA - Tecnologia e Solu&ccedil;&otilde;es Digitais Aplicadas</title>
</head>
<body>

<h2>ZEUS Web-server<hr></h2>

<p>Welcome <%=request.getUserPrincipal().getName()%>!</p>

<p><a href="<%=request.getContextPath()%>">Voltar...</a></p>

<img id="logo" src="/zeus/recursos/figuras/logobranco.jpg" width="295" height="112" />

</body>
</html>

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
	<include file="struts-default.xml" />
	
	<package name="default" extends="struts-default">
	
		<action name="actionLogin!*" method="{1}" class="net.sytes.tsda.zeuswebserver.action.ActionLogin">
			<result name="invalid">/error_login.jsp</result>
			<result name="valid">/home.jsp</result>
		</action>
	
	</package>
	
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>ZeusTeste</display-name>
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>
W

Boa tarde

Normalmente quando você guarda informações de usuário logado você as usa em outras partes do sistema. Será que não seria interessante você guardar essas informações na sessão?

rodrigo.fai

claro… sessao eh uma boa opcao p/ quem guarda informações de usuarios logados!!!
Porem, como estou usando hibernate 3 e nao estou familiarizado ainda, não consegui fazer a autenticacao do usuario procurando na base de dados.

Vc teria algum exemplo demostrando como autenticar um usuario utilizando o hibernate? Ou saberia me informar uma fonte onde posso dar uma estudada?

Sei que o struts 2 tem um recurso bastante utilizado p/ este fim, que é o interceptor! Mas não consegui por em pratica ainda…

rodrigo.fai

consegui resolver o problema anterior!!! vlw galera!!!

Mas surgiu outro…

Estive debugando meu código e quando estancio uma determinada classe é exibida a msm de “Source not found”!

Será que o compilador não esta localizando o .class o classpath?

W

Isso está ocorrendo quando vc utiliza o step into no debug da sua IDE, certo? Quando você usa o step into a IDE tenta mostrar o código fonte de uma classe, que nesse caso você não possui (ou seja, tem apenas o jar dele). Para não passar por isso, utilize o Step Over nessa sua linha de código. Você também pode baixar os fontes caso seja necessário.

Quanto ao interceptor, vc já conseguiu ou ainda precisa de material?

rodrigo.fai

step into seria usando o F5 p/ debugar??? o step over eh qual??? F6?

Ainda nao consegui o material sobre interceptors nao. Se poder me indicar algum…

rodrigo.fai

com o step over ele me avisa que o arquivo xwork-2.0.1.jar nao esta atachado!!! ai eu tento atacha-lo e me avisa que o source atachado nao contem o source p/ o arquivo DefaultActionInvocation.class!!!

W

Cara, ignore essas mensagens. Isso só seria útil caso você quisesse ver o conteúdo de algum método do xwork. Para facilitar coloque apenas break points (F8). E quanto as teclas de atalho sim, F5 Step Into e F6 Step Over.

rodrigo.fai

mas eu estou usando somente break points!!! eh exibida esta msm de qualquer maneira, nao importa a forma de debugar!!!
eu gostaria de saber oq esta acontecendo com o codigo pq quando executo minha aplicação normalmente sem debugar, nao sou redirecionado p/ a pagina q devia!!! Aparece uma página de erro...

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)

sabe oq pode ser?

W

Cara… vamos voltar. Pensei q esse erro já estava ok e q agora estava dando erro ao debugar. Mande as alterações q vc fez então.

rodrigo.fai

realmente! o problema de antes(do começo do topico) ja foi resolvido retirando o codigo jsp da pagina home.jsp!!!

soh q surgiu este agora!!!!

creio que alguma configuração esta faltando fazer... lembre q estou usando struts 2 juntamente com hibernate 3.

Nao sei c copiei todos .jars necessários!??!?!

de uma olhada nas libs do meu classpath...

commons-logging-1.0.4.jar
ejb3-persistence.jar
firebirdsql-full.jar
freemarker-2.3.8.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-entitymanager.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar

vou postar tb o cod. da minha action e demais classes envolvidas:

LoginAction.class:

package net.sytes.tsda.zeuswebserver.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import net.sytes.tsda.zeuswebserver.bean.Usuario;
import net.sytes.tsda.zeuswebserver.dao.DaoFactory;
import net.sytes.tsda.zeuswebserver.logic.UsuarioLogic;

public class LoginAction extends ActionSupport
{
	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;

	private DaoFactory daoFactory;
	private UsuarioLogic usuarioLogic;
	private Usuario usuario;
	
	private Map<String, Object> session;
	
	@SuppressWarnings("unchecked")
	public String checkLogin()
	{
		if(this.isInvalid(this.username) || this.isInvalid(this.password))
			return "invalid";
		else
		{
			if(this.findUser())
			{
				this.session = ActionContext.getContext().getSession();
				this.session.put("Usuario", usuario);
				return "valid";
			}
			return "invalid";
		}
	}
	
	private boolean isInvalid(String value)
	{
		return(value == null || value.length() == 0);
	}
	
	private boolean findUser()
	{
		this.daoFactory = new DaoFactory();
		this.usuarioLogic = new UsuarioLogic(this.daoFactory);
		
		this.usuario = new Usuario();
		this.usuario.setUsername(this.username);
		this.usuario.setPassword(this.password);
		
		return this.usuarioLogic.procura(this.usuario);
	}
	
	public final String getUsername() 
	{
		return username;
	}
	
	public final void setUsername(String username) 
	{
		this.username = username;
	}
	
	public final String getPassword() 
	{
		return password;
	}
	
	public final void setPassword(String password) 
	{
		this.password = password;
	}
}

DaoFactory.class:

package net.sytes.tsda.zeuswebserver.dao;

import javax.persistence.RollbackException;

import net.sytes.tsda.zeuswebserver.bean.*;
import net.sytes.tsda.zeuswebserver.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DaoFactory
{
	private final Session session;
	private Transaction transaction;
	
	public DaoFactory()
	{
		this.session = HibernateUtil.getSession();
	}
	
	public void beginTransaction()
	{
		this.transaction = (Transaction) session.beginTransaction(); 
	}
	
	public void commit()
	{
		try 
		{
			this.transaction.commit();
		}
		catch (RollbackException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		this.transaction = null;
	}
	
	public boolean hasTransaction()
	{
		return this.transaction != null;
	}
	
	public void rollback()
	{
		try 
		{
			this.transaction.rollback();
		}
		catch (IllegalStateException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		this.transaction = null;
	}
	
	public void closeSession()
	{
		this.session.close();
	}
	
	public Dao<Usuario> getUsuarioDao()
	{
		return new Dao<Usuario>(this.session, Usuario.class);
	}
	
	public Dao<Abrigo> getAbrigoDao()
	{
		return new Dao<Abrigo>(this.session, Abrigo.class);
	}
	
	public Dao<Remota> getRemotaDao()
	{
		return new Dao<Remota>(this.session, Remota.class);
	}
	
	public Dao<LogSistema> getLogSistemaDao()
	{
		return new Dao<LogSistema>(this.session, LogSistema.class);
	}
	
	public Dao<UltimoAcesso> getUltimoAcesso()
	{
		return new Dao<UltimoAcesso>(this.session, UltimoAcesso.class);
	}
}

HibernateUtil.class:

package net.sytes.tsda.zeuswebserver.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil
{
	private static SessionFactory sessionFactory;
	
	static
	{
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure();
		sessionFactory = configuration.buildSessionFactory();
	}
	
	public static Session getSession()
	{
		return sessionFactory.openSession();
	}
}

Dao.class:

package net.sytes.tsda.zeuswebserver.dao;

import java.util.List;

import org.hibernate.Session;

public class Dao<E>
{
	private final Session session;
	private final Class<E> classe;
	
	public Dao(Session session, Class<E> classe)
	{
		this.session = session;
		this.classe = classe;
	}
	
	@SuppressWarnings("unchecked")
	public List<E> lista()
	{
		return this.session.createCriteria(this.classe).list();
	}
	
	@SuppressWarnings("unchecked")
	public E procura(long id)
	{
		return (E) this.session.load(this.classe, id);
	}
	
	@SuppressWarnings("unchecked")
	public E procura(String str)
	{
		return (E) this.session.load(this.classe, str);
	}
}

UsuarioLogic.class:

package net.sytes.tsda.zeuswebserver.logic;

import net.sytes.tsda.zeuswebserver.bean.Usuario;
import net.sytes.tsda.zeuswebserver.dao.DaoFactory;

public class UsuarioLogic 
{
	private final DaoFactory daoFactory;
	private Usuario usuario;
	
	public UsuarioLogic(DaoFactory daoFactory)
	{
		this.daoFactory = daoFactory;
	}
	
	public void lista()
	{
		this.daoFactory.beginTransaction();
		this.daoFactory.getUsuarioDao().lista();
		this.daoFactory.commit();
	}
	
	public boolean procura(Usuario usuario)
	{
		this.daoFactory.beginTransaction();
		this.usuario = this.daoFactory.getUsuarioDao().procura(usuario.getUsername());
		this.daoFactory.commit();
		
		if(this.usuario.getUsername().equals(usuario.getUsername()) && this.usuario.getPassword().equals(usuario.getPassword()))
			return true;
		
		return false;
	}
}
obs.: esta nova msm de erro eh exibida quando executo a linha 49 da LoginAction, quando instancio o classe DaoFactory...
rodrigo.fai

welington…

depois de vários testes, descobri q o erro acontece quando tento configurar o hibernate atravez da minha classe HibernateUtil.class.

É gerada uma exception do tipo “java.lang.NoClassDefFoundError” quando executo a linha 16 da classe:

HibernateUtil.class:

package net.sytes.tsda.zeuswebserver.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil
{
	private static SessionFactory sessionFactory;
	
 	static
	{
 		try
 		{
			Configuration configuration = new AnnotationConfiguration();
			configuration.configure();
			sessionFactory = configuration.buildSessionFactory();
 		}
 		catch(Exception e)
 		{
 			System.out.println(e);
 		}
	}

	public static Session getSession()
	{
		return sessionFactory.openSession();
	}
}

Me parece que o compilador não está achando a classe Configuration no classpath, mas adicionei os .jars do hibernate necessários. Eu acho…

ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-entitymanager.jar

sabe c está faltando algum?

Criado 19 de março de 2008
Ultima resposta 24 de mar. de 2008
Respostas 13
Participantes 3