ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Response应用之重定向的实现★★★★★

2022-05-25 22:34:44  阅读:137  来源: 互联网

标签:http 重定向 resp response 应用 servlet Response 页面


声明

本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明

参考文章链接

(1条消息) B站---【狂神说Java】JavaWeb入门到实战---笔记_夜里的雨的博客-CSDN博客_狂神说java笔记

(3条消息) HTTP 的重定向应用场景和常见问题_@另维吖的博客-CSDN博客_重定向应用场景

实现重定向★★★★

(3条消息) HTTP 的重定向应用场景和常见问题_@另维吖的博客-CSDN博客_重定向应用场景

首先再来回顾一下什么叫重定向

如上图所示:A想访问C的内容,它先问B有没有它想要的内容,B说我没有,但是C有

A得到这个讯息以后,就直接向C发送访问请求

在这个过程中A是有和C直接接触的,所以请求路径会发生改变

一个面试题:重定向和请求转发的区别?

总结一下,区别如下表

请求次数 url是否改变 执行位置 url地址类型
重定向 一次请求 客户端 当前web工程内的地址
请求转发 两次请求 服务器内部 任意地址

重定向用到的方法语法为: void sendRedirect(String var1) throws IOException;

重定向的常用场景:用户登录

先写一个简简单单的重定向程序测试一下

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("/response/img");
        //重定向到 http://localhost:8080/response/img这个网页
    /*
        resp. setHeader("Location","/response/img");
        resp. setstatus (302);
    */
    }

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

经测试,发现网址确实是跳转到 http://localhost:8080/response/img

看一下跳转网页的控制台界面

说明了重定向的Java语句 resp.sendRedirect("/response/img"); 的另一种写法如下

resp. setHeader("Location","/response/img");
resp. setstatus (302);

1、代码

1.用于实现用户登录页面的index.jsp代码

<html>
   <body>
      <h2>用户登录页面</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>

        <%--下面这行代码用于解决乱码问题--%>
      <%@page contentType="text/html;" pageEncoding="UTF-8"%>

   </body>
</html>

2.用于处理请求及实现重定向的RequestTest代码

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 RequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求
        System.out.println("进入这个请求了");
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        System.out.println("username : " + username);
        System.out.println("password : " + password);
        
        //进入这个请求页面以后就重定向到success.jsp这个页面
        resp.sendRedirect("/response/success.jsp");      
    }

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

3.重定向页面代码success.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<html>
    <head>
	    <title>Title</title>
	</head>
    <body>
    	<h1>success</h1>
    </body>
</html>

4.用于注册映射路径的web.xml代码

<servlet>
    <servlet-name>requset</servlet-name>
    <servlet-class>com.xy.servlet.RequestTest</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>requset</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

2、代码测试

  • 首先我们进入用户登录页面 http://localhost:8080/response

  • 输入信息之后点击提交

    我们的预想是提交后进入 /login 即 RequestTest 代码页面,然后在 RequestTest 代码页面实现重定向,跳转到 success.jsp 页面

    如下图所示:确实是跳转到了我们的重定向以后的页面

    但是不是跟我们预想的过程一样呢?

  • 预想过程证明

    • 证明一:控制台输出的内容证明确实是走过RequestTest代码了

    • 证明二:看网页控制台

    • 以上,成功证明了我们的预想是对的


3、知识点梳理及问题处理

1.梳理一下这部分的学习内容

首先我们在 index.jsp 内写了一个简简单单的用户登录页面

然后我们写了java代码 RequestTest 用于构建页面 http://localhost:8080/response/login

然后我们在 success.jsp 内写了一个简单的重定向跳转页面

再然后我们实现了用户提交信息以后跳转到了 http://localhost:8080/response/login 这个页面

最后我们实现了在 http://localhost:8080/response/login 页面中重定向到 success.jsp 写的页面

简单来说就是我们实现了以下过程

用户填写信息 --> 提交信息 --> 跳转到请求处理页面 --> 经过重定向跳转到另一个页面


2.学习过程中遇到的一些问题(已解决)

  • 用户登录页面乱码问题,如下图所示

    解决方法:

    在 index.jsp 的 body 体中添加 <%@page contentType="text/html;" pageEncoding="UTF-8"%>

    如下图所示,乱码问题得到了解决

  • 如何实现用户点击提交以后能够跳转到请求处理页面?

    • ${pageContext.request.contextPath}代表当前的项目

      也就是说 ${pageContext.request.contextPath} 就代表了 http://localhost:8080/response 这个网页,所以像下边这样写就能跳转到请求处理页面网址 http://localhost:8080/response/login

      <form action="${pageContext. request.contextPath}/login" method="get">
      	用户名: <input type="text" name="username"> <br>
      	密码: <input type="password" name="password"> <br>
      	<input type="submit">
      </form>
      
  • 实现重定向练习用到的 jar 包依赖代码如下

    <dependencies>
        <dependency>
        <groupld>javax.servlet</grouptd>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        </dependency>
        <dependency>
        <groupId>javax.servlet.jsp</groupld>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        </dependency>
    </dependencies>
    

标签:http,重定向,resp,response,应用,servlet,Response,页面
来源: https://www.cnblogs.com/xypersonal/p/16311208.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有