?這個類包含3個方法:sendMessage()方法將實際信息發送到服務器;connectServer()方法負責連接服務。在本例中,服務是一個RMI服務;getServerName()是一個抽象類,因為不同設備決定服務名字的方式不同。也就是說,任何繼承自MessageClient的類都必須實現getServerName()方法。在開發與信息服務通信的客戶端程序時,我們需要多重繼承。我們的網絡客戶端是一個簡單的用來接收來自表單的信息并將其傳送到服務器的Servlet。為了完成上述任務,這個Servlet必須既繼承HttpServlet又繼承MessageClient。由于Java不允許這種繼承行為,我讓主類繼承HttpServlet,讓主類中的內部類繼承MessageClient,然后外部類創建了內部類的一個實例。代碼如下:public?class?SendMessageServlet?extends?HttpServlet{???private?MessageClient?m_messageClient;???private?String?m_serverName;???public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?????????throws?ServletException,?IOException{??????try{????????//Get?server?name?????????m_serverName?=?request.getServerName();?????????System.out.println("ServerName?is?"?+?m_serverName);?????????//Create?message?client?to?communicate?with?message?server?????????m_messageClient?=?new?ServletMessageClient();?????????System.out.println("Created?Message?Client");?????????m_messageClient.connectToServer();?????????//Get?message?and?phone?number?????????String?phoneNum?=?(String)?request.getParameter("PhoneNum");?????????String?message?=?(String)?request.getParameter("Message");?????????//Send?message?????????m_messageClient.sendMessage(phoneNum,message);?????????//Display?page?to?tell?user?message?was?sent?????????response.setContentType("text/html");?????????RequestDispatcher?dispatcher?=?getServletContext().getRequestDispatcher("/SendMessageForm.jsp");?????????dispatcher.include(request,?response);??????}catch?(Exception?e){?????????e.printStackTrace();??????}???}????public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?????????throws?ServletException,?IOException???{??????doGet(request,?response);???}????/**?*//**?Inner?class?used?to?extend?MessageClient?????*/????public?class?ServletMessageClient?extends?MessageClient?{???????public?ServletMessageClient(){?????????super();???????}???????public?String?getServerName(){??????????System.out.println("Returning?ServerName?"?+?m_serverName);??????????return(m_serverName);???????}????}}?