?這個類包含3個方法:sendMessage()方法將實際信息發(fā)送到服務(wù)器;connectServer()方法負(fù)責(zé)連接服務(wù)。在本例中,服務(wù)是一個RMI服務(wù);getServerName()是一個抽象類,因為不同設(shè)備決定服務(wù)名字的方式不同。也就是說,任何繼承自MessageClient的類都必須實現(xiàn)getServerName()方法。在開發(fā)與信息服務(wù)通信的客戶端程序時,我們需要多重繼承。我們的網(wǎng)絡(luò)客戶端是一個簡單的用來接收來自表單的信息并將其傳送到服務(wù)器的Servlet。為了完成上述任務(wù),這個Servlet必須既繼承HttpServlet又繼承MessageClient。由于Java不允許這種繼承行為,我讓主類繼承HttpServlet,讓主類中的內(nèi)部類繼承MessageClient,然后外部類創(chuàng)建了內(nèi)部類的一個實例。代碼如下: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);???????}????}}?