首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 GWT 实现基于 Ajax 的 Web 开发(3)使用 Session

使用 GWT 实现基于 Ajax 的 Web 开发(3)使用 Session

使用 SessionSession 在交互中的作用Web 应用是基于 HTTP 协议的,而 HTTP 协议是一种无状态协议。也就是说,用户从一个页面跳转到另一个页面时会重新发送一次 HTTP 请求,而服务端在返回响应的时候却无法获知该用户在请求当前页面之前都做了些什么。显然,HTTP 协议这样的限制根本无法满足 Web 应用对动态化的需求,于是 Session 便应运而生。使用 Session 可以存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有 Session,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该 Session。可见,使用 Session 是 Web 开发中必不可少的。
Session 的使用GWT 中的 RPC 机制可以直接使用 session,但要确保使用 session 的类继承自 com.google.gwt.user.server.rpc.RemoteServiceServlet,同时需要导入以下两个包:
1
2
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpSession;




之后就可以通过下面的方法设置或读取 session 中的信息了。
清单 1. 存取 Session 变量
1
2
3
4
5
6
7
8
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession();

// Set the variable USERNAME into session
session.setAttribute("USERNAME", ”yuexiaopeng”);

// Get the variable USERNAME from session
String name = session.getAttribute("USERNAME”);




使用 RPC 实现与后台数据通信作为 Ajax 的应用开发框架,GWT 使得实现客户端和服务器的通信变得十分简单,特别是异步通信,而这一功能就是通过 RPC 实现的。以下给出实现异步通信的具体步骤。
客户端定义同步服务接口客户端用来定义异步通信的同步接口需要继承自 RemoteService。
清单 2.
1
2
3
4
5
6
7
8
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

@RemoteServiceRelativePath("CheckUserService")
public interface CheckUserService extends RemoteService
{
    boolean checkUser(String userName, String passWord);
}




服务器端实现上述服务接口清单 3.为了实现异步通信,在服务器端实现服务接口的类需要继承自 RemoteServiceServlet
1
2
3
4
5
6
7
8
9
10
11
import com.employeemanagement.client.login.service.CheckUserService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class CheckUserServiceImpl extends RemoteServiceServlet \
       implements CheckUserService
{
     public boolean checkUser(String userName, String passWord)
     {
          // Do related things
     }
}




客户端定义上述服务的异步接口在进行远程调用之前,还必须创建一个客户端的异步接口,而这个异步接口的定义要基于之前的同步接口并且和之前的同步接口同处一个客户端的包中。对于异步接口的方法而言,没有返回类型,参数列表中除了给出同步接口方法中的参数列表以外,还需要传入一个回调对象以便异步调用完成后通知该对象进行相应的处理。异步接口的命名则必须是同步接口名后加上 Async 后缀。
清单 4.
1
2
3
4
5
6
7
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface CheckUserServiceAsync
{
    void checkUser(String userName, String passWord,
                   AsyncCallback<Boolean> callback);
}




在 web.xml 加上 Servlet 的配置信息清单 5.
1
2
3
4
5
6
7
8
9
10
<servlet>
<servlet-name>CheckUserService</servlet-name>
<servlet-class>com.employeemanagement.server.login.service.CheckUserServiceImpl
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckUserService</servlet-name>
<url-pattern>/com.employeemanagement.EmployeeManagement/CheckUserService
</url-pattern>
</servlet-mapping>




客户端进行 RPC 调用主要的接口和配置完成后,客户端就可以按照以下步骤来通过 RPC 实现和后台的异步通信:
  • 使用 GWT.create()初始化服务接口 ;
  • 必要时,使用 ServiceDefTarget 为 Service 代理描述 Service 接入点的 URL ;
  • 创建一个异步回调对象以供 RPC 完成时调用;
  • 发出 RPC 请求。
有关 RPC 更多的介绍可以阅读 。
返回列表