View Full Version : [Java] Problema con Servlet
innaig86
11-09-2007, 12:20
Buongiorno. :D
Ho un problemino con una servlet che dovrebbe generare una pagina rss.
Per generarla devo accedere ad un database mySql e leggere dei dati.
Il problema è: su Internet Explorer 6 non vuole saperne di andare.
Se gli do http://localhost:8080/feed (comando a TomCat per chiamare la servlet), semplicemente non fa niente, ma mi dice nella Barra di Stato: Completato.
Se do lo stesso URL a Firefox, invece, riesco a vedere il risultato (e cioè l'albero dei tag arricchito con i dati)
Da cosa potrebbe dipendere?
Se per rispondermi avete bisogno del codice della servlet lo posto dopo ;)
Grazie.
usernameIsAlreadyInUse
11-09-2007, 12:25
Molto probabilmente è solo un fatto di visualizzazione del browser, vedi se tutti i tag sono ok. Manda il contenuto del file.
innaig86
11-09-2007, 12:40
import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class feedRSS extends HttpServlet
{
private Connection conn;
//parametri del database
private String myPass = "XXX";
private String myUser = "XXX";
private String myHost = "XXX";
private String myPort = "XXX";
private String myName = "XXX";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
String channelTitle = "BORGCalendar - Public Calendar";
String channelLink = "";
String channelDescription = "My Public Calendar ...";
PrintWriter out = response.getWriter();
out.println("<?xml version=\"1.0\"?>");
out.println("<rss version=\"2.0\">");
out.println("<channel>");
out.println("<title>" + channelTitle + "</title>");
out.println("<link>" + channelLink + "</link>");
out.println("<description>" + channelDescription + "</description>");
try
{
ResultSet rs = doQuery("SELECT * FROM appointments WHERE (appt_date = CURDATE()) OR (todo = 1);");
ResultSetMetaData rsm = rs.getMetaData();
int colNumber = rsm.getColumnCount();
while (rs.next()){
out.println("<item>");
String t = rs.getString("text");
String subj = "";
String det = "";
if(t == null)
t = "";
int nli = t.indexOf('\n');
if(nli != -1)
{
subj = t.substring(0, nli);
det = t.substring(nli + 1);
} else
subj = t;
for (int i=1; i<= colNumber; i++){
switch (i){
case 1:
out.println("<pubDate>" + rs.getDate("appt_date") + "</pubDate>");
break;
case 5:
out.println("<title>" + subj + "</title>");
out.println("<description>" + det + "</description>");
break;
case 16:
out.println("<category>" + rs.getString("category") + "</category>");
break;
case 13:
if (rs.getInt("todo") == 1){
out.println("<todo>si</todo>");
} else
out.println("<todo>no</todo>");
}
}
out.println("</item>");
}
}
catch(Exception e)
{
e.getMessage();
}
out.println("</channel>");
out.println("</rss>");
out.close();
}
private ResultSet doQuery(String sqlString)
throws Exception
{
Connection conn = connectDB();
Statement stmt = conn.createStatement();
stmt.execute(sqlString);
ResultSet rs = stmt.getResultSet();
return rs;
}
private Connection connectDB()
throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
String myConn = "jdbc:mysql://" + myHost + ":" + myPort + "/" + myName + "?user=" + myUser + "&password=" + myPass + "&autoReconnect=true";
conn = DriverManager.getConnection(myConn);
return conn;
}
}
usernameIsAlreadyInUse
11-09-2007, 12:41
Intendevo il risultato non il codice della servlet...
innaig86
11-09-2007, 12:45
ops...scusa :D
rispetto alle specifiche ho aggiunto il tag <todo>, ma anche senza di quello il problema era uguale..
risultato:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>BORGCalendar - Public Calendar</title>
<link></link>
<description>My Public Calendar ...</description>
<item>
<pubDate>2007-08-07</pubDate>
<title>Questo campo si chiama Subject</title>
<description>Questo sembra una Descrizione</description>
<todo>si</todo>
<category>null</category>
</item>
<item>
<pubDate>2007-08-10</pubDate>
<title>Questo è il secondo appuntametno</title>
<description></description>
<todo>si</todo>
<category>Categoria 2</category>
</item>
<item>
<pubDate>2007-09-11</pubDate>
<title>soggetto dell'11 settembre</title>
<description>descrizione dell'11 settembre</description>
<todo>no</todo>
<category>null</category>
</item>
<item>
<pubDate>2007-09-12</pubDate>
<title>testo del 12 sett</title>
<description>descrizione del 12 sett</description>
<todo>si</todo>
<category>null</category>
</item>
</channel>
</rss>
usernameIsAlreadyInUse
11-09-2007, 13:00
A me lo visualizza anche IE..potresti usare questo http://www.validome.org/rss-atom/validate
per validare il tuo rss.
innaig86
11-09-2007, 13:06
ie versione 6?
usernameIsAlreadyInUse
11-09-2007, 13:09
Si
innaig86
11-09-2007, 13:13
ho fatto una piccola modifica e ora almeno ie inizia a leggerlo... ma si ferma qua
Carattere non valido nel contenuto di testo. Errore durante l'elaborazione della risorsa "http://localhost:8080/feed". Rig...
<title>Questo
credo sia la "e accentata" che gli da problemi..
anche quel validatore mi da errore
Line Column: 15
17 Error: Invalid byte 2 of 3-byte UTF-8-sequence.
to Sourceline 17 Error Position:
<title>Questo
innaig86
11-09-2007, 13:18
ho tolto dal database quella e accentata e ora anche ie me l'ha letto...
ma come faccio se voglio utilizzarle?
come posso impostargli un charset adatto?
innaig86
11-09-2007, 13:39
fatto :D
grazie mille :D
usernameIsAlreadyInUse
11-09-2007, 13:45
Come hai risolto?
innaig86
11-09-2007, 14:06
nel codice della classe, all'inizio, ho messo questo
response.setContentType("text/xml");
out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
che prima mancava..
usernameIsAlreadyInUse
11-09-2007, 14:08
Perfetto!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.