Java GWT项目在部署时不从RPC加载数据
我的GWT项目有点小问题 我有一个带有列表对象L1的类Aclient。单击中的按钮时,服务器端读取文件,并通过RPC返回列表,该列表随后存储在L1中,然后显示在表中。离线时一切都很好。但是,如果我部署应用程序,它似乎不起作用。最奇怪的是:其中1个文件正在工作,我可以在最小的文件表中显示它的数据。如果我按下另一个按钮,从而读取服务器端的另一个文件,那么表上不会显示任何内容。它看起来确实可以读取并存储在L1中,但我不太确定。 在日志文件中,我没有收到任何错误或警告,因此我不明白它为什么不工作。也许它跑得不够快或者什么的 我从logs only info(仅日志信息)中获得的唯一信息不是警告/错误:此请求导致为应用程序启动新进程,从而导致首次加载应用程序代码。因此,与应用程序的典型请求相比,此请求可能需要更长的时间并使用更多的CPU。当点击按钮时,它会随机出现,否则根本没有任何信息。。。只是一个正在推送的日志,在有信息的日志上延迟非常高,3-7k毫秒,但在没有信息的日志上就可以了。它给我的例子并不存在 这是调用方法的类,而不是完整类:Java GWT项目在部署时不从RPC加载数据,java,gwt,rpc,Java,Gwt,Rpc,我的GWT项目有点小问题 我有一个带有列表对象L1的类Aclient。单击中的按钮时,服务器端读取文件,并通过RPC返回列表,该列表随后存储在L1中,然后显示在表中。离线时一切都很好。但是,如果我部署应用程序,它似乎不起作用。最奇怪的是:其中1个文件正在工作,我可以在最小的文件表中显示它的数据。如果我按下另一个按钮,从而读取服务器端的另一个文件,那么表上不会显示任何内容。它看起来确实可以读取并存储在L1中,但我不太确定。 在日志文件中,我没有收到任何错误或警告,因此我不明白它为什么不工作。也许它
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个文件中的1个
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>
希望你能帮助我。
提前谢谢
编辑:Code我会将服务呼叫更改为:
public void readInput(String Abstimmung){
this.service.readInput(Abstimmung, new AsyncCallback<List<List<Raumeinheit>>(){
@Override
public void onFailure(Throwable caught) {
System.out.println("An Error has occured!");
// show an error message
Window.alert("An error has occured!!");
}
@Override
public void onSuccess(List<List<Raumeinheit>> result) {
menu.setData(result);
}
});
}
没有必要检查结果。如果更改后出现错误,请检查接口。不要使用返回类型对象。这将使GWT生成大量不必要的代码
此外,我还将改变这一点:如果服务器出现问题,则抛出异常。在服务器上发生异常的情况下,您打印一个异常,代码继续运行,就好像什么也没发生一样。这可能是你的问题。如果遇到FileNotFoundException,则抛出异常并在客户端处理。如果不发布一些代码,将无法提供帮助。你能发布服务器调用吗?我不知道该发布什么,因为我不知道到底出了什么问题,而且我有很多代码。添加了一些可能有用的东西。我添加了检查结果之后,没有它也无法工作。我还尝试不使用对象作为返回类型,filenotfound异常也不应该解决它,因为:1。它是脱机工作的,所以除非部署没有破坏文件系统,否则它应该是正常的。2.我们还有一个使用相同技术的函数来访问文件,并在那里工作。不过还是要谢谢你的努力。