Programmverzeichnis

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Wie kann ich den Pfad ab dem Programmverzeichnis festlegen..

Ich habe ein Applet und will nun eben auf eine Datei zugreifen die im WebAppsordner liegt..wie mache ich das?

./ geht ja scheinbar nicht.

Kann mir jmd sagen wie ich auf eine bestimmte datei innerhalb des WebApps verzeichnis zugreifen kann?
 
G

Guest

Gast
Also das Problem ist grundlegend folgendes:

Ich habe ein Applet auf eine HP eingebaut. Nun liegt da auch eine .txt die ich gerne über das Applet einlesen möchte. Nur geht das nicht. Wie komme ich an dieses File welches auch im web verzeichnis liegt.

Wie schon gesagt mit ./ get es nicht...
 
G

Guest

Gast
Ok, nach einigem googeln etc. habe ich herausgefunden, dass man mit einem Applet gar nicht auf den Server selbst schreiben kann! Dann bin ich auf Servlet gestoßen.

Hiervon habe ich aber gar keine Ahnung. Kann mir jmd. ein Beispielcode machen..also ich will via eines Servlets einfach einige Daten die auf dem Server liegen bearbeiten und eine neue Datei erstelllen. Im Applet sieht das so aus:

Code:
public Testpage(int trial)
	{
		File f = new File("C:\\Programme\\Apache Software Foundation\\Tomcat 6.0\\webapps\\mondrian\\testpage.jsp");
		File f2 = new File("C:\\testpage.txt");
		BufferedReader br = null;
		BufferedReader br2 = null;
		BufferedWriter bw = null;
		String check = "";
		URL url = null;
		URL url2 = null;
		try 
		{
			
			bw = new BufferedWriter(new FileWriter(f2));
			br = new BufferedReader(new FileReader(f));

			check = br.readLine();
			
			while(check !=  null)
			{
				if(check.startsWith("<%--Start--%>"))
				{
					if(trial != 0)
					{
						bw.write(check);bw.newLine();
						String check2 = "";
						br2 = new BufferedReader(new FileReader(new File("C:\\Programme\\Apache Software Foundation\\Tomcat 6.0\\webapps\\mondrian\\html" + trial + ".html")));
						check2 = br2.readLine();
						while(check2 != null)
						{
							bw.write(check2);bw.newLine();
							check2 = br2.readLine();
						}
						check = br.readLine();
						while(true)
						{
							if(check.startsWith("<%--End--%>"))
							{
								bw.write(check);bw.newLine();
								break;
							}
							check =  br.readLine();
						}
					}
					else
					{
						System.out.println("kill Testpage");
						bw.write(check);bw.newLine();
						check = br.readLine();
						while(true)
						{
							if(check.startsWith("<%--End--%>"))
							{
								bw.write(check);bw.newLine();
								break;
							}
							check =  br.readLine();
						}
					}
				}
				if(!check.startsWith("<%--End--%>"))
				{
					bw.write(check);bw.newLine();
					check = br.readLine();
				}
				else
				{
					check = br.readLine();
				}
			}
		} 
		catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				br.close();
				if(br2 != null)
				{
					br2.close();
				}
				bw.close();
				File desc =  new File("C:\\Programme\\Apache Software Foundation\\Tomcat 6.0\\webapps\\mondrian\\testpage.jsp");
				desc.delete();
				f2.renameTo(desc);
			} catch (IOException e) 
			{
				e.printStackTrace();
			}
		}
	}
}

Nun will ich genau das auch über das Servlet können nur eben nicht direkt verlinkt sondern die Daten aus dem Serververzeichnis nehmen.


Kann mir jmd. sagen wie ich das mit servlet machen kann? Evt. sagar mal mit einem beispiel? wäre nett.
 

Wildcard

Top Contributor
Bevor du jetzt mit Servlets anfängst, kannst du auf deinem Server überhaupt einen Tomcat laufen lassen?
 
M

maki

Gast
Was genau willst du machen?

Schon mal eine JSP oder ein Servlet geschrieben und das auf in einem Servlet Container wie Tomcat laufen lassen?
Wenn du eine der Fragen mit Nein beantwortest, hilft dir das Beispiel auch nix, solltest dich lieber mal mit Servlets auseineandersetzen.

Nebenbei, dieser Thread wäre dann im Unterforum Web Tier richtig aufgehoben.
 
G

Guest

Gast
Ja ich kann Tomcate laufen lassen. :)

