Guten Tag die Herren!
Ich schreibe das erste Mal in diesem Forum und sage allen herzlich Hallo!
Bei euren Tutorials suchte und fand ich aber schon des Öfteren Hilfe.
Sitze gerade bei einem Projekt und bin knapp am verzweifeln, weil schon viele viele Stunden in die Fehlersuche gelaufen sind.
Also, ich beschreibe mal was ich bei dem Projekt mache:
Ich will grundsätzlich eine Hardwareansteuerung (Schrittmotoransteuerung) mittels JSP realisieren. Momentan überprüfe ich die Kommunikation (über RS232-Schnittstelle) nur mit einer keinen Testroutine (am µC), mit der ich den erhaltenen String am Display einfach ausgebe.
Im ersten Schritt hab ich zwei JSP-Files erzeugt. Das erste ist fast ausschließlich in HTML-Code geschrieben mit dem ich ein Eingabefenster erzeuge:
Schrittmotoransteuerung.jsp
Im zweiten JSP-File verarbeite ich nun die übergebenen Strings und will diese über die RS232-Schnittstlle an einen µC senden.
Schrittmotoransteuerung_page2.jsp
Nun ja. Da ist jetzt natürlich eine menge auskommentiert. So Funktioniert es ja ziemlich gut. Nur sobald ich das RS232 Objekt erzeugen will wirft er sofort folgende Errormeldung aus:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 66 in the jsp file: /Schrittmotoransteuerung_page2.jsp
RS232 cannot be resolved to a type
63: try
64: {
65:
66: RS232 rs = new RS232("COM1",9600,8,1,"NONE",10000);
67:
68:
69: // Übertragen der Schritte
An error occurred at line: 66 in the jsp file: /Schrittmotoransteuerung_page2.jsp
RS232 cannot be resolved to a type
63: try
64: {
65:
66: RS232 rs = new RS232("COM1",9600,8,1,"NONE",10000);
67:
68:
69: // Übertragen der Schritte
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.
Apache Tomcat/5.5.26
Oder folgende Fehlermeldungen, wenn ich das Fenster neu lade:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:599)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:137)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:314)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
java.lang.ClassNotFoundException: org.apache.jsp.Schrittmotoransteuerung_005fpage2_jsp
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:131)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:597)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:137)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:314)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.
Apache Tomcat/5.5.26
Wahrscheinlich ist das mit dem java.net.URLClassLoader$1.run(Unknown Source)
mein Problem. Also findet er die Klasse RS232.class nicht.
Folgendes Java-File will ich importieren:
RS232.java
Diese Routine habe ich bereits getestet. Sie funktioniert einwandfrei.
Ich habe schon versucht die Klasse in 100 verschiedene Ordner zu kopieren. Hab es in ein JAR-File verpackt und hab es nochmals in die 100 Ordner kopiert.(WEB-INF/classes; WEB-INF/lib; common/classes; common/lib; shared/classes; shared/lib; ...) Ich habe auch versucht es zu importieren, auch auf verschiedenste arten.
Danach hab ich mich ins Internet gehackt und bin stundenlang bei verschiedenen Tutorials gesessen. Die schreiben aber alle, dass das *.class File im Ordner WEB-INF/classes liegen muss.
Dann hab ich gemerkt, dass die mit ganz anderen Ordnerstrukturen arbeiten. Ich hatte Tomcat 6 installiert den heruntergelöscht und dann Tomcat 5.5 installiert.
Liegt das Problem vielleicht grundsätzlich an der Verbindung von JSP und der javax.comm.* mit der ich die Schnittstelle integriere. Hoffe nicht, dass das ein Problem darstellt sonst muss ich mein ganzes Konzept verwerfen.
Ich arbeite im Moment mit Tomcat 5.5 und JDK 1.6
Eigentlich brauche ich nur folgende 3 Informationen:
1. In welchen Ordner gehören die Klassen (in JAR verpackt oder nicht )
2. Die zugehörige Importanweisung
3. Ob es überhaupt funktionieren kann (Ansteuerung der Hardware) und was eventuell ein solche verhindern kann?
Ich arbeite das erste Mal mit Skriptlets und hoffe einer von euch hatte schon einmal dasselbe Problem gehabt und kann mir weiterhelfen.
Vielen Dank im Voraus für die Bemühungen
NestorA83
Ich schreibe das erste Mal in diesem Forum und sage allen herzlich Hallo!
Bei euren Tutorials suchte und fand ich aber schon des Öfteren Hilfe.
Sitze gerade bei einem Projekt und bin knapp am verzweifeln, weil schon viele viele Stunden in die Fehlersuche gelaufen sind.
Also, ich beschreibe mal was ich bei dem Projekt mache:
Ich will grundsätzlich eine Hardwareansteuerung (Schrittmotoransteuerung) mittels JSP realisieren. Momentan überprüfe ich die Kommunikation (über RS232-Schnittstelle) nur mit einer keinen Testroutine (am µC), mit der ich den erhaltenen String am Display einfach ausgebe.
Im ersten Schritt hab ich zwei JSP-Files erzeugt. Das erste ist fast ausschließlich in HTML-Code geschrieben mit dem ich ein Eingabefenster erzeuge:
Schrittmotoransteuerung.jsp
HTML:
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="java.util.StringTokenizer" %>
<html>
<head>
<title >Schrittmotoransteuerung mit JavaServer Page</title>
</head>
<body BGCOLOR="lightgray">
<br><!-- br: Leerzeile -->
<FONT FACE="Arial,Helvetica" COLOR="blue" SIZE="+3">
<td><IMG SRC="rsz_LITEC.jpg" ALIGN=right HSPACE=10></td>
<td><IMG SRC="rsz_schrittmotor.jpg" ALIGN=right HSPACE=10></td>
<EM>
<U>
<B>
Schrittmotoransteuerung mit JavaServer Page
</B></EM></U>
</FONT>
<H2>TINF Projekt</H2>
<br>
<HR >
<DIV ALIGN="center">
<H3>Eingabefeld</H3>
<form action="/Schrittmotoransteuerung_page2.jsp" method="post">
<!-- Erstes Eingabefeld -->
<table width=540 border=1>
<tr>
<td>
Anzahl der Schritte:
</td>
<td>
<input name="steps" type="text" size="50" > </td>
</tr>
<tr>
<td>
Geschwindigkeit:
</td>
<td>
<input name="speed" type="text" size="50"> </td>
</tr>
<tr>
<td>
Drehrichtung:
</td>
<td>
<input name="direction" type="radio" checked value="rechtslauf" size="50"> Rechtslauf<br>
<input name="direction" type="radio" value="linkslauf" size="50"> Linkslauf<br>
</td>
</tr>
<tr>
<td>
Schrittweite:
</td>
<td>
<input name="stepwidth" type="radio" checked value="vollschritt" size="50"> Vollschritt<br>
<input name="stepwidth" type="radio" value="halbschritt" size="50"> Halbschritt<br>
</td>
</tr> </table>
</DIV>
<P ALIGN=CENTER>
<tr>
<td><input type="submit" value="Execute"></td>
</tr>
</P>
<HR>
</form>
</body>
</html>
Im zweiten JSP-File verarbeite ich nun die übergebenen Strings und will diese über die RS232-Schnittstlle an einen µC senden.
Schrittmotoransteuerung_page2.jsp
HTML:
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="java.util.StringTokenizer" %>
<html>
<head>
<title >Schrittmotoransteuerung mit JavaServer Page</title>
</head>
<body BGCOLOR="lightgray">
<br><!-- br: Leerzeile -->
<FONT FACE="Arial,Helvetica" COLOR="blue" SIZE="+3">
<td><IMG SRC="rsz_LITEC.jpg" ALIGN=right HSPACE=10></td>
<td><IMG SRC="rsz_schrittmotor.jpg" ALIGN=right HSPACE=10></td>
<EM>
<U>
<B>
Schrittmotoransteuerung mit JavaServer Page
</B></EM></U>
</FONT>
<H2>TINF Projekt</H2>
<br>
<HR >
<DIV ALIGN="center">
<H3>Ausgabefeld</H3>
<form action="/Schrittmotoransteuerung.jsp" method="post">
</DIV>
<P ALIGN=CENTER>
<tr>
<td><input type="submit" value="Back"></td>
</tr>
</P>
<% //--------------------------//Ab hier startet die Java Anwendung//------------------------------------------//
String steps;
String speed;
String direction;
String stepwidth;
String err_steps = null;
String err_speed = null;
String err_direction = null;
String err_stepwidth = null;
if ( (request.getParameter("steps") != null) && (request.getParameter("steps").compareTo("") != 0) &&
(request.getParameter("speed") != null) && (request.getParameter("speed").compareTo("") != 0)
) // Abfrage ob alle Eingangsfelder ausgefüllt wurden
{
steps = request.getParameter("steps");
speed = request.getParameter("speed");
direction = request.getParameter("direction");
stepwidth = request.getParameter("stepwidth");
out.println("<P ALIGN=CENTER>");
out.println("<table width=540 border=1>");
//Schnittstelle anlegen und Fehler ausgeben
try
{
// RS232 rs = new RS232("COM1",9600,8,1,"NONE",10000);
// Übertragen der Schritte
// rs.writeRS232(steps); // Abschlusszeichen auf '\r\n' im C-Programm ändern
// err_steps = rs.readRS232();
// Übertragen der Geschwindigkeit
// rs.writeRS232(err_speed);
// err_steps = rs.readRS232();
// Übertragen der Drehrichtung
if(request.getParameter("steps").compareTo("rechtslauf") != 0){
// rs.writeRS232("0");
// err_direction = rs.readRS232();
}
if(request.getParameter("steps").compareTo("linkslauf") != 0){
// rs.writeRS232("1");
// err_direction = rs.readRS232();
}
// Übertragen der Schrittweite
if(request.getParameter("steps").compareTo("vollschritt") != 0){
// rs.writeRS232("0");
// err_stepwidth = rs.readRS232();
}
if(request.getParameter("steps").compareTo("halbschritt") != 0){
// rs.writeRS232("1");
// err_stepwidth = rs.readRS232();
}
// rs.closeRS232();
}
catch(Exception e)
{
out.println("RS232_Schnittstellenfehler"+e);
}
// Ausgabe der Schnittstellenparameter
out.println("Schritte: "+steps);
out.println(""+err_steps);
out.println("<br>");
out.println("Gschwindigkeit: "+speed);
out.println(""+err_steps);
out.println("<br>");
out.println("Drehrichtung: "+direction);
out.println(""+err_direction);
out.println("<br>");
out.println("Schrittweite: "+stepwidth);
out.println(""+err_stepwidth);
out.println("<br>");
out.println("<HR>");
out.println("</table>");
out.println("</P>");
}
else
{
out.println("<P ALIGN=CENTER>");
out.println("<table width=540 border=1>");
out.println("Zu wenige Parameter");
out.println("<HR>");
out.println("</table>");
out.println("</P>");
}
%>
</form>
</body>
</html>
Nun ja. Da ist jetzt natürlich eine menge auskommentiert. So Funktioniert es ja ziemlich gut. Nur sobald ich das RS232 Objekt erzeugen will wirft er sofort folgende Errormeldung aus:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 66 in the jsp file: /Schrittmotoransteuerung_page2.jsp
RS232 cannot be resolved to a type
63: try
64: {
65:
66: RS232 rs = new RS232("COM1",9600,8,1,"NONE",10000);
67:
68:
69: // Übertragen der Schritte
An error occurred at line: 66 in the jsp file: /Schrittmotoransteuerung_page2.jsp
RS232 cannot be resolved to a type
63: try
64: {
65:
66: RS232 rs = new RS232("COM1",9600,8,1,"NONE",10000);
67:
68:
69: // Übertragen der Schritte
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.
Apache Tomcat/5.5.26
Oder folgende Fehlermeldungen, wenn ich das Fenster neu lade:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:599)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:137)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:314)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
java.lang.ClassNotFoundException: org.apache.jsp.Schrittmotoransteuerung_005fpage2_jsp
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:131)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:597)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:137)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:314)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.
Apache Tomcat/5.5.26
Wahrscheinlich ist das mit dem java.net.URLClassLoader$1.run(Unknown Source)
mein Problem. Also findet er die Klasse RS232.class nicht.
Folgendes Java-File will ich importieren:
RS232.java
Code:
import java.io.*;
import javax.comm.*;
public class RS232
{
private String str;
private PrintStream s_out;
private SerialPort sp;
private BufferedReader s_in;
public RS232( String port,
int baud,
int dbits,
int sbits,
String xpar,
int rec_timeout) throws Exception
{
int par = 0;
if(dbits == 5){dbits = SerialPort.DATABITS_5;}
if(dbits == 6){dbits = SerialPort.DATABITS_6;}
if(dbits == 7){dbits = SerialPort.DATABITS_7;}
if(dbits == 8){dbits = SerialPort.DATABITS_8;}
if(sbits == 1){sbits = SerialPort.STOPBITS_1;}
if(sbits == 15){sbits = SerialPort.STOPBITS_1_5;}
if(sbits == 2){sbits = SerialPort.STOPBITS_2;}
if(xpar == "NONE"){par = SerialPort.PARITY_NONE;}
if(xpar == "ODD"){par = SerialPort.PARITY_ODD;}
if(xpar == "EVEN"){par = SerialPort.PARITY_EVEN;}
if(xpar == "MARK"){par = SerialPort.PARITY_MARK;}
CommPortIdentifier p_id = CommPortIdentifier.getPortIdentifier(port);
sp = (SerialPort)p_id.open("JAVA_Connection",1000);//1s Timeout
sp.setSerialPortParams(baud,dbits,sbits,par);
sp.enableReceiveTimeout(rec_timeout);
sp.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
s_in = new BufferedReader(new InputStreamReader(sp.getInputStream()));
s_out = new PrintStream(sp.getOutputStream());
}
public void closeRS232()throws Exception
{
if(s_in != null) s_in.close();
if(s_out != null) s_out.close();
if(sp != null) sp.close();
s_in = null;
s_out = null;
sp = null;
}
public void writeRS232(String s)throws Exception
{
s_out.println(s);
}
public String readRS232()throws Exception
{
str = s_in.readLine();
return str;
}
}
Diese Routine habe ich bereits getestet. Sie funktioniert einwandfrei.
Ich habe schon versucht die Klasse in 100 verschiedene Ordner zu kopieren. Hab es in ein JAR-File verpackt und hab es nochmals in die 100 Ordner kopiert.(WEB-INF/classes; WEB-INF/lib; common/classes; common/lib; shared/classes; shared/lib; ...) Ich habe auch versucht es zu importieren, auch auf verschiedenste arten.
Danach hab ich mich ins Internet gehackt und bin stundenlang bei verschiedenen Tutorials gesessen. Die schreiben aber alle, dass das *.class File im Ordner WEB-INF/classes liegen muss.
Dann hab ich gemerkt, dass die mit ganz anderen Ordnerstrukturen arbeiten. Ich hatte Tomcat 6 installiert den heruntergelöscht und dann Tomcat 5.5 installiert.
Liegt das Problem vielleicht grundsätzlich an der Verbindung von JSP und der javax.comm.* mit der ich die Schnittstelle integriere. Hoffe nicht, dass das ein Problem darstellt sonst muss ich mein ganzes Konzept verwerfen.
Ich arbeite im Moment mit Tomcat 5.5 und JDK 1.6
Eigentlich brauche ich nur folgende 3 Informationen:
1. In welchen Ordner gehören die Klassen (in JAR verpackt oder nicht )
2. Die zugehörige Importanweisung
3. Ob es überhaupt funktionieren kann (Ansteuerung der Hardware) und was eventuell ein solche verhindern kann?
Ich arbeite das erste Mal mit Skriptlets und hoffe einer von euch hatte schon einmal dasselbe Problem gehabt und kann mir weiterhelfen.
Vielen Dank im Voraus für die Bemühungen
NestorA83