저는이 작은 프로젝트에서 서블릿을 시작 했으므로 부드럽게 작성하십시오. 내가 사용하는 백그라운드에서 몇 가지 JS와 정적 HTML을 가지고 :서블릿이 잘못된 응답을 반환합니다.
var xmlhttpRequest = new XMLHttpRequest();
xmlhttpRequest.onreadystatechange = function(){
if (xmlhttpRequest.readyState==4){
if (xmlhttpRequest.status == 200){
var rString = xmlhttpRequest.responseText;
alert(rString);
}
}
}
와 JS 서블릿 호출 : 좋은
xmlhttpRequest.open("POST", "ServletBase", true);
xmlhttpRequest.send(this.someString);
모든; 서블릿에서 processResponse에 내가 요청 문자열을 얻을 무효화 및 자바 클래스 호출 ACB 해당 문자열을 전달 : 이제
response.setContentType("text/html;charset=UTF-8");
int requestLength = request.getContentLength();
PrintWriter pWriter = response.getWriter();
if(requestLength>1){
String inputString = /* i get the string */;
this.ACB.processPageCommand(inputString,pWriter);
}else{pWriter.write("NULL");}
의 ACB 클래스는 연결된 ArduinoBoard으로 inputString을 처리하고 통신하는 작업이다 COM3에 있으며 SerialPortEventListener
을 구현합니다.
this.pWriter.write(responseString);
이 문제는 JS에서 내가 잘못된 데이터를 수신되는 : 이런 일 후, 나는 다시 (String로서 때로는 단순한 문자열, 때로는 JSON 객체) 물건을 작성하는 ACB의 pWriter를 사용 . 예를 들어, ACB에서 32 번 핀을 HIGH로 설정하고 JSON {"pin":"32","state":"1"}
을 다시 작성하려고합니다. 나는 빈 응답을 받는다 (보드상의 핀은 올바르게 설정되어있다). 같은 핀을 LOW로 설정하면 {"pin":"32","state":"0"}
을 얻어야하지만 이제는 첫 번째 응답이 {"pin":"32","state":"1"}
(보드의 핀이 올바르게 설정 됨)이됩니다.
바로 전에 내가 이고 responseString이 무엇인지 알아야합니다. ArduinoBoard가 좋은 데이터를 반환하고 처리가 잘되었음을 의미하지만 JS에서는 '이전 데이터'를 얻습니다.
나는 그것이 사소한 것이 겠지만 서블릿 지식에 대한 나의 부족으로 인해 주위를 둘러 볼 수는 없다. 또한, 긴 게시물에 대한 미안 : D
내가 setHeader을 시도하고 통과 않았다 각 POST에 고유 번호가 있지만 동일한 문제점이 발생합니다. 이제 나는 그것이 POST 처리의 본질과 관련이 있다는 것을 믿습니다.일부 POST는 외부 하드웨어 (ArduinoBoard)에서 처리 할 필요가 없으며 정상적으로 돌아가지만 프로그램이 외부 하드웨어에서 SerialPortEventListener를 사용하여 확인을 기다리는 일부 명령이 있습니다. 이 클래스에서는 PrintWriter를 전역 변수로 사용하고 보드에서 일부 데이터를 반환 할 때만 JS에 다시 쓸 수 있습니다. 서블릿이 그렇게 오래 기다리지 않을 수 있습니까? – larsonvonh
그게 무슨 일이 일어날 수 있습니다 : 코드는 외부 하드웨어가 데이터를 보낼 때 응답 문자열을 생성하고 다음에 명령을 보낼 때 서블릿은 응답 문자열이 synchronized void serialEvent에서 생성되기 때문에 이전 응답을 반환합니다 SerialPortEventListener의 SerialPortEvent oEvent); PrintWriter는이 클래스에서 전역 적입니다. – larsonvonh
내가 충분히 높은 평판을 가지고 있지 않기 때문에 나는 당신의 제안을 업 그레 이드 할 수 없다. 그러나 나는 캐싱에 대해 생각하게 해준 것에 감사한다 : D – larsonvonh