Das ganze soll lokal auf meinem Rechner laufen, daher ist alles möglich.

Ähm mir ist es eigentlich egal wie ich es mache..aber was ich will sind Dateien auf dem Server (Tomcat WebApps verzeichniss) verändern. Momentan habe ich alles mit Apllets aufgebaut, das geht auch alles weil die sind Signiert. Nun hänge ich aber an dem Problem, dass ich bei manchen aktionen dinge auf den Server ändern muss also Dateien schreiben etc.

Das will ich realisieren egal wie :) Wenn es hier einen schönen einfach Weg gibt dann hoffe ich dass ihr mir den nennen könnt. Ich will einfach die Möglichkeit haben die Dinge die mein Applet generiert in eine Datei auf dem Server zu schreiben.

Bitte Help es ist schon dringend :)
 

Niki

Top Contributor
Als Lösung würde mir nur einfallen ein Servlet zu schreiben, welches deine Daten entgegennimmt. Dieses Servlet weiß anhand der Daten was zu tun ist und ändert die Datei/en. Die post-Methode des Servlets kannst du mittels HTTPClient aufrufen und schaut in etwa so aus:
Code:
//HttpConnection erzeugen und öffnen
SimpleHttpConnectionManager connectionManager = new SimpleHttpConnectionManager();
HostConfiguration hostConfiguration = new HostConfiguration();
hostConfiguration.setHost(host, port);
HttpConnection connection = connectionManager.getConnection(hostConfiguration);
connection.open();

//PostMethode erzeugen und Parameter setzen
PostMethod postMethod = new PostMethod(servletPfad);
postMethod.addParameter("param1", "param1_value");
postMethod.addParameter("param2", "param2_value");

//PostMethode aufrufen
postMethod.getParams().setCookiePolicy(CookiePolicy.DEFAULT);
int ret = postMethod.execute(state, connection);
postMethod.releaseConnection();
if (HttpStatus.SC_OK == ret)
	System.out.println("Aufruf erfolgreich");

Das Servlet schaut dann so aus:

Code:
public class MyServlet extends HttpServlet{
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String param1 = req.getParameter("param1");
		String param2 = req.getParameter("param2");

		//Hier Dateien verändern!
	}
}

Wie du Servlets im Tomcat deployst ist dir hoffentlich klar. Sonst wird das ein schweres Unterfangen.

Ob das aus einem Applet funktioniert weiß ich nicht. Vielleicht kann jemand noch seine Meinung dazu abgeben
 

Niki

Top Contributor
Ja, aber wozu dann eigentlich überhaupt ein Applet und keine Application? Dann spart man sich auch das ganze Zertifikats-Zeugs.
 
G

Guest

Gast
Das weiß ich leider auch nicht :(

Aber ich habe das gefunden:

http://www.webdeveloper.com/java/java_jj_read_write.html

Hier scheint das ganze relativ leicht über ein cgi script zu gehen... nur habe ich das grad ausprobiert und es geht leider nicht. Habe bestimmt etwas falsch gemacht :( Kann mir jmd. mal genau erklären was ich machen muss und wohin ich das zeug packen soll.

Weil die auswertung usw. macht alles mein Applet ich brauche eigentlich nur die möglichkeit eine Datei zu schreiben und zu lesen. Schreiben scheint über das cgi recht gut zu gehen, zumindest mal laut dem link. Blos bekomme ich das nicht hin.

kann mir das jmd. bitte mal erklären. Wäre sehr sehr sehr nett. :)
 
G

Guest

Gast
Das soll schon von ausen bedienbar sein. Sonst wäre das ja kein Problem. Also der Server läuft auf meinem rechner. Aber es sollen auch andere Rechner drauf zugreifen können und damit arbeiten.
 
G

Guest

Gast
Oder gehen die CGI Geschichten nicht auf einem WinRechner? Also Tomcat usw. habe ich...
 

Niki

Top Contributor
Also verstehe ich dich richtig? Du hast ein Applet welches von überall aufgerufen werden kann. Über dieses Applet sollen aber Dateien am Server bearbeitet werden können?

Wenn das stimmt, dann solltest du das so machen wie ich oben beschrieben habe.
 
G

Guest

Gast
Genau so soll das sein :)

Aber dein Beispiel verstehe ich nicht. Muss dazu sagen, dass ich mit Servlets noch nie was gemacht habe...


Kannst du das etwas näher Beschreiben oder auf die cgi geschichte eingehen?
 

