关于URL转码问题

关于URL转码问题最近遇到这么一个问题 一个是查询乱码 16 进制字符串 另外一个是 URL 传参需要对参数转码 因为传的参数是一串中文字符 所以需要处理 前台转码倒是方便 一种情景是直接在请求发送触发的事件里面直接转码 然后跳到后台里面 然后在 action 里面再转码一次 在这个过程中遇到一个问题如代码所示 前台代码 document ready function 初始化查询 nbsp nbsp nbsp nbsp i

最近遇到这么一个问题,一个是查询乱码(16进制字符串),另外一个是URL传参需要对参数转码,因为传的参数是一串中文字符,所以需要处理。前台转码倒是方便,一种情景是直接在请求发送触发的事件里面直接转码,然后跳到后台里面,然后在action里面再转码一次。在这个过程中遇到一个问题如代码所示,

前台代码:

 

           

         

                           

                           

             

                      

           

                      

          id=”leaderId” name=”model.leaderId” οnchange=”changeLeaderName(this)” />

         


                            style=”width=100%” class=”search” title=”” value=”${model.activityTitle}”>
             

                            style=”width=100%” class=”search” title=”” value=”${model.activityContent}”>
             

             

 

后台代码:

action 中

leaderNameList=dictservice.getItemsByDictValue(“FGJTLD”);//获取字典项

manager中:

  public Page

getPageList(Page

page,ToaLeaderAct model)throws SystemException,ServiceException{


     try{

       //查询参数获取
       String leaderName=model.getLeaderName()==null?””:model.getLeaderName();
       String activityTitle=model.getActivityTitle()==null?””:model.getActivityTitle();
       String activityContent=model.getActivityContent()==null?””:model.getActivityContent();
       
       
       StringBuffer hql=new StringBuffer();
       hql.append(“from ToaLeaderAct t where 1=1”);
       //站位符参数数组集合
       List paramList = new ArrayList();
         if(!””.equals(leaderName)) { 
           leaderName=java.net.URLDecoder.decode(leaderName);
        hql.append(” and t.leaderName = ? “);
        paramList.add(leaderName);
       }
       if(!””.equals(activityTitle)) { 
       activityTitle=java.net.URLDecoder.decode(activityTitle);



















后来使劲调试还是发现在Linux系统中转码问题无法实现(Windows环境正常),前台转码有效,后台失效了。查询不出来东西,于是去掉了manager中的转码,在action中转码

如图所示:

关于URL转码问题

之后才有效。之前Linux环境下一直都是16进制码,Windows环境下不转码也是正常的。

情景二:ajax传参的过程中

“);   if(leaderNameList!=null&&leaderNameList.size()>0){
   innerHtml.append(”

“);    for(int i=0;i<(leaderNameList.size());i++){     String leader=leaderNameList.get(i).getDictItemName();     innerHtml.append(”

“);     if(i%3==2){
     innerHtml.append(”

“);     }    }    innerHtml.append(”

“);    innerHtml.append(”

    .append(leader).append(“‘,’活动’);\”>”)
     .append(leader)
     .append(“

“);
  }
  getResponse().getWriter().write(innerHtml.toString());
  return null;
  
  
 }

由于框架中使用的都是在后台中拼接HTML语句,有一个很麻烦的地方leadername那个参数是中文,而URL中不能存在中文,所以需要转码。但是这种不能像之前那样前台转一次,后台转一次,因为框架中MVC没明显体现出来,拼接的HTML语句转码太繁琐了,于是加了两句话就实现了,

 getResponse().setContentType(“text/html;charset=UTF-8”);

注意这个地方不能再调用list方法了,因为list方法里面转码了一次,所以必须方法重写,可能确实有点麻烦,这种方式有点笨拙,但是结果还是实现了。





























版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223650.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:43
下一篇 2026年3月17日 下午1:43


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号