毕业设计4(再会编码问题)

元旦难忘的几天的放松过去咯,重新编织我的毕业论文,以来就遇到了N多问题, 最麻烦的就两个,一个是编码问题,一个就是用户登录管理的问题。
这个编码问题还是老大难问题,之前是在做网页的时候出现乱码的问题,现在是手机客户端传数据的时候发生乱码的问题,现在我对这个问题有了比较深刻的理解了,首先客户端将信息以“client”这种方式进行编码,传到服务器,然后呢,基于jvm的web服务器在处理信息的时候都统一将信息使用ISO-8859-1进行编码,然后你要获取信息的时候也要使用“client”这种编码方式进行读取才能正确读到信息,然而问题就出在,我们很多时候都不知道我们的“client”编码是什么,是utf8?还是gbk?所有就会出现你传信息的时候是使用gbk,而你读取信息的时候用的使用uft8,这样就会乱码了,所以要解决这个问题最重要的就是要知道你到底时候用的是什么编码,但是我这里就有问题了,我并不知道我的手机客户端使用的是什么编码,很郁闷,不过问题总是要人来解决的,我可以在传信息的时候指定传输的编码!
以下就是关键代码:
                        HttpClient httpClient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost("http://192.168.38.43:8080/test/ap;jsessionid="+sid);
BasicNameValuePair nameValuePair=null; //定义要传输的实体
try {
                                //设置实体信息,URLEncoder.encode(ipStr,"gbk")的意思是,将ipStr这个信息使用gbk进行编码
nameValuePair = new BasicNameValuePair("ip",URLEncoder.encode(ipStr,"gbk"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
List<BasicNameValuePair> nameValuePairs=new ArrayList<BasicNameValuePair>();
nameValuePairs.add(nameValuePair);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response= httpClient.execute(httpPost);
然后在服务端,也要使用相应的方式进行读取:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
                //获取信息,URLDecoder.decode(req.getParameter("ip"),"gbk"),就是使用gbk的方式对信息进行读取
String req_ip= URLDecoder.decode(req.getParameter("ip"),"gbk"); 
}
好了,这个问题解决咯。
第二个问题就是登陆管理的问题,这个问题说起来比较抽象,因为我这个应用是有登陆功能的,一旦用户登陆成功之后,他就会进行一些日常操作,比如查询啊,更新啊,删除啊这些,我的服务端也就相应的要提供这些接口给用户使用,我提供的这些接口都是同一的,不管是哪个用户来进行这些操作,都是面对这些接口,怎样区别不同的用户呢?我的接口提供了一个ID属性用于标识哪个用户,比如A用户要进行删除功能,那么他可以使用我提供的服务端接口,给这个服务端接口传递A的ID,和要进行的操作,就能够执行了,但是这样就有很大的漏洞了,如果B用户用也提供A用户的ID,然后进行一些操作就能够修改A用户的数据了,因为我的接口就需要用户ID和具体操作嘛,这样可不行,你要操作A的数据,肯定要验证你是不是A用户,肯定要验证你的用户名和密码,然而,一旦用户登录了你的系统,他会进行很多很多的操作,可能几个也可能几十个也可能几百个,如果每个操作都要进行验证,服务器就会烦死了,那要怎么办呢,这就要使用到服务器的session对象,session就是用户的一次回话中保存的信息,我们可以将用户一次登录到退出这期间看做是一次回话,在这个回话中都会使用一个session,你登录成功后,session就会记录你的用户ID,当你要操作用户信息的时候就会匹配你要操作的这个用户的ID和你session中保存的ID是否是同一个人,如果不是就不会让你操作,这样多好,
我对请求、会话这些概念不大清楚,在这里只知道,要想告诉服务端,用户在登录之后进行的N个请求都是同一个会话,每次都使用同一个session,就要在请求的时候做如下处理:http://localhost:port/test;jsessionid=sessionID,sessionID可以在servlet中用HttpServletRequest.getSession()获取,这样你每次请求都会被当做同一个会话了。
很晚了,明天再写吧

转载于:https://my.oschina.net/LinBandit/blog/39437

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值