Niki

Top Contributor
Auf cgi kann ich nicht eingehen, denn damit habe ich noch nie was gemacht. Ich kann dir aber meine Lösung näher erklären:

Ein Applet läuft ja am Client, da kannst du natürlich nicht Dateien, die am Server liegen manipulieren. Ein Servlet läuft unter einer WebApplikation in einem Servlet-Container (Tomcat). Ein Servlet ist dazu da, dynamisch zur Laufzeit Requests entgegenzunehmen, zu verarbeiten und etwas zurück zu schicken. Dabei läuft ein Servlet immer unter einer bestimmten URL, die man in der web.xml der WebApplikation einrichten kann.
Du willst jetzt über das Applet auf dem Server irgendetwas machen. Dafür musst du am Server eine Verarbeitung anstoßen und da kommt eben das Servlet ins Spiel. Du musst jetzt nur noch am Client diesen Prozess anstoßen. Dafür kannst du den HTTPClient verwenden (HTTPClient). Der HTTPClient macht nichts anderes als das Servlet mit übergebenen Parameter aufzurufen.
 
G

Guest

Gast
danke schonmal für die erklärung...aber ich blicke da trotzdem nichts :eek:

Gibt es nicht einen Einfachen weg? Also es geht eigentlich nur um das schreiben der Daten die das Applet liefert.
 
G

Guest

Gast
Wärst du so nett und würdest mal ein Programm machen welches die Möglichkeit bietet eine Datei zu erstellen. Also so dass ich es einbauen kann. Am besten noch dazusagen wie ich es einbauen kann.. :(

Weil ich bekomme das alleine nicht hin glaube ich. Wäre auf jedenfall mal sehr nett!
 

Niki

Top Contributor
Ja, ich schreib dir mal schnell eine kleine webapp, die Parameter entgegennimmt und etwas damit macht. Du solltest dich mal registrieren und mir dann eine PN mit deiner email schicken, damit ichs dir mailen kann.
 
G

Guest

Gast
Ok werde ich machen :) Aber erst gegen heute Abend.

Vielen Dank schonmal für deine Mühe. Du hilfst mir sehr. Auch wenn es so aussieht als ob ich da nichts für mache, aber ich bin nun schon fast die ganze Woche an dem Thema dran...

Kapiere immernoch nicht viel :(
 

Dog86

Gesperrter Benutzer
Ok vielen Dank schonmal. Das bekomme ich schonmal hin.

Nur ist das nicht ganz das was ich will. Ich zwar nun eine DAtei anlegen und ein best8immten content reinposten. Was ich aber will ist eben ganz viel in eine Datei schreiben :)

Kann man dem Servelt einen Outputstream vom Applet mitgeben und dann Einfach in eine Datei schreiben?

Was mir eingefallen ist, mir würde grundlegend auch ein FileUpload reichen... kann man das über ein Servlet auch realisieren? Also, dass ich per Applet dem Servlet eine Datei die Lokal auf dem Rechner liegt gebe und der mir dies dann auf den Server packt.
 

Niki

Top Contributor
Klar geht das auch. Du brauchst ein Servlet welches FileUploads kann. Dafür gibt es eine lib: commons-fileupload. Ich glaub diese lib braucht auch noch commons-io.
Das Servlet sieht dann so aus:
Code:
public class UploadServlet extends HttpServlet {
	/**
	 * 

Nimmt einen Multipart-Request entgegen und speichert den Content im Filesystem ab</p>
	 */
	protected void service(HttpServletRequest request, HttpServletResponse arg1)
			throws ServletException, IOException {	
		
		try {
			File dir = getDir();
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);

			if (isMultipart) {

				FileItemFactory factory = new DiskFileItemFactory();

				ServletFileUpload upload = new ServletFileUpload(factory);

				List<FileItem> items = upload.parseRequest(request);

				for (FileItem fi : items) {
					if (!fi.isFormField()) {
						byte[] b = fi.get();
						File newFile = new File(dir, fi.getName());
						store(newFile, b);									
					}
				}
			}
		} catch (Throwable ex) {			
			throw new ServletException(ex);
		}
	}

	public static void store(File f, byte[] b) throws IOException {
		FileOutputStream fos = null;

		try {
			fos = new FileOutputStream(f);
			fos.write(b);
		} finally {
			if (fos != null) {
				fos.flush();
				fos.close();
			}
		}		
	}

	public static File getDir() {
		String s = Settings.getProperty(Settings.PROP_UPLOAD_DIR);
		File dir = new File(s);

		if (!dir.exists()) {
			dir.mkdirs();
		}

		return dir;
	}
}

