服务器端向Android客户端传值——登录实现(二)

来源:互联网 发布:淘宝哪家的铁观音好 编辑:程序博客网 时间:2024/05/21 12:32

上次已经完成了Android客户端向服务器端传值的功能,接下来的任务是服务器端通过连接数据库对传来的值进行判定,并将判定结果返回客户端。

对传来的数值进行判定的处理过程与web开发相同,比较简单。重点是将判定结果返回客户端的实现:

Servlet部分重点代码:

[java] view plaincopy
  1. /** 
  2.  * 功能:验证手机用户登录 
  3.  */  
  4. public void androidCheckUser(HttpServletRequest request,  
  5.         HttpServletResponse response) throws ServletException, IOException {  
  6. PrintWriter out = response.getWriter();  
  7. String userName=request.getParameter("userName");  
  8. String passWord=request.getParameter("passWord");  
  9. //在服务器端解决中文乱码问题   
  10. userName=NewString.getNewString(userName);  
  11. passWord=NewString.getNewString(passWord);  
  12. System.out.println("账号:"+userName);  
  13. System.out.println("密码:"+passWord);   
  14. //调用dao   
  15. UserDao uDao=new UserDao();  
  16. if(uDao.checkUser(userName, passWord))  
  17. {   //得到登录用户的权限类型   
  18.     String type=uDao.getType(userName);  
  19.     if(type.equals("高级")){  
  20.         request.setAttribute("result","high");  
  21.         request.getRequestDispatcher("login.jsp").forward(request, response);  
  22.     }else if(type.equals("普通")){  
  23.         request.setAttribute("result","common");  
  24.         request.getRequestDispatcher("login.jsp").forward(request, response);  
  25.     }else if(type.equals("超级")){  
  26.         request.setAttribute("result","super");   
  27.         request.getRequestDispatcher("login.jsp").forward(request, response);  
  28.     }  
  29. }else  
  30. {  
  31.     request.setAttribute("result","false");  
  32.     request.getRequestDispatcher("login.jsp").forward(request, response);  

  1. }  
  2. 如上所示,Servlet调用Dao进行判定,将判定标识写入XML格式的JSP页面中。

    JSP页面结构:

    [java] view plaincopy
    1. <%@ page language="java" import="java.util.*" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><?xml version="1.0" encoding="UTF-8"?>  
    2. <%String result=(String)request.getAttribute("result");%>  
    3. <result>  
    4. <flag><%=result%></flag>  
    5. </result>  

    Android客户端解析XML格式的JSP页面,得到服务器端传来的判定结果,根据结果弹出提示框。

    [java] view plaincopy
    1. /** 
    2.      * 验证用户登录是否合法 
    3.      * 返回值:服务器端判断的标识 
    4.      */  
    5.     public static String check(String name, String pass) throws XmlPullParserException, MalformedURLException, IOException {  
    6.         String path="http://135.32.89.17:8080/lss/UserServlet?flag=androidCheck";  
    7.         //将用户名和密码放入HashMap中   
    8.         Map<String,String> params=new HashMap<String,String>();  
    9.         params.put("userName", name);  
    10.         params.put("passWord", pass);     
    11.         String checkr=uMethod.checkUser(path,params,"UTF-8");  
    12.         System.out.println("check"+checkr);  
    13.         return checkr;        
    14.     }  
    1. public String checkUser(String path,  
    2.             Map<String, String> params,String encode) throws MalformedURLException, IOException, XmlPullParserException {  
    3.             StringBuilder url=new StringBuilder(path);  
    4.             url.append("&");  
    5.             for(Map.Entry<String, String> entry:params.entrySet())  
    6.             {  
    7.                 url.append(entry.getKey()).append("=");  
    8.                 url.append(URLEncoder.encode(entry.getValue(),encode));  
    9.                 url.append("&");  
    10.             }  
    11.             //删掉最后一个&   
    12.             url.deleteCharAt(url.length()-1);  
    13.             HttpURLConnection conn=(HttpURLConnection)new URL(url.toString()).openConnection();  
    14.             conn.setConnectTimeout(5000);  
    15.             conn.setRequestMethod("GET");  
    16.             if(conn.getResponseCode()==200)  
    17.              {  
    18.                InputStream inputStream=conn.getInputStream();   
    19.                System.out.println("准备解析!");  
    20.                String s=parseXML(inputStream);  
    21.                System.out.println("准备解析!"+s);  
    22.               //将得到的XML内容的解析   
    23.                if(s.equals("high")){  //权限为高级用户   
    24.                    return "high";  
    25.                }else if(s.equals("common")){  //权限为普通用户   
    26.                    return "common";  
    27.                }else if(s.equals("super")){   //权限为超级用户   
    28.                    return "super";  
    29.                }else if(s.equals("false")){   //权限为超级用户   
    30.                    return "false";  
    31.                }  
    32.              }  
    33.                return "false";  
    34.              }  
    35.         /** 
    36.          * 解析服务器端返回的XML  
    37.          */  
    38.         public  String parseXML(InputStream inputStream) throws XmlPullParserException, IOException {  
    39.             XmlPullParser parser=Xml.newPullParser();  
    40.             parser.setInput(inputStream,"UTF-8");  
    41.             String result=null;  
    42.             //得到开始文档事件   
    43.             int event=parser.getEventType();  
    44.             while(event!=XmlPullParser.END_DOCUMENT)  
    45.             {  
    46.               switch(event)  
    47.               {  
    48.                 case XmlPullParser.START_TAG:  
    49.                   if("flag".equals(parser.getName()))  
    50.                   {  
    51.                       result=parser.nextText();  
    52.                       System.out.println("flag"+result);  
    53.                   }  
    54.                  break;  
    55.     //一定要加,不然报错Caused by: org.xmlpull.v1.XmlPullParserException: Premature end of document.   
    56.                 case XmlPullParser.END_TAG:       
    57.                     break;  
    58.                }  
    59.                 event = parser.next();  
    60.             }         
    61.             return result;  
    62.         }  

  3. 运行效果:

     


  4. 总结:

    服务器端将所传值写入XML格式的JSP页面中,Android对XML进行解析,得到标识值


0 0
原创粉丝点击