Response重定向

文章详细阐述了在Web开发中,Servlet如何处理重定向和转发。重定向是一种客户端跳转,URL会发生变化,而转发则在服务器端完成,URL保持不变。示例代码展示了如何在Servlet中实现重定向到内部资源。此外,还提到了表单验证和参数获取的过程。

目录

 面试题:重定向与转发的区别

表单验证和获取参数

index.jsp

success.jsp


 

B 一个web资源收到客户端A请求后,B他会通知客户端A去访问另外一个web资源C ,这个过程叫重定向,

URL会变

requset请求的是转发,URL不变

常见场景:

这个方法是重定向 

package com.kuang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("/r/img");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

 

 面试题:重定向与转发的区别

重定向:  别找我  转发:  我帮你去拿

相同点:页面都会实现跳转

不同点:

重定向:url会变

转发:url不会变

 总结:1.转发是一次请求,重定向是两次2.转发不会改变url,重定向会改变3.请求转发是在服务器内部完成的,而重定向是在客户端完成的4.转发的url必须是当前web工程内部的地址,重定向可以是任意地址

index.jsp

<html>
<body>
<h2>Hello World!</h2>
<%--这里提交的路径,需要寻找到项目下的路径--%>
<%--${pageContext.request.contextPath}代表请求当前的项目--%>
    <form action="${pageContext.request.contextPath}/login" method="get">
        用户名: <input type="text" name="username"><br>
        密码: <input type="password" name="password"><br>
        <input type="submit">

    </form>


</body>
</html>

表单验证和获取参数

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<%--这里提交的路径,需要寻找到项目下的路径--%>
<%--${pageContext.request.contextPath}代表请求当前的项目--%>
    <form action="${pageContext.request.contextPath}/login" method="get">
        用户名: <input type="text" name="username"><br>
        密码: <input type="password" name="password"><br>
        <input type="submit">

    </form>


</body>
</html>

success.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>
package com.kuang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        resp.sendRedirect("/r/success.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 

### 实现HTTP响应重定向 在Web应用程序中,实现HTTP响应重定向通常涉及向客户端发送特定的状态码以及目标URL。最常用的方法之一是通过`sendRedirect()`函数来简化这一过程[^1]。 对于Java Servlet环境下的应用而言,可以采用如下方式执行重定向操作: ```java response.sendRedirect("http://example.com/newpage"); ``` 此段代码会自动设置相应的HTTP头信息并告知浏览器前往指定的新页面地址。值得注意的是,在调用该方法时需要手动设定其他头部字段或状态码,因为这些都将由框架内部处理完毕。 而在Go语言编写的网络服务程序里,则可以通过标准库中的`net/http`包来进行类似的控制流转向动作。下面给出一段简单的例子用于说明如何基于请求路径的同做出条件性的跳转决策: ```go package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { http.Redirect(w, r, "/newpath", http.StatusMovedPermanently) } else { fmt.Fprintf(w, "This is not the page you're looking for.") } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } ``` 上述实例展示了当访问根目录(`/`)时触发永久性移动(301 Moved Permanently)[^3]到另一个位置(`/newpath`)的过程;如果是根目录则保持原样显示提示文字。 关于iOS平台上的开发实践提到过有关于URL加载系统的特性,即一旦发生重定向行为之后原来的请求对象就会再为空值(null),而是保存着最初发起那次重定位请求的相关数据结构体[^2]。过这部分内容更侧重于描述客户端接收到服务器发出的重定向指令后的表现形式而非具体的服务端编程技术细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值