der Code für den Client sieht dann so aus:
Code:
File f = new File("...");

String uploadServlet = "mywebapp/upload";

HttpState state = new HttpState();
PostMethod filePost = new PostMethod(uploadServlet);

Part[] parts = { new StringPart("fileupload_request", f.getName()), new FilePart(f.getName(), f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));

int ret = filePost.execute(state, connection);
filePost.releaseConnection();
 

Dog86

Gesperrter Benutzer
hmm,...

Also die UploadServlet Klasse kann ich in eclipse darstellen ohne Fehler...blos bei dem was ich in mein Applet einfügen muss geht es nicht...

Er meckert bei dingen wie HttpState usw... muss ich das was bestimmtes machen??

Zudem kennt er die variable connection nicht. Woher kommt die?

Kannst du mir da wieder so eine schöne zip machen? *liebguck*
 

Niki

Top Contributor
Für die Client Klassen brauchst du eben den HttpClient. Ich weiß nicht wie das ist mit Fremd-Bibliotheken in einem Applet. Vielleicht kann da ja jemand sagen wie das funktioniert. Den Link für den HttpClient habe ich eh irgendwo weiter oben glaub ich gepostet. Der Code für die HttpConnection steht auch weiter oben. Eigentlich müsstest du mit dem ganzen Zeug schon zurecht kommen
 

Dog86

Gesperrter Benutzer
ok, das mit dem Applet habe ich hinbekommen sieht nun so aus:

Code:
		File f = new File("c:/ComponentExecutionReport1.txt");

		String uploadServlet = "http://localhost:8080/dateimanipulieren/upload";
		SimpleHttpConnectionManager connectionManager = new SimpleHttpConnectionManager();
		HostConfiguration hostConfiguration = new HostConfiguration();
		hostConfiguration.setHost("localhost", 8080);
		HttpConnection connection = connectionManager.getConnection(hostConfiguration);
		try {
			connection.open();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 
		HttpState state = new HttpState();
		PostMethod filePost = new PostMethod(uploadServlet);
		try
		{
			Part[] parts = { new StringPart("fileupload_request", f.getName()), new FilePart(f.getName(), f) };
			filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));

			int ret = filePost.execute(state, connection);
			filePost.releaseConnection();
		}
		catch(Exception e)
		{
			
		}

Die Servletklasse habe ich nun auch in einem .jar mit dem namen Upload.jar. Die jar habe ich in C:\Programme\Apache Software Foundation\Tomcat 6.0\webapps\dateimanipulieren\WEB-INF\lib

