Datenkontrolle mittels Servlet

airliner

Erfahrenes Mitglied
Hi Leute, nachdem sich mein gestriges Problem ja quasi von selbst behoben hat (Glassfish ist manchmal etwas langsam, was das Erkennen von Neuerungen angeht), habe ich jetzt ein weiteres:

Das Applet stellt eine Eingabemaske dar. Nun will ich aber nicht die Daten im Applet kontrollieren lassen, sondern zum Servlet schicken, kontrollieren lassen und das Ergebnis zurücksenden an das Applet, ob es geklappt hat.

Ich weiß, dass es geht, nur wie ist jetzt die große Frage.:confused:

Anbei die Quellcodes:

Code:
	  // Anfang Ereignisprozeduren
	  public void jButton1_ActionPerformed(ActionEvent evt) 
	  throws MalformedURLException, IOException{ 
				  
		  
		
		  if(jTextField1.getText().equals("admin")&&
				  jTextField2.getText().equals("adminadmin")){
		  jTextArea3.setText("Daten stimmen");
		  
		  getServletConnection();
		  
		  onSendData();
		  }else{
			  jTextArea3.setText("Daten stimmen nicht!");
		  }
	  }
	 
	public void jButton2_ActionPerformed(ActionEvent evt) {
		JOptionPane.showMessageDialog(this,
        "Bitte wenden Sie sich an den Administrator oder nutzen Sie google...");
	  }

	  public void jButton3_ActionPerformed(ActionEvent evt) {
	      //getServletConnection(con.close());
		  System.exit(0);
	  }
	  // Ende Ereignisprozeduren
	  //TO DO: close-methode abändern
	  
	  
	  private URLConnection getServletConnection()
		throws MalformedURLException, IOException {

		// Connection zum Servlet öffnen
		URL urlServlet = new URL(getCodeBase(), "http://localhost:8080/CliServ/WEB-INF/classes/");
		URLConnection con = urlServlet.openConnection();

		// konfigurieren
		con.setDoInput(true);
		con.setDoOutput(true);
		con.setUseCaches(false);
		
		// und zurückliefern
		return con;
	}

	/**
	 * Send the inputField data to the servlet and show the result in the outputField.
	 */
	
	  private void onSendData() {
		try {
			// get input data for sending
			String input1 = jTextField1.getText();
			String input2 = jTextField2.getText();

			// send data to the servlet
			URLConnection con = getServletConnection();
			OutputStream outstream = con.getOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(outstream);
			oos.writeObject(input1);
			oos.writeObject(input2);
			oos.flush();
			oos.close();

			// receive result from servlet
			InputStream instr = con.getInputStream();
			ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
			String result = (String) inputFromServlet.readObject();
			
			File f = new File("C:\\log.txt");
			if(!f.exists()){
			f.createNewFile();}
			FileWriter fw = new FileWriter("log.txt", true);
			fw.write(result);
			RandomAccessFile raf = new RandomAccessFile("log.txt", "rw");
			raf.writeChars(result);
			fw.close();
	
			inputFromServlet.close();
			instr.close();

			
			// show result
			jTextArea3.setText(result);
			

		} catch (Exception ex) {
			ex.printStackTrace();
			jTextArea3.setText(ex.toString());
		}
	}
	  
}

Das ganze GUI-Gehabe habe ich außen vor gelassen, denn es funktioniert ja.
Lasst euch nicht von den FIles erschrecken, derzeit funktioniert es noch nicht, ist auch kein Muss. Wichtig ist erstmal die Passwort-Überprüfung.
Die Daten können dabei, da es ein Testsystem ist, auch im Servlet direkt abgelegt und initialisiert werden.

Servlet:
Code:
public class servlet extends HttpServlet{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -1282283994096021301L;

	public void doPost(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		
		try {response.setContentType("");
		
		InputStream in = request.getInputStream();
		ObjectInputStream inputFromApplet = new ObjectInputStream(in);
		String input = (String) inputFromApplet.readObject();
		request.equals("admin");
		request.equals("adminadmin");
		response.getWriter().println( "Daten übermittelt..." );
		
		OutputStream outstr = response.getOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(outstr);
		oos.writeObject(input);
		oos.flush();
		oos.close();
		
		} catch (Exception e) {
			e.printStackTrace();
			}
		}

}

Danke schonmal für eure Unterstützung!
 
Hi airliner,

schaue Dir mal Spring MVC an.

Dann könntest Du im ersten Step einen Controller bauen (Spring Servlet),
der eine JSP als View hat.

Der Ablauf wäre dann: Request an Controller, Controller prüft und verarbeitet Werte,
leitet zu einer JSP (neue oder dieselbe).

Der Vorteil: Spring MVC nimmt Dir viel in Bezug auf Requests und Parameter und deren Handling ab.

Ist wesentlich professioneller, als alles "zu Fuß" selbst zu bauen.

Jetzt müsstest Du nur entscheiden, ob schon Frameworks in Deiner Applixcation sind und mit Spring MVC nun zuviel wird.

Ich habe relativ viele Anwendungen gesehen, die dutzende an Frameworks kombinieren. Das ist für Wartbarkeit udn Skalierbarkeit ein Riesennachteil.

Solltest Du es alles selbst bauen wollen, mittels Servlet, dann schaue Dir das FrontController Pattern an.

Viele Grüße,

Tim
 
Hab mir mal grad Spring etwas angesehen und als Anfänger: :suspekt:

Über das Wochenende habe ich mal etwas weiter dran gefummelt und nun kommt eine Exception alá:
java.security.AccessControlException: access denied (java.util.PropertyPermission http.strictPostRedirect read)
Wenn ich das auf dem eigenen Glassfish öffnen will, wenn ich das Applet über das Netzwerk aufrufe kommt folgende Exception:
java.security.AccessControlException: access denied (java.net.SocketPermission localhost:8080 connect,resolve)

Kann jemand von euch damit was anfangen?!
 
Zurück