URL Search

LordDarkness

Mitglied
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.:

Code:
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:

Code:
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":

Code:
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:

Code:
<searchresults>
<sword>suchbegriff</sword>
<type>1</type>
<defOp>1</defOp>
<resultcount>0</resultcount>
<resultitem>
<title>
<a href="http://www.beispiel_Seite.de/verlinkung?no_cache=1&amp;sword_list%5B0%5D=welt" >Beispielwelt</a>
</title>
<rating>100%</rating>
<description>
----gefundene Texte----
</description>
<created>09-01-03</created>
<size>10.2 K</size>
</resultitem>
</searchresults>



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

Code:
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

Code:
<searchresults>
<sword>$sword</sword>
<type>$type</type>
<defOp>$defop</defOp>
<resultcount>$resultcount</resultcount>

<resultitem>
<title>
<a href="$link">$name</a>
</title>
<rating>$rating</rating>
<description>$description</description>
<created>$created</created>
<size>$size</size>
</resultitem>
</searchresults>


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
 
Hallo,

über
Code:
request.getParameter("param1");
holt sich dein Servlet den Parameter mit dem Namen param1. Den übergibst du ihm aber nirgends. Die Parameter in deinem Beispielaufruf heißen id, eID,sword,type und defOp - sprich du musst sie dann auch über diese Namen auslesen, also so
Code:
...
String id = request.getParameter("id");
String eId = request.getParameter("eID");
... usw.

hth
THMD
 
Hallo,
habe jetzt folgende Methode geschrieben um SQL Statements der Datenbank zu übergeben, ob das richtig ist weiss ich leider nicht:

Code:
public void initMask(HttpServletRequest request, PrintWriter out, HttpServletResponse response) {

		templateDatabase = new TemplateLoader(request);
		try {
			templateDatabase.initTemplate("objects/showObjects.tpl");
			templateDatabase.setWriter(new StringWriter());
			templateDatabase.addToContext("objectTypes", dbConnector.getResultVector("SELECT * FROM anz_obj_type_view"));
			templateDatabase.addToContext("technologyAreas", dbConnector.getResultVector("SELECT * FROM anz_obj_tech_area_view ORDER BY cat_id"));
			templateDatabase.addToContext("userHelp", dbConnector.getResultVector("SELECT span_name, help_text FROM user_help_tab WHERE page_id = 5"));
		} catch (SQLException e) {
			logger.debug(e.getMessage());
		} finally {
			dbConnector.closeDbConnection();
		}

	}


wenn das falsch ist, bitte ich um verbesserung.

was ich auch noch nicht weiss wie ich diesen SQL SELECT einfüge :


Code:
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%'))
 )


da drinne will ich ihm als Parameter "eigenverschattung" übergeben, aber wie soll ich das in meinen Code integrieren?
 

Neue Beiträge

Zurück