重定向(response.sendRedirect)乱码 和 HTTP response code: 400 for URL问题

关键字:

1.重定向(response.sendRedirect)乱码;

2.HTTP response code: 400 for URL;

3.java.net.URLEncoder.encode();

 

 

问题:

1.

  response.sendRedirect("/xxx.do?message=AAA");

  在xxxAction中:

  如果,AAA是英文,则可以正常通过request.getParameter("message")获得信息;

  如果,AAA是中文,则无法通过request.getParameter("message")获得信息(要么乱码要么根本获得不到);

 

2.

 通过如下代码方法,时而无法正常获得返回信息(尤其url参数信息带有空格字符如&buytime=2010-10-12 23:59:59):

 

 

 出现异常:

 

解决方法:

        上述2个问题,均通过java.net.URLEncoder.encode()给Url中的参数进行编码解决(注意:不是进行整个url编码,否认会破坏整个Url)。如:test("http://xxx.com/xxx.do?"+ java.net.URLEncoder.encode("m=中文&b=....","utf-8"))

    

### 重定向至登录页面的概念及其实现方式 #### 概念说明 重定向是一种常见的Web技术,用于将用户的请求从一个URL引导到另一个URL。在安全场景中,当用户尝试访问受保护资源时,如果没有经过身份验证,则会被重定向到登录页面。这种机制确保只有合法用户才能访问主页面的功能。 为了防止未授权访问,开发者通常会在服务器端设置逻辑来判断当前用户是否已登录。如果检测到用户尚未登录,则返回HTTP状态码302(临时重定向)并附带目标地址(通常是登录页)。浏览器接收到此响应后会自动跳转到指定的URL[^1]。 --- #### 实现方式 ##### HTTP头中的Location字段 重定向的核心在于修改HTTP协议头部的信息,在服务端向客户端发送带有`Location`字段的响应报文。具体来说: - 当用户发起对某个受限资源的请求时,服务器检查其认证状态; - 如果发现缺少有效凭证(如session或token),则构建一条新的HTTP响应消息,其中包含如下内容: - **Status Code**: `302 Found` - **Header Field**: `Location: /login` 一旦浏览器解析到上述信息,便会立即停止处理原始请求,并按照新提供的URI重新提交GET请求[^2]。 以下是简单的Java Servlet代码片段演示如何执行程序化控制下的重定向操作: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置编码格式以避免乱码问题 response.setContentType("text/html;charset=UTF-8"); // 判断条件 (此处仅为示意) boolean isLoggedIn = false; if (!isLoggedIn){ String loginUrl = "/login"; response.sendRedirect(loginUrl); // 执行实际的跳转动作 }else{ PrintWriter out = response.getWriter(); out.println("<h1>欢迎来到主页</h1>"); } } ``` 上面的例子展示了基于Servlet API调用sendRedirect()方法完成整个流程的方式;值得注意的是,这里传入路径既可以是相对形式也可以是完整的外部站点链接[^3]。 另外一种情况涉及到跨域或者第三方应用间协作的时候(比如社交账号快捷绑定),往往还需要额外考虑OAuth等相关标准的支持[^4]。 --- #### 工作原理总结 总体而言,重定向的工作机理依赖于标准化网络通信协定——即超文本传输协议(HTTP/HTTPS)-所定义的行为模式。每当遇到特定类型的应答信号时,代理设备就会遵循既定规则采取相应措施直至最终抵达目的地为止。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值