Meine web.xml sieht wie folgt aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ManipuliereDateiServlet</display-name>
  <servlet>
		<servlet-name>DateiManipuliereServlet</servlet-name>
		<display-name>DateiManipuliereServlet</display-name>
		<servlet-class>manipulieredatei.ManipuliereDateiServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DateiManipuliereServlet</servlet-name>
		<url-pattern>/manipuliere/*</url-pattern>
	</servlet-mapping>


	<servlet>
		<servlet-name>Upload</servlet-name>
		<display-name>Upload</display-name>
		<servlet-class>Upload.UploadServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Upload</servlet-name>
		<url-pattern>/manipuliere/*</url-pattern>
	</servlet-mapping>

</web-app>

Wenn ich das Applet nun starte bekomme ich

Code:
Exception in thread "AWT-EventQueue-1" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
	at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:220)
	at org.apache.commons.httpclient.methods.ExpectContinueMethod.<init>(ExpectContinueMethod.java:93)
	at org.apache.commons.httpclient.methods.EntityEnclosingMethod.<init>(EntityEnclosingMethod.java:119)
	at org.apache.commons.httpclient.methods.PostMethod.<init>(PostMethod.java:106)
	at Valid.button1ActionPerformed(Valid.java:71)
	at Valid$1.actionPerformed(Valid.java:48)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 17 more
 

Niki

Top Contributor
Der Client braucht neben httpClient auch noch commons-codec, commons-logging, und commons-fileupload (eventuell auch noch commons-io)
 

Niki

Top Contributor
Wie gibt man beim Applet eigentlich den classpath an. Ich weiß, das ist eigentlich eine Anfängerfrage, ich hab aber noch nie ein Applet implementiert, da es noch nie notwendig war.
 

Dog86

Gesperrter Benutzer
Ok ich glaube ich gehe die ganze Sache einfach nur falsch an.

Also:

Ich habe eine jsp Seite. Auf der befindet sich momentan eine tabelle mit einigen checkboxen etc.

Momentan ist es so, dass das alle funktioniert jedoch nur lokal.

Ich habe einige Applets eingebaut die beim Starten ein javascript ausführen welches dann die Namen der Checkboxen liefert. Die Namen der checkboxen sind die Pfäde zu den Dateien die ich benötige. So hatte man Applet dann die Pfäde zu den Dateien und kann diese dann bearbeiten.

Da sich die Dateien jedoch alle auf dem Server befinden gibt es da bestimmt auch die Möglichkeit das alles per Servlet zu machen oder? Also ohne diesen Umweg des Applets...


Ich kenne mich leider nicht so gut aus, daher frage ich euch. Ihr habt da bestimmt eine bessere Idee wie ich das machen kann.

Also das ganze sieht so aus:

http://www.abload.de/img/unbenannthu6.jpg

Die "Show" buttons sind momentan Applets die jeweils ein Script aufrufen und die checkboxnamen der Reihe auslesen.
Die Dateien werden dann eingelesen und bearbeitet. Dann wird danach eine andere Datei überschrieben.

Das Applet macht dann zum schluß eine Weiterleitung auf eine jsp.

Das geht auch momentan alles..blos eben nur Lokal :).

Kann ich das nun irgendwie mit einem Servlet realisieren so dass es auch von Außen Bedienbar ist. Die Dateien befinden sich immer auf dem Server.
 

Dog86

Gesperrter Benutzer
Ok ich habe das nun soweit hinbekommen, dass es nun geht :).

Problem was ich nun habe ist, dass ich das halt noch über

http://webapp/bla/manipuliere?filename=test.txt

Machen muss. Also mein Aplet geht momentan einfach auf die Seite. Das ist finde ich etwas nun ja doof. Kann man das auch anderst machen, dass ich dem Servlet auf einem anderen weg einfach den String schicke?

Ich weiß ich nerve euch, aber ich bin echt am verzweifeln will endlich, dass der käse geht....
 
G

Guest

Gast
So ok. Soweit habe ich das nun hinbekommen. Nun nur noch eine weitere Frage.

Ich will versuchen das nun ohne Applets zu machen. Kann ich irgendwie buttons einbinden die beim clicken ein Javascript ausführen und den return Wert dann an das Servlet weitergeben?

Oder gibt es da einen anderen Weg?
 

Dog86

Gesperrter Benutzer
Geht das mit den Buttons? Also quasi Java Script butten auf die Seite packen. Dann ein Script drüber rennen lassen und den returnwert des Scriptes dann an mein servlet weitergeben.
 

Niki

Top Contributor
Wenn du das ganze mit einer normalen HTML Seite machst brauchst du nur ein form zu basteln. Dieses Form beinhaltet alle Komponenten, die du benötigst um die Daten zu sammeln. Beim Abschicken des forms (über submit-Button) wird dann das Servlet aufgerufen, welches die Daten verarbeiten soll. Das Verarbeiten-Servlet liefert dann die neue Page als Response zurück. So funktioniert normale Servlet-Programmierung. Wenn du jsps verwendest, machst du nichts anderes. jsps sind im Grunde auch nur Servlets, nur halt mit speziellen Erweiterungen (Tag-Libs)
 

Dog86

Gesperrter Benutzer
Super ok, das habe ich verstanden.

Aber wie mache ich das nun genau? Also ich habe eine .jsp dort habe ich einige Javascript methoden die mir aktivierte Checkboxen übergeben.

Ich möchte nun beim click das javascript ausführen und an mein Servlet übergeben. kannst du da ein Bsp posten bitte wie das aussehen muss. Also im Servlet und in der .jsp datei?

Der returnwert des Javascripts sollte dem Servlet also übergeben werden.

€:

Ich brauch halt einen weg bei dem ich das ganze nicht per URL aufrufe. Also wie ich das Servlet per URL starte ist klar. Aber das geht nicht. Denn ich muss recht viel text übergeben und die Länge ist scheinbar begrenzt. Daher brauch ich einen weg das ganze so zu machen, dass ich es nicht per URL übermitteln muss. Denn für URL ist der ganze Text einfach zu lang
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben