我的GWT項目出現了一些問題。GWT項目在部署時不從RPC加載數據
我有一個類A(客戶端)與列表對象L1。當單擊A中的按鈕時,將在服務器端讀取文件,並通過RPC返回列表,然後將該列表存儲在L1中,然後顯示在表格中。這一切都可以很好地離線。但是,如果我部署應用程序它似乎不工作。最奇怪的是:1個文件正在工作,我可以在表中顯示它的數據(最小的文件)。如果我按下另一個按鈕(並因此讀取服務器端的其他文件),桌面上不會顯示任何內容。它似乎在A上讀取並存儲在L1上,但我對此不太確定。 在日誌文件上我沒有收到錯誤或警告,所以我不明白爲什麼它不起作用。也許它運行得不夠快或什麼?
我從日誌中獲得的唯一信息(只有信息而不是警告/錯誤):「此請求導致您的應用程序啓動一個新進程,從而導致您的應用程序代碼首次加載。因此,這個請求可能需要更長的時間,並且比您的應用程序的典型請求使用更多的CPU。「它出現在隨機點擊按鈕(否則根本沒有任何信息...只是一個日誌,它被推送)和信息等待時間真的很高(3-7k毫秒),但在罰款沒有信息的人。它給我的例子不存在。
這是該方法被稱爲類(不是滿級):
public class DatasetMenu{
private DataImportServiceClientImpl importer;
public void historyChangeState(String Abstimmung){
importer.readInput(Abstimmung);
}
這是客戶方代碼:
public class DataImportServiceClientImpl{
private DataImportServiceAsync service;
public DatasetMenu menu;
public DataImportServiceClientImpl(String url){
this.service = GWT.create(DataImportService.class);
ServiceDefTarget endpoint = (ServiceDefTarget) this.service;
endpoint.setServiceEntryPoint(url);
this.menu=new DatasetMenu(this);
}
public void readInput(String Abstimmung){
this.service.readInput(Abstimmung, new DefaultCallback());
}
private class DefaultCallback implements AsyncCallback {
@Override
public void onFailure(Throwable caught) {
System.out.println("An Error has occured!");
}
@Override
public void onSuccess(Object result) {
if(result instanceof List<?>){
List<List<Raumeinheit>> temp = (List<List<Raumeinheit>>) result;
menu.setData(temp);
}
}
}
}
這是在服務器端的代碼:
public class DataImportServiceImpl extends RemoteServiceServlet implements DataImportService{
@Override
public List<List<Raumeinheit>> readInput(String Abstimmung){
List<String> fileList=new ArrayList<String>();
fileList.add("files/" + Abstimmung + ".b.csv");
fileList.add("files/" + Abstimmung + ".k.csv");
System.out.println(fileList.get(0));
List<List <String[]> > total2 = new ArrayList<List <String[]> >();
String[] values;
for(int i =0;i<fileList.size();i++){
List<String[]> total = new ArrayList<String[]>();
File file = new File(fileList.get(i));
try{
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()){
String data = inputStream.nextLine();
values = data.split(";");
total.add(values);
}
inputStream.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}
total2.add(total);
}
List< List<Raumeinheit> > result = new ArrayList<List<Raumeinheit>>();
for(int i = 0;i<total2.size();i++){
List<Raumeinheit> temp = new ArrayList<Raumeinheit>();
for(int j=0;j<total2.get(i).size();j++){
if(i==1){
temp.add(new Raumeinheit(total2.get(i).get(j)[0],Integer.parseInt(total2.get(i).get(j)[1]),Integer.parseInt(total2.get(i).get(j)[2]),Integer.parseInt(total2.get(i).get(j)[3]),Double.parseDouble(total2.get(i).get(j)[4]), Double.parseDouble(total2.get(i).get(j)[5]), Double.parseDouble(total2.get(i).get(j)[6])));
}
else{
temp.add(new Raumeinheit(Integer.parseInt(total2.get(i).get(j)[0]),total2.get(i).get(j)[1],Integer.parseInt(total2.get(i).get(j)[2]),Integer.parseInt(total2.get(i).get(j)[3]),Integer.parseInt(total2.get(i).get(j)[4]),Double.parseDouble(total2.get(i).get(j)[5]), Double.parseDouble(total2.get(i).get(j)[6]), Double.parseDouble(total2.get(i).get(j)[7])));
}
}
result.add(temp);
}
return result;
}
}
正如我所說的,它完全脫機工作,所以不用擔心服務器端代碼。在線它只與我們擁有的8個文件一起工作。
Servlet的:
<servlet>
<servlet-name>DataImportServlet</servlet-name>
<servlet-class>com.se.sprint1.server.DataImportServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataImportServlet</servlet-name>
<url-pattern>/sprint1/DataImport</url-pattern>
</servlet-mapping>
希望你能幫助我。 由於提前
編輯:代碼
沒有發佈一些代碼,它不可能提供幫助。你可以發佈服務器電話嗎? –
我不確定要發佈什麼,因爲我不知道發生了什麼問題,並且我有一大堆代碼。增加了幾個可能有用的東西。 – R6D1H2