`
caiying0504
  • 浏览: 341558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于js的encodeURI和java的URLDecoder

阅读更多
根据项目的需要写了一个加密的标签,代码如下:
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>&gt;&gt;<a href="#"><strong>共享度量</strong></a>&gt;&gt;度量列表</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" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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");来解密。

这个可以解决传递中文参数乱码问题。
分享到:
评论

相关推荐

    JS的encodeURI和java的URLDecoder.decode使用介绍

    如果不想在url中看到有明文,比如http://localhost:8080/template_1/login.action?user=张三 可以使用js的encodeURI的URLDecoder.decode一起使用一起来把url加密下 (1)JS在页面上把数据var val = encodeURI...

    JS的encodeURI和java的URLDecoder.decode使用介绍.docx

    ### JS的encodeURI和Java的URLDecoder.decode使用详解 #### 一、背景介绍 在网络通信过程中,URL(统一资源定位符)作为传输信息的一种常见方式,其安全性与隐私性问题一直备受关注。为了提高URL的安全性和隐私性,...

    javaScript encodeURI中文乱码

    ### JavaScript encodeURI中文乱码问题解析与解决方案 在Web开发中,处理中文字符或其它非...通过以上措施,可以有效解决JavaScript中`encodeURI()`处理中文字符时的乱码问题,确保数据在Web应用中的正确传输和显示。

    RSA,JS加密java解密

    很简单,一看就懂,用不明白可以留言,看到必回!如果加密中文js里加密之前encodeURIComponent编码一下,java用java.net.URLDecoder.decode(outputStr, "UTF-8");解码

    java中文乱码之解决URL中文乱码问题的方法

    - Java标准库提供了`java.net.URLDecoder` 和 `java.net.URLEncoder` 类,可以用于编码和解码URL。在某些场景下,它们可能比直接操作字符串更安全和方便。 总之,解决Java中的URL中文乱码问题需要理解URL编码的...

    java 中类似js encodeURIComponent 函数的实现案例

    然而,通过组合Java的`URLEncoder`和`URLDecoder`类,我们可以创建一个兼容的实现。下面将详细讨论如何实现这一功能,以及`encodeURIComponent`和`decodeURIComponent`方法的工作原理。 `encodeURIComponent`函数的...

    URL传中文参数导致乱码的解决方案之encodeURI

    `encodeURI`函数是JavaScript提供的一个内置方法,它的作用是对整个URL进行编码,包括特殊字符,但保留某些URL的保留字符,如冒号、斜线和问号。这个方法不会对ASCII字母和数字进行编码,也不会对以下字符进行编码:...

    javascript中encodeURI和decodeURI方法使用介绍

    一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来。encodeURI方法...

    jsurl传值java页面url传值中文编码&amp;amp;amp;解码共2页

    在JavaScript和Java中,处理URL参数,特别是涉及到中文字符时,需要特别关注编码和解码的问题。本主题将深入探讨“jsurl传值”与“java页面url传值中文编码&解码”的相关知识点。 首先,我们要了解URL编码。URL编码...

    java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

    JavaScript中也有类似的函数,如 `escape()`、`encodeURI()` 和 `encodeURIComponent()`。其中,`encodeURIComponent()` 与Java的 `URLEncoder.encode()` 类似,适用于大多数情况,因为它不会编码 `/`、`:`、`;`、`?...

    Java Http请求传json数据乱码问题的解决

    在JavaScript中,确保使用UTF-8编码序列化JSON对象,在Java服务端,使用`URLDecoder.decode`方法以正确的字符集解码请求参数。在必要时,可以通过前端的URL编码或Base64加密,后端的解码来进一步保证数据传输的准确...

    url传值异常java.io.CharConversionException: isHexDigit

    在Java中,使用`java.net.URLDecoder.decode`方法来完成这一过程。在例子中,使用了"UTF-8"作为解码的字符集,确保与前端编码时使用的字符集一致。 ```java String name = request.getParameter("name"); name = ...

    java中文乱码

    在浏览器端对要传递的中文参数进行编码处理可以使用 encodeURI 函数,对服务器端传递的中文参数进行解码可以使用 URLDecoder.decode 函数。在服务器端代码中,需要确保 jsp 页面的编码方式为 utf-8。 二、JSP 与...

    java认证_Ajax中文乱码问题及解决方法.doc

    【Java认证】Ajax中文...总的来说,解决Ajax中文乱码问题通常涉及到前端编码和后端解码的配合,而C++和Java的设计差异反映了它们在语言特性和目标应用上的不同考量。开发者需要根据项目需求和自身技能选择合适的工具。

    jsp中URL传递中文参数的处理方法

    在页面的url中使用encodeURI(encodeURI(中文)),对中文进行编码,并在服务器的java程序中使用URLDecoder.decode(中文, “UTF-8”)进行解码即可; 如果url中需要传递+、#、?等特殊符号,可以使用encodeURIComponent...

    从js向Action传中文参数出现乱码问题的解决方法.docx

    以下是一些关于如何解决从JS向Action传中文参数出现乱码问题的详细方法和注意事项: 首先,确保整个项目的编码一致性是至关重要的。在项目配置中,包括HTML、JSP、CSS、Java、XML等文件,都应统一采用UTF-8编码格式...

    js传参乱码解决(亲测可行)

    本文提供的方案是在前端使用`encodeURI()`函数对参数进行编码,在后端使用`URLDecoder.decode()`方法进行解码。 #### 三、具体实现步骤 ##### 1. 前端编码处理 在前端页面中,当需要发送含有中文等特殊字符的参数...

Global site tag (gtag.js) - Google Analytics