Javaweb之response之刷新与重定向

Javaweb之刷新与重定向

Java_web中的response的刷新问题

第一种也是以后最常用的刷新,使用上下文转发的方式;

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

Stringmessage="<metahttp-equiv='refresh'content='3;url=/responseFile/index.jsp'>登陆成功,3秒后自动跳转,如果失败请点击<ahref=''>超链接</a>";

this.getServletContext().setAttribute("message",message);

this.getServletContext().getRequestDispatcher("/message.jsp").forward(request,response);

}

privatevoidtest2(HttpServletResponseresponse)throwsIOException{

response.setContentType("text/html;charset=UTF-8");

response.setHeader("refresh","3;url=/responseFile/index.jsp");

response.getWriter().write("登陆成功,3秒后自动跳转,如果失败请点击<ahref=''>超链接</a>");

}

privatevoidtest1(HttpServletResponseresponse){

response.setHeader("refresh","3;url=http://www.sina.com");

}

通过response实现请求重定向。

请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

应用场景:用户登陆。

实现方式

response.sendRedirect()

实现原理:

302状态码和location头即可实现重定向

getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStreamPrintwriter对象。

getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。

Servlet程序向ServletOutputStreamPrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。

Serlvet的service方法结束后,Servlet引擎将检查getWritergetOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象

转发和重定向的区别

重定向response.sendRedirect("success.jsp");

转发:request.getRequestDispatcher("success.jsp").forward(request,response);

1、.转发在服务器端完成的;重定向是在客户端完成的

2.转发的速度快;重定向速度慢

3..转发的是同一次请求;重定向是两次不同请求

4..转发不会执行转发后的代码;重定向会执行重定向之后的代码

5.转发地址栏没有变化;重定向地址栏有变化

6..转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

response.getWriter().write("aaaaaaa");

/*response.setStatus(302);

response.setHeader("location","/servletdemo/index.jsp");*/

response.sendRedirect("/servletdemo/index.jsp");

### Java Web 中请求重定向的实现方式 在 Java Web 开发中,请求重定向是一种常见的机制,用于通知客户端访问其他资源。这种方式通常通过 `HttpServletResponse` 对象中的方法来实现。 #### 使用 `sendRedirect()` 方法 最常用的实现方式是调用 `HttpServletResponse` 的 `sendRedirect(String url)` 方法。此方法会向客户端发送一个状态码为 302 的 HTTP 响应,并附带目标 URL 地址作为响应头部的一部分。以下是具体示例: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置编码格式 response.setContentType("text/html;charset=UTF-8"); // 执行重定向操作 response.sendRedirect("/login.jsp"); // 将用户重定向至 login.jsp 页面 } ``` 上述代码片段展示了如何将用户的请求从当前页面重定向到 `/login.jsp` 页面[^4]。 #### 利用状态码和 Location 头部手动设置 除了直接使用 `sendRedirect()` 方法外,还可以手动设置 HTTP 状态码以及 `Location` 响应头字段来进行重定向。这种方法更加底层,适用于某些特殊场景下的自定义需求。 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置编码格式 response.setContentType("text/html;charset=UTF-8"); // 手动配置HTTP状态码位置信息 response.setStatus(HttpServletResponse.SC_FOUND); // 或者写作302 response.setHeader("Location", "/targetPage.jsp"); // 定义跳转的目标地址 } ``` 这里设置了 HTTP 状态码为 302 (`SC_FOUND`) 并指定了新的目标路径 `/targetPage.jsp`。 --- ### 请求重定向的特点 需要注意的是,相比于 **请求转发**(Request Forwarding),请求重定向具有以下几个显著特点: 1. 请求重定向会导致浏览器发起一个新的请求; 2. 浏览器地址栏显示的内容会发生变化; 3. 整个过程涉及两次网络交互:第一次是从原始服务器返回给客户端;第二次是由客户端再次发出的新请求到达最终目的地[^2]。 这些特性决定了其适合应用于跨域跳转或者需要完全刷新视图的情况下,比如用户成功登录后被引导至首页等业务逻辑处理完毕后的界面切换场合。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值