Response应用之重定向的实现★★★★★
2022/5/25 23:21:19
本文主要是介绍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>
这篇关于Response应用之重定向的实现★★★★★的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性