gpt4 book ai didi

java - 使用 GWT 的 HTTPSession

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:48 24 4
gpt4 key购买 nike

我是 GWT 的新手...我想在我的 Web 应用程序中实现 session 基本上我希望 session 在单击一个按钮(处理一个事件)时开始并在单击另一个按钮(其他处理一个事件)时结束。可能吗?

如何一步一步来?

这段代码可以吗?:

主要(客户端):

Button b1 = new Button("b1");
b1.addClickHandler(new ClickHandler) {
public voin onClick(){
...
rpc.setSession(callback); //rpc call the service...

}
}

Button b2 = new Button("b2");
b1.addClickHandler(new ClickHandler) {
public voin onClick(){
...
rpc.exitSession(callback);

}
}

//-------------------------------------------- ----------------------------------------

import com.google.gwt.user.client.rpc.RemoteService;

public interface MySession extends RemoteService {

public void setSession();

public void exitSession();
}

//-------------------------------------------- ----------------------------------------

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface MySessionAsync {

void setSession(AsyncCallback<Void> callback);

void exitSession(AsyncCallback<Void> callback);

}

//-------------------------------------------- ----------------------------------------

import de.vogella.gwt.helloworld.client.MySession;

public class MySessionImpl extends RemoteServiceServlet implements MySession {

HttpSession httpSession;
@Override

public void setSession() {
httpSession = getThreadLocalRequest().getSession();

httpSession = this.getThreadLocalRequest().getSession();
httpSession.setAttribute("b", "1");

}

@Override
public void exitSession() {
httpSession = this.getThreadLocalRequest().getSession();
httpSession.invalidate(); // kill session
}

}

我所做的是将我的 Web 应用程序连接到另一个网页,如果我单击浏览器的后退按钮,我返回到我的 Web 应用程序并且 session 仍然有效......我该怎么做?

我希望我已经很好地解释了我的问题......

*****新问题***:**

我试过这样做......

---客户端....主要:

        MyServiceAsync service = (MyServiceAsync) GWT.create(MyService.class);
ServiceDefTarget serviceDef = (ServiceDefTarget) service;
serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+ "rpc");

boolean b=false;;

b=service.checkSession(new AsyncCallback<Boolean>() {

@Override
public void onSuccess(Boolean result) {
// here is the result
if(result){
// yes the attribute was setted
}
}

@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());

}
});

if (b==false){ // se non esiste una sessione
RootPanel.get().add(verticalPanel);
RootPanel.get().add(etichetta);
RootPanel.get().add(nameField);
RootPanel.get().add(sendButton);
RootPanel.get().add(horizontalPanel);

}

else{ //esiste già una sessione attiva (pagina da loggato)
welcome.setText("Ciao "+userCorrect+"!!");
RootPanel.get().add(verticalPanelLog);
RootPanel.get().add(etichetta);
RootPanel.get().add(nameField);
RootPanel.get().add(cercaLog);
RootPanel.get().add(horizontalPanel);
}

////////////////////////////////////////////////////////////////////

public interface MyServiceAsync {
...

void exitSession(AsyncCallback<Void> callback);

void setSession(AsyncCallback<Void> callback);

void checkSession(AsyncCallback<Boolean> callback); //error!!

////////////////////////////////////////////////////////////////////

public interface MyService extends RemoteService {
/.....

public void setSession();

public void exitSession();

public boolean checkSession();

////////////////////////////////////////////////////////////////////

服务器端:

public boolean checkSession() {

httpSession = this.getThreadLocalRequest().getSession();

//se la sessione esiste già
if (httpSession.getAttribute("b")!= null){
return true;
}
else{ .
return false;
}

最佳答案

GWT 中的session 类似于servlet 中的session。区别在于您调用的 servlet
HTTPSession session = request.getSession();

在 gwt 中你调用

HttpServletRequest request = this.getThreadLocalRequest();获得请求然后再次request.getSession();

在您的情况下,您应该在单击按钮时调用 RPC 并在服务器上管理 session 之前的代码,并在单击另一个按钮并使 session 无效时调用另一个 RPC。这是例子;

Button b1 = new Button("b1");
b1.addClickHandler(new ClickHandler) {
// call RPC and
// session = this.getThreadLocalRequest().getSession();
// session.setAtribute("b", "1");
}


Button b2 = new Button("b2");
b1.addClickHandler(new ClickHandler) {
// call RPC and
// session = this.getThreadLocalRequest().getSession();
// session.invalidate(); // kill session
}

此链接可能对您有帮助Using Servlet Sessions in GWT

编辑:

如果要测试session是否为isExist()或者不试试这个

添加到您的界面boolean test(String attr);
添加到您的 .async 添加 void test(String attr, AsyncCallback<Boolean> callback);
添加到您的 .impl

@Override
public boolean test(String attr) {
return session.getAttribute(attr) != null;
}

然后打电话

Rpc.test(attribute, new AsyncCallback<Boolean>() {

@Override
public void onSuccess(Boolean result) {
// here is the result
if(result){
// yes the attribute was setted
}
}

@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());

}
});

关于java - 使用 GWT 的 HTTPSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com