[hibernate+jsp] dodanie rekordu do bazy z JSP

0

w tym temacie robiłem dodanie z klasy: http://4programmers.net/Forum/559917#id559917

teraz próbuje z poziomu JSP zrobić to samo, na Tomcat 5.5, ale wali mi błąd, że nie może znaleźć klasy testbaza: org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 14 in the jsp file: /index.jsp
testbaza cannot be resolved to a type
11: Session session1 = factory.openSession();
12: session1.beginTransaction();
13:
14: testbaza baza = new testbaza("ania");
15: session1.save(baza);
16: session1.getTransaction().commit();
17: session1.close();

wklejam kody, pomóżcie please

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "testbaza")
public class testbaza {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	@Basic(optional = false)
	@Column(name = "name", unique = false, nullable = false)
	private String name;
	
	public testbaza (String name){
		this.name = name;
	}
	public testbaza(){
		
	}
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="org.hibernate.*,org.hibernate.cfg.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<TITLE>test hibernate</TITLE>
</HEAD>
<BODY>
<%
SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session1 = factory.openSession();
		session1.beginTransaction();
		
		testbaza baza = new testbaza("ania");
		session1.save(baza);
		session1.getTransaction().commit();
		session1.close();
		%>
</BODY>
</html>
0

Umiesc klase testbaza w jakims pakiecie i dodaj import do listy importow w pliku jsp.
Umieszczenie w pakiecie jest potrzebne, poniewaz tomcat genruje plik javy i bedzie mial tam linkjke:
testbaza baza = new testbaza("ania");
jako ze nie ma importu dla tej klasy (i nie moze byc poniewaz ta klaa nie znajduje sie w zadnym pakiecie), to kompilator kompilujacy ta klase bedzie probowal znalezc ja a tym samym pakiecie co klasa ktora ma ta linijke (w tym przypadli klasa wygenerowana przez silnik jsp tomcata, a wiec w pakiecie mniej wiecej takim: org.apache.jsp). Oczywiscie nie ma w tym pakiecie takiej klasy, stad blad.
Teraz jak dodasz klase do pakiety, i dodasz import, to kompilator bedzie wiedzial gdzie szukac klasy testbaza, i problem zniknie. To jedna z pulapek pisania bez podzialu na pakiety.
Pozdro.

0
pikseloza napisał(a)

Umiesc klase testbaza w jakims pakiecie i dodaj import do listy importow w pliku jsp.
Umieszczenie w pakiecie jest potrzebne, poniewaz tomcat genruje plik javy i bedzie mial tam linkjke:
testbaza baza = new testbaza("ania");
jako ze nie ma importu dla tej klasy (i nie moze byc poniewaz ta klaa nie znajduje sie w zadnym pakiecie), to kompilator kompilujacy ta klase bedzie probowal znalezc ja a tym samym pakiecie co klasa ktora ma ta linijke (w tym przypadli klasa wygenerowana przez silnik jsp tomcata, a wiec w pakiecie mniej wiecej takim: org.apache.jsp). Oczywiscie nie ma w tym pakiecie takiej klasy, stad blad.
Teraz jak dodasz klase do pakiety, i dodasz import, to kompilator bedzie wiedzial gdzie szukac klasy testbaza, i problem zniknie. To jedna z pulapek pisania bez podzialu na pakiety.
Pozdro.

zrobiłem pakiet "test", ale nadal coś nie tak, mam takie info:
An error occurred at line: 8 in the generated java file
Only a type can be imported. test.testbaza resolves to a package

An error occurred at line: 14 in the jsp file: /index.jsp
testbaza cannot be resolved to a type
11: Session session1 = factory.openSession();
12: session1.beginTransaction();
13:
14: testbaza baza = new testbaza("ania");
15: session1.save(baza);
16: session1.getTransaction().commit();
17: session1.close();

An error occurred at line: 14 in the jsp file: /index.jsp
testbaza cannot be resolved to a type
11: Session session1 = factory.openSession();
12: session1.beginTransaction();
13:
14: testbaza baza = new testbaza("ania");
15: session1.save(baza);
16: session1.getTransaction().commit();
17: session1.close();

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

wkleje nowy kod, może coś źle robie..

package test;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "testbaza")
public class testbaza {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	@Basic(optional = false)
	@Column(name = "name", unique = false, nullable = false)
	private String name;
	
	public testbaza (String name){
		this.name = name;
	}
	public testbaza(){
		
	}
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

i jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="org.hibernate.*,org.hibernate.cfg.*" import="test.testbaza" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<TITLE>test hibernate</TITLE>
</HEAD>
<BODY>
<%
SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session1 = factory.openSession();
		session1.beginTransaction();
		
		testbaza baza = new testbaza("ania");
		session1.save(baza);
		session1.getTransaction().commit();
		session1.close();
		%>
</BODY>
</html>

może mam coś źle w strukturze katalogów:
w katalogu webapps zrobiłem katalog hibertest i wrzuciłem tam pliki index.jsp, oraz hibernate.cfg.xml, w nim jest katalog test, a w tym katalogu pliki testbaza.java i testbaza.class

0

dodam jeszcze, że na eclipse zadziałało po restarcie, a na tomcat jak wrzuciłem pliki, to przez przeglądarkę nie chce :/

0

Nie wiem o jakim katalogu webapps mowisz, zakladam ze mowisz o tomcat_home/webapps. Strukture masz zla, w ogole nie wiem jak cokolwiek moze dzialac, tak jest zle. Struktura musi byc taka:
webapps
hibertest
index.jsp
WEB-INF
classes
hibernate.cfg.xml
test
testbaza.class
...inne pakiety i klasy

Wszystko co znajduje sie poza WEB-INF/classes nie jest widoczne dla aplikacji webowej, dlatego twierdze ze albo jednak nie masz takiej struktury jaka podajesz, albo totalnie ci to nie dziala.

testbaza.java jest tomcatowi do niczego nie potrzebna.

Komunikat mowi ze test.testbaza jest pakietem a nie klasa. Problem pewnie wynika ze zrypanem struktury.

0

Aha no i w WEB-INF/lib powinny byc wszelkie potrzebne jary jak hibernate.jar jdom.jar itp itd. Masz cos pisane w web.xml? Jesli tak to ten rowniez musi byc w WEB-INF.

0
pikseloza napisał(a)

Aha no i w WEB-INF/lib powinny byc wszelkie potrzebne jary jak hibernate.jar jdom.jar itp itd. Masz cos pisane w web.xml? Jesli tak to ten rowniez musi byc w WEB-INF.

web.xml mam wygenerowany przez eclipse:

<?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>testhibernateWWW</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

może taki być czy mam coś usunąć/zmienić?

0

Moze byc taki, tylko mozesz wywalic niepotrzebne welcome-file, ty i tak masz tylko index.jsp.

0
pikseloza napisał(a)

Moze byc taki, tylko mozesz wywalic niepotrzebne welcome-file, ty i tak masz tylko index.jsp.

zmieniłem strukturę katalogów na taką jak podałeś i przez przeglądarkę też działa :) bardzo ci dziękuje za pomoc :)

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