精华内容
下载资源
问答
  • encodeURL
    2017-05-04 18:10:11

    .encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码。.

    UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.

    假设页面端输入的中文是一个“中”,按照下面步骤进行解码:

    1、第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD]  此时已经没有了多字节字符,全部是单字节字符。

    2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数,应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法。

    3、再用UTF-8解码一次,就得到中了。想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。

     

    更多相关内容
  • 可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。 eg: String str=response.encodeURL(“hope.jsp”); //使用在jsp页面中。 连接目标写成:即可。 encodeURL()是本应用级别的,...

    session对象能和客户建立意义对应的关系依赖于客户的浏览器是否支持cookie,如果客户的浏览器不支持的话,那么客户再不同网页之间的session对象可能时互不相同的,因为服务器无法将ID存放到客户端,就不能建立session对象和客户的一一对应关系。可以通过URL重写来实现session对象的唯一性。所谓URL重写就是当客户从一个页面重新连接到一个页面时,通过向这个新的URL添加参数,把session对象的id传过去,这样能够保证session对象是完全相同的。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。

    eg:

    String str=response.encodeURL(“hope.jsp”); //使用在jsp页面中。

    连接目标写成:<%=str%>即可。

    encodeURL()是本应用级别的,encodeRedirectURL()是跨应用的。

    两者的区别:

    在使用重定向时,response.sendRedirect(response.encodeRedirectURL(***));时一定要使用encodeRedirectUrl();

    由于附加在URL中的session ID是动态产生的,对每一个用户是不同的,所以对于静态页面的相互跳转,URL重写机制无能为力。当然可以通过将静态页面转换为动态页面解决。

    方法的执行:首先判断当前的Servlet是否执行了HttpSession对象的invalidate()方法(当前session是否失效,失效后重新建立新的session),如果已经执行返回参数URL。接下来判断客户端是否禁用了Cookie,没有禁用直接返回参数URL,如果禁用,则在参数URL中附加session ID,返回编码后的URL。

    转载:
    https://blog.csdn.net/u010327174/article/details/36663753

    展开全文
  • 文章目录1 方法目的1.1 浏览器不支持cookies时,实现保持session2 背景知识2.1 session的保持2.2 浏览通过cookies实现保持session2.3 浏览器禁用cookies后,无法通过cookies保持session3 response.encodeURL实现保持...

    1 方法目的

    1.1 浏览器不支持cookies时,实现保持session

    • 当浏览器不支持或者禁用了cookies时,可以通过response.encodeURL保持session

    2 背景知识

    2.1 session的保持

    • 同一个浏览器打开多个窗口时,服务器(说服务端容器更合适,如tomcat)可识别出是同一个用户(同一个游客,不登录的那种)
    • 一般是浏览器通过cookie实现

    2.2 浏览通过cookies实现保持session

    • 1 第一次请求,服务器在response中增加属性Set-Cookie(可以理解为,分配了一个sessionId给浏览器)
    • 在这里插入图片描述

    • 2 浏览器保存sessionId到本地cookies
    • 3 第二次请求(刷新页面),浏览器在请示头中增加cookies属性
    • 在这里插入图片描述
      4 服务器通过cookies属性知道这是同一个session,因为服务器保存了所有的sessionId(重启就清空了)

    2.3 浏览器禁用cookies后,无法通过cookies保持session

    • 因为此时浏览器,无法把服务器返回的sessionId保存下来,
    • 每次请求都无法设cookies, 导致服务器认为每次请求都是一个新的session

    3 response.encodeURL实现保持session

    3.1 方法设计

    • 本质就是为url提供一个sessionId, 请求带着sessionId上来,服务器就能够识别
    • 在这里插入图片描述

    3.2 基本操作流程

    • servlet中, 调用response.encodeURL, 传入当前的url, 返回给页面
    • 页面通过返回的url 发出请求(url上拼上了sessionId信息),服务器即可识别是否为同一个session
    • 在这里插入图片描述

    4 项目实战

    4.1 项目搭建准备

    • 下载tomcat 10 (如果是其它版本,类路径可能有调整)
    • 一个servlet, EncodeServlet.java
    package com.example.web;
    
    import jakarta.servlet.*;
    import jakarta.servlet.http.*;
    import java.io.*;
    
    public class EncodeServlet extends HttpServlet{
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    		
    		HttpSession session = request.getSession();
    		
    		Integer accessNum = (Integer)session.getAttribute("accessNum");
    		if(accessNum == null){
    			accessNum = 0;
    		}else{
    			accessNum++;
    		}
    		
    		session.setAttribute("accessNum",accessNum);
    		
    		response.setContentType("text/html");
    		
    		PrintWriter out = response.getWriter();
    		out.println("<h3>test session atrribute</h3><br/>");
    		out.println("<h4><b>"+accessNum+"</b></h4><br/>");
    		String encodeURL = response.encodeURL("encode.do");
    		out.println("<h4><a href=\""+ encodeURL +"\">click me to add accessNum in session</a></h4><br/>");
    		out.flush();
    	}
    }
    
    • 一个web.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <web-app 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 
    	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    	version="2.4">
    
    	<servlet>
    		<servlet-name>encode Servlet</servlet-name>
    		<servlet-class>EncodeServlet</servlet-class>
    	</servlet>
    	
    	<servlet-mapping>
    		<servlet-name>encode Servlet</servlet-name>
    		<url-pattern>/encode.do</url-pattern>
    	</servlet-mapping>	
    
    </web-app>
    

    4.2 项目运行

    • 解压tomcat10 后,到目录webapps下,创建项目文件夹testEncode

    • 在这里插入图片描述

    • 进入项目目录,创建目录WEB-INF

    • 在这里插入图片描述

    • 将web.xml copy到WEB-INF下

    • 在这里插入图片描述

    • 创建目录 classes

    • 在这里插入图片描述

    • 进入classes, copy文件EncodeServlet.java

    • 在这里插入图片描述

    • 编译java文件

      • 通过cmd进入command窗口
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述 - 输入编译语句,获取class:
        在这里插入图片描述 javac -classpath C:\software\apache-tomcat-10.0.12\lib\servlet-api.jar EncodeServlet.java
        注:根据自己的tomcat路径调整
    • 启动项目:双击startup.bat

    • 在这里插入图片描述

    • 访问项目: http://localhost:8080/testEncode/encode.do

    • 在这里插入图片描述

    4.3 cookies实现保持session

    • 不断刷新页面,次数递增
    • 在这里插入图片描述
      在这里插入图片描述

    4.4 禁用cookies刷新页面

    • 在chrome上禁用cookies

    • 在这里插入图片描述

    • 刷新页面,数据清零,因为是新的session,,每次刷新依然是0,因为每次都是新的session

    • request header没有设置cookies, 服务器只能当成新的session

    • 在这里插入图片描述

    • 重新打开浏览器cookies,刷新页面,获取到之前的值

    • request增加了Header Cookies, 服务器返回了之前的session(tomcat重启会清空session,session可以配置有效期)

    • 在这里插入图片描述

    4.5 禁用cookie后,通过encodeURL实现保持session

    • 禁用cookies后,再次清零
    • 在这里插入图片描述

    • 点击“click me …” 实现保持session
    • 在这里插入图片描述

    展开全文
  • Global对象的encodeURL()和encodeURLComponent()方法可以对URL进行编码。有效的URL中不能包含某些字符串,例如空格。他们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器理解。 encodeURL()主要用于整个URL,而...

    1. URL编码及解码方式

    Global对象的encodeURL()和encodeURLComponent()方法可以对URL进行编码。有效的URL中不能包含某些字符串,例如空格。他们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器理解。
    encodeURL()主要用于整个URL,而encodeURLComponent()主要用于对URL中的某一段。它们的区别在于,encodeURL()不会对本身属性url的特殊字符进行编码,例如“冒号、正斜杠、问号、井号”;而encodeURLComponent()则会对它发现的任何非标准字符进行编码。

      let url = 'https://www.baidu.com/123456789/story'
      let encode = encodeURI(url) 
      let encodeComponent = encodeURIComponent(url)
      console.log(encode) // https://www.baidu.com/123456789/story
      console.log(encodeComponent) // https%3A%2F%2Fwww.baidu.com%2123456789%2Fstory
     let decode = decodeURI(encode) // encode 对应上面的代码
     let decodeComponent = decodeURIComponent(encodeComponent)
     console.log(decode) // https://www.baidu.com/123456789/story
     console.log(decodeComponent) // https://www.baidu.com/123456789/story

    在请求拦截器中使用列子:

     

    展开全文
  • response.encodeURL 详解

    2019-01-23 21:07:56
     把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 来对 URL 进行编码。...
  • encodeurl() & encodeurlComponent()

    千次阅读 2019-09-17 04:01:36
    encodeurl 和 encodeurlComponent都是 Js对 url 编码的函数 区别:          encodeurl 着眼于对整个 url 进行编码, 特殊含义的符号,例如右方这些 ;/ ? : @ & = + $...
  • servlet response的encodeURL

    2017-12-25 14:21:53
    初学servlet,一直没在意HttpServletResponse的encodeURL方法,所以服务器端返回地址的时候一直这么写的 "&lt;form action=\"" + req.getContextPath() + "/\" method=\"...
  • Base64URL.base64EncodeUrl(Arrays.copyOfRange(compressedBytes, 0, compressedBytesLength))) 其中Base64URL刚开始以为是引用的方法类 引用后无果,还是报错后,对比以前的版本发现,此代码应为实现代码 代码...
  • 1. java编码类型基础System.out.println(URLEncoder.encode("齐", "utf-8")); //%E9%BD%90(3字节)System.out.println(URLEncoder.encode("齐", "GB2312")); //%C6%EB (2字节)System.out.println(URLEncoder.enco...
  • struts + ibatis 组成的,作为一个老项目上线已经很久了,而且项目的底层都已经相当完善,为了新增这个模块,页面交互部分做了一段时间的学习,页面传值就用了很多种方法,其中一个页面使用encodeurl()进行跳转...
  • js encodeUrl两次原理

    千次阅读 2018-01-25 23:55:12
    .encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码. . UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号. 假设页面端输入的中文是一个“中”,按照...
  • encodeURL(java.lang.String url)   Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged.  对给定的url,通过加上session ID的方式进行...
  •  HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)   该方法的实现机制为:     ● 先判断当前的 Web 组件是否启用 Session,如果没有启用 ...
  • encodeURL会在末尾加/,这样的话会默认访问tomcat/webapps下面的项目,如果使用response.sendRedirect(url)时,后面是不加/的。 而encodeRedirectURL()只专注添加jsessionId参数,不会对url本...
  • 使用encodeURl()进行编解码

    千次阅读 2017-09-21 18:40:24
    encodeURI() 函数可把字符串作为 URI 进行编码。 在js中要使用两次编码:var name = encodeURI(encodeURI(name));在java中解码:String name = URLDecoder.decode(request.getParameter("name"), ...
  • 如果屏蔽cookie,则System.out.println... System.out.println(resp.encodeURL("test.jsp"));如果不屏蔽cookie,则System.out.println(resp.encodeRedirectURL("test.jsp")); System.out.p...
  • response.encodeURL的用法

    2017-02-14 15:40:56
    HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)  该方法的实现机制为:  ● 先判断当前的 Web 组件是否启用 Session,如果没有启用 Session,直接...
  • response.encodeURL 详解 转载于:https://www.cnblogs.com/YUJIE666/p/10246866.html
  • js为什么需要做两次encodeURL编码?

    千次阅读 2018-08-31 11:02:47
    这个问题的根本原因是服务器会自己做一次解码,且解决的字符集不一定是UTF-8。 对于var url = "b.jsp?name="+u_name; 要想把中文的name传到后台,需要对url进行一次编码,否则是乱码。...
  • js中encodeURL中文解决字符串

    千次阅读 2016-11-26 13:40:04
    js中encodeURL中文解决字符串 encodeURI()与decodeURI()是成对来使用的,浏览器的地址栏有中文或其他英文字符的话,可能会出现不可预期的错误,或者地址栏避免出现中文的话,可以用encodeURI把非英文字符...
  • //*************************creator LayaAir 资源乱码解码 **********************************************// https://tool.oschina.net/encode?type=4 //解码地址,自己百度即可搜索到
  • response.encodeURL 心法

    2013-12-17 11:00:52
     HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)   该方法的实现机制为:   ● 先判断当前的 Web 组件是否启用 Session,如果没有启用 ...
  • encodeURL编码

    2017-04-05 11:06:06
    因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# ...
  • JS:window.location.href = "down.action?filepaths=" + encodeURI(encodeURI(filepaths));WEB:String s = URLDecoder.decode(filepaths, "utf-8");*JS端进行2次编码,之后发给web端进行一次解码就可以了....
  • 从Servlet3.0规范看,这两个方法的功能类似...也就是encodeURL如果进行了编码,则返回的URL一定是完整URL而不是相对路径;而encodeRedirectURL则不对URL本身进行处理,只专注于添加jsessionid参数(如果需要)。
  • encodeURI()对象: 用于对特殊字符进行编码,decodeURI()对象:将特殊字符进行解码,常用于URL地址编码中 <script> var url = '... var urlEncode = encodeURI(url); console.log(urlEncode);...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,113
精华内容 4,445
关键字:

encodeurl