关于js的encodeURI和java的URLDecoder

本文介绍了一种自定义的JSP标签库实现,用于处理URL编码,特别针对中文参数的乱码问题。通过创建一个名为encrypt的标签,能够有效地加密传递的参数,并在后台进行解密。
根据项目的需要写了一个加密的标签,代码如下:
encrypt.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<uri>/encrypt-tags</uri>

<tag>
<name>encrypt</name>
<tag-class>com.ctitc.analysis.util.Encrypt</tag-class>
<attribute>
<name>encryptValue</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<body-content>empty</body-content>
</tag>

</taglib>



下面是java部分
Encrypt.java

package com.ctitc.analysis.util;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

@SuppressWarnings("serial")
public class Encrypt extends SimpleTagSupport {
private String encryptValue;

public void doTag() throws JspException {
// TODO Auto-generated method stub
try {
encryptValue = java.net.URLEncoder.encode(encryptValue,"UTF-8");
getJspContext().getOut().write(encryptValue);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public String getEncryptValue() {
return encryptValue;
}

public void setEncryptValue(String encryptValue) {
this.encryptValue = encryptValue;
}


}



下面是jsp部分

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib prefix="e" uri="/encrypt-tags" %>
<HTML>
<HEAD>
<title>main</title>
<base href="<%=basePath%>">
<style type="text/css">
   <!--
   a:link { text-decoration: none;color: blue}
   a:active { text-decoration:blink}
   a:hover { text-decoration:underline;color: red}
   a:visited { text-decoration: none;color: green}

body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #E6F4FF;
}
   -->
.STYLE1 {font-size: 10pt}
</style>
<link href="styles/sty.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function DoCheckAll(){
var chkItemArray = document.getElementsByName("chkItem");
var chkallstatus = document.getElementById("chkall").checked;
for(var i=0;i<chkItemArray.length;i++){
chkItemArray[i].checked = chkallstatus;
}
}
function deleteItem(cubeName){
var chkItemArray = document.getElementsByName("chkItem");
var result = "";
for(var i=0;i<chkItemArray.length;i++){
if(chkItemArray[i].checked){
if(result == ""){
result += chkItemArray[i].id;
}else{
result += ","+chkItemArray[i].id;
}
}
}
if(result == ""){
alert("请选择您要删除的记录!");
}else{
result = encodeURI(result);
document.location.href="measuresharedelete.action?fileName=${fileName }&measureName="+result+"&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt>";
}
}
</script>
</HEAD>
<body bgcolor="#eeeeee" topmargin="0" leftmargin="0" rightmargin="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25" align="center" bgcolor="#AFDFFE">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="59%">用户 <strong>sys</strong> 您现在的位置是: <a href="#"><strong>规费主题分析</strong></a>>><a href="#"><strong>共享度量</strong></a>>>度量列表</td>
<td width="41%" align="right">搜索内容:
<input name="textfield2" type="text" style="height=18" size="15"> <a href="#"><img src="images/tb_soso.gif" width="15" height="15" border="0"></a></td>
</tr>
</table>
</td>
</tr>
</table>
<br/>

<table width="97%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#8C9FEB">
<tr bgcolor="#D4ECF8">
<td colspan="7"><div align="left"><strong>共享度量</strong></div>
<div align="left">
<a href="measureshare.action?fileName=${fileName }&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt> " ><img src="images/btn_zj.jpg" border="0"></a>
<a href="javascript:if(confirm('确认要删除选定的记录?'))deleteItem();"><img src="images/btn_sc.jpg" border="0"></a>
</div></td>
</tr>
<tr align="center" bgcolor="#91C6FC">
<td>全选<input type="checkbox" name="chkall" value="checkbox" onclick="DoCheckAll()"></td>
<td><div align="center"><strong>度量名称</strong></div></td>
<td><div align="center"><strong>度量列</strong></div></td>
<td><div align="center"><strong>度量描述</strong></div></td>
<td><div align="center"><strong>聚合</strong></div></td>
<td><strong>字符串格式</strong></td>
<td><div align="center"><strong>操作</strong></div></td>
</tr>
<s:iterator value="shareMeasureList">
<tr align="center" bgcolor="#FFFFFF">
<td bgcolor="#D4ECF8" >      <input type="checkbox" id="${measureName }" name="chkItem" value="checkbox"></td>
<td><div align="center">${measureName }</div></td>
<td><div align="center">${column }</div></td>
<td><div align="center">
<div align="center">${caption }</div>
</div></td>
<td><div align="center">${aggregator }</div></td>
<td><div align="center">${formatString }</div></td>
<td><div align="center"><a href="measureshareinfo.action?measureName=<e:encrypt encryptValue='${measureName }'></e:encrypt>&fileName=${fileName }&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt>">修改</a></div></td>
</tr>
</s:iterator>
</table>
</body>
</HTML>



在js中标签无法将"<e:encrypt encryptValue='"+result +"'></e:encrypt>"
这种加密,因为里面有特殊字符。所有用result = encodeURI(result);来加密。
后台解析统一用java.net.URLDecoder.decode(result , "UTF-8");来解密。

这个可以解决传递中文参数乱码问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值