您的位置:首页 > 移动开发 > Android开发

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

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

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

Servlet部分重点代码:

[java] view
plaincopy

/**

* 功能:验证手机用户登录

*/

public void androidCheckUser(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

String userName=request.getParameter("userName");

String passWord=request.getParameter("passWord");

//在服务器端解决中文乱码问题

userName=NewString.getNewString(userName);

passWord=NewString.getNewString(passWord);

System.out.println("账号:"+userName);

System.out.println("密码:"+passWord);

//调用dao

UserDao uDao=new UserDao();

if(uDao.checkUser(userName, passWord))

{ //得到登录用户的权限类型

String type=uDao.getType(userName);

if(type.equals("高级")){

request.setAttribute("result","high");

request.getRequestDispatcher("login.jsp").forward(request, response);

}else if(type.equals("普通")){

request.setAttribute("result","common");

request.getRequestDispatcher("login.jsp").forward(request, response);

}else if(type.equals("超级")){

request.setAttribute("result","super");

request.getRequestDispatcher("login.jsp").forward(request, response);

}

}else

{

request.setAttribute("result","false");

request.getRequestDispatcher("login.jsp").forward(request, response);

}

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

JSP页面结构:

[java] view
plaincopy

<%@ page language="java" import="java.util.*" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><?xml version="1.0" encoding="UTF-8"?>

<%String result=(String)request.getAttribute("result");%>

<result>

<flag><%=result%></flag>

</result>

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

[java] view
plaincopy

/**

* 验证用户登录是否合法

* 返回值:服务器端判断的标识

*/

public static String check(String name, String pass) throws XmlPullParserException, MalformedURLException, IOException {

String path="http://135.32.89.17:8080/lss/UserServlet?flag=androidCheck";

//将用户名和密码放入HashMap中

Map<String,String> params=new HashMap<String,String>();

params.put("userName", name);

params.put("passWord", pass);

String checkr=uMethod.checkUser(path,params,"UTF-8");

System.out.println("check"+checkr);

return checkr;

}

public String checkUser(String path,

Map<String, String> params,String encode) throws MalformedURLException, IOException, XmlPullParserException {

StringBuilder url=new StringBuilder(path);

url.append("&");

for(Map.Entry<String, String> entry:params.entrySet())

{

url.append(entry.getKey()).append("=");

url.append(URLEncoder.encode(entry.getValue(),encode));

url.append("&");

}

//删掉最后一个&

url.deleteCharAt(url.length()-1);

HttpURLConnection conn=(HttpURLConnection)new URL(url.toString()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200)

{

InputStream inputStream=conn.getInputStream();

System.out.println("准备解析!");

String s=parseXML(inputStream);

System.out.println("准备解析!"+s);

//将得到的XML内容的解析

if(s.equals("high")){ //权限为高级用户

return "high";

}else if(s.equals("common")){ //权限为普通用户

return "common";

}else if(s.equals("super")){ //权限为超级用户

return "super";

}else if(s.equals("false")){ //权限为超级用户

return "false";

}

}

return "false";

}

/**

* 解析服务器端返回的XML

*/

public String parseXML(InputStream inputStream) throws XmlPullParserException, IOException {

XmlPullParser parser=Xml.newPullParser();

parser.setInput(inputStream,"UTF-8");

String result=null;

//得到开始文档事件

int event=parser.getEventType();

while(event!=XmlPullParser.END_DOCUMENT)

{

switch(event)

{

case XmlPullParser.START_TAG:

if("flag".equals(parser.getName()))

{

result=parser.nextText();

System.out.println("flag"+result);

}

break;

//一定要加,不然报错Caused by: org.xmlpull.v1.XmlPullParserException: Premature end of document.

case XmlPullParser.END_TAG:

break;

}

event = parser.next();

}

return result;

}

运行效果:



总结:

服务器端将所传值写入XML格式的JSP页面中,Android对XML进行解析,得到标识值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: