转发与重定向的区别

本文深入解析了RequestDispatcher.forward()与HttpServletResponse.sendRedirect()两种HTTP响应操作的区别,包括它们的工作原理、应用场景以及如何在实际开发中正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

estDispatcher () response.sendRedirect() 的区别
1 .request.getRequestDispatcher () 是请求转发,前后页面共享一个 request ;
response.sendRedirect()
是重新定向,前后页面不是一个 request

2 .RequestDispatcher.forward()
是在服务器端运行 ;
HttpServletResponse.sendRedirect()
是通过向客户浏览器发送命令来完成 .
所以 RequestDispatcher.forward() 对于浏览器来说是 透明的
HttpServletResponse.sendRedirect() 则不是。

 public interface RequestDispatcher;
定义一个对象,从客户端接收请求,然后将它发给服务器的可用资源(例如 Servlet
CGI
HTML 文件、 JSP 文件)。 Servlet 引擎创建 request dispatcher 对象,用于封装由一
个特定的 URL 定义的服务器资源。
这个接口是专用于封装 Servlet 的,但是一个 Servlet 引擎可以创建 request dispatcher
对象用于封装任何类型的资源。
request dispatcher
对象是由 Servlet 引擎建立的,而不是由 Servlet 开发者建立的。
方法
1
forward
public void forward(ServletRequest request, ServletReponse response)
throws ServletException, IOException;
被用来从这个 Servlet 向其它服务器资源传递请求。当一个 Servlet 对响应作了初步的处
理,并要求其它的对象对此作出响应时,可以使用这个方法。
request 对象被传递到目标对象时,请求的 URL 路径和其他路径参数会被调整为反映
目标对象的目标 URL 路径。
如果已经通过响应返回了一个 ServletOutputStream 对象或 PrintWriter 对象,这个方法
将不能使用,否则,这个方法会抛出一个 IllegalStateException

6
sendRedirect
public void sendRedirect(String location) throws IOException;
使用给定的路径,给客户端发出一个临时转向的响应( SC_MOVED_TEMPORARILY )。
给定的路径必须是绝对 URL 。相对 URL 将不能被接收,会抛出一个
IllegalArgumentException

这个方法必须在响应被提交之前调用。调用这个方法后,响应立即被提交。在调用这个
方法后, Servlet 不会再有更多的输出。

相关链接:
http://diegoball.javaeye.com/blog/248722
handawei.javaeye.com/blog/554002

 

 

 

 

使用 java URLEncoder 对中文进行转码处理

java 中要对 js 传递的 unicode 或者 uft-8 编码的参数进行解 ,java 中的 URLEncoder 类可以解决找个问题

java
代码 :
    /**
中文转码为 utf-8 */
public static String getUtf8Str(String s) {
String ret = null;
try {
ret = java.net.URLEncoder.encode(s, "utf-8");
} catch (UnsupportedEncodingException ex) {
}
return ret;
}

/** utf-8
码转为中文 */
public static String getStrUtf8(String s) {
String ret = null;
try {
ret = java.net.URLDecoder.decode(s, "utf-8");
} catch (UnsupportedEncodingException ex) {
}
return ret;
}


页面的 js 对中文进行编码 :

var temp = encodeURI(param); 

相关链接 : www.java3z.com/cwbwebhome/article/article2/2414.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值