Hallo,
ich habe eine JSP-Homepage und wollte ein URL-Search machen, wo ich ein Suchbegriff eingebe und dies in der Datenbank durchsucht und in einem xml-Format angezeigt wird.
Dass heisst z.B.:
http://www.beispiel\_Seite.de/index.html?id=286&eID=searchxml&sword=suchbegriff&defOp=1&type=0
Begriff erklärung:
sword = hier kommt der Suchbegriff hin
defOp = kann man die Art der Verknüpfung der Suchbegriffe steuern:
defOp = 1 --> irgendein Wort (OR)
defOp=0 --> alle Wörter (AND)
type = steuert die Suchoptionen:
type=0 > ganzes Wort suchen
type=1 > Teil eines Wortes suchen
type=2 > Anfang eines Wortes suchen
type=3 > Ende eines Wortes suchen
type=20 > gesamten Begriff suchen
Dies soll auf die Datenbank (Oracel 10g) zugreifen und durch den folgenden SELECT Statement die Suche durchführen:
select unique obj.obj\_id, obj.abstract, obj.title,
round(obj.file\_size/1024,0), to\_char(obj.accession\_date, 'DD-MM-YY')
from obj\_tab obj, obj\_key\_tab key\_rel, keyword\_tab key, cross\_tab cross,
obj\_author\_tab author, obj\_author\_obj\_tab author\_obj
where key\_rel.obj\_id=obj.obj\_id
and key\_rel.key\_id=key.key\_id and cross.cross\_id=obj.cross\_id
and author.AUTHOR\_ID=author\_obj.AUTHOR\_ID
and author\_obj.OBJ\_ID=obj.obj\_id
and ((upper(obj.abstract) like upper('%eigenverschattung%')
or upper(obj.title) like upper('%eigenverschattung%')
or upper(cross.cross\_area) like upper('%eigenverschattung%')
or upper(author.last\_name) like upper('%eigenverschattung%')
or upper(author.first\_name) like upper('%eigenverschattung%'))
)
Wenn man jetzt z.B. folgende URL eingibt mit dem Suchbegriff „welt“:
http://www.beispiel\_Seite.de/index.html?id=286&eID=searchxml&sword=welt&defOp=1&type=0
sollte z.B. folgender xml-Code im Fenster erscheinen:
lt;searchresults\>
suchbegriff110[Beispielwelt](http://www.beispiel_Seite.de/verlinkung?no_cache=1&sword_list%255B0%255D=welt)
100%
----gefundene Texte----
09-01-0310.2 K
Für die Übung habe bis jetzt ein Java Programm und ein Templat geschrieben, wo ich mit dem Java Programm auf dem Templat zugeife und einen Parameter übergebe:
Java Programm
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class XMLSearch extends HttpServlet {
private static final long serialVersionUID = 5946965066811596464L;
// ändern auf xml
private static final String CONTENT\_TYPE = "text/html; charset=windows-1252";
private TemplateLoader xmlTpl;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT\_TYPE);
PrintWriter out = response.getWriter();
out.println(showContent(request, out, response));
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
public String showContent(HttpServletRequest request, PrintWriter out,
HttpServletResponse response) {
String param1 = null;
param1 = request.getParameter("param1");
// DB ZUGRIFF
// DB SCHLIESSEN!
// WENN ERGEBNIS NULL: rausspringen (irgendwie)
xmlTpl = new TemplateLoader(request);
xmlTpl.initTemplate("modules/xmlsearch/XMLSearch.tpl");
xmlTpl.setWriter(new StringWriter());
// Template Setzen
xmlTpl.addToContext("sword", param1);
// TEMPLATE FERTIG
xmlTpl.mergeTemplateContext();
return xmlTpl.getWriter().toString();
}
}
Templats
$sword$type$defop$resultcount[$name](%2524link)
$rating$description$created$size
Leider weiss ich nicht weiter wie ich vorran gehen soll, das heisst wie übergebe ich der Datenbank den SELECT Statement mit dem jeweiligen Paramter (Suchbegriff). So das er mir dann die gesuchten ergebnisse liefert.
Tipps und Lösungsmöglichkeiten wären sehr hilfreich.
Danke im Voraus