本文转载自微信公众号「见贤思编程」,作者泰斗贤若如。转载本文请联系见贤思编程公众号。
转发与重定向简介
转发和重定向都是实现页面跳转
也就是说,当我们访问一个 Servlet 的时候 ,Servlet 帮我们跳转到另一个界面。
转发与重定向的区别
代码演示转发和重定向
- package servlet;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/login")
- public class ServletDemo extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取表单提交过来的数据
- //getParameter()方法可以获取请求的参数信息
- String name = req.getParameter("name");
- String password = req.getParameter("password");
- //打印获取到的参数信息
- System.out.println("name:"+name);
- System.out.println("password:"+password);
- //如果name=admin,password=123,则跳转到succee.jsp,否则跳转到fail.jsp
- if("admin".equals(name)&&"123".equals(password)){
- //通过转发实现跳转
- req.getRequestDispatcher("/success.jsp").forward(req,resp);
- }else {
- //通过重定向实现跳转
- resp.sendRedirect("/fail.jsp");
- }
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doGet(req, resp);
- }
- }
JSP代码
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>登录</title>
- </head>
- <body>
- <form action="/login">
- <table align="center">
- <tr>
- <td>账号:</td>
- <td><input type="text" name="name"></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><input type="text" name="password"></td>
- </tr>
- <tr>
- <td><input type="submit" value="登录"></td>
- <td><input type="reset" value="重置"></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
转发和重定向如何带数据到某个页面
- package servlet;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/login")
- public class ServletDemo extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //通过转发带数据
- req.setAttribute("name","张三");
- req.getRequestDispatcher("/send.jsp").forward(req,resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doGet(req, resp);
- }
- }
send.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>转发和重定向传代数据练习</title>
- </head>
- <body>
- <%
- //1、接收转发传代的数据
- String name = (String) request.getAttribute("name");
- out.println("转发传代的数据:"+name);
- %>
- </body>
- </html>
- package servlet;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/login")
- public class ServletDemo extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //通过重定向带数据
- ServletContext servletContext = this.getServletContext();
- servletContext.setAttribute("name","王二麻子");
- resp.sendRedirect("/send2.jsp");
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doGet(req, resp);
- }
- }
send2.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>转发和重定向传代数据练习</title>
- </head>
- <body>
- <%
- //1、接收重定向传代的数据
- String name1 = (String)application.getAttribute("name");
- out.println("重定向传代的数据:"+name1);
- %>
- </body>
- </html>
练习
index.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- <form action="CountServlet" method="post">
- <h3>加法计算器</h3>
- 加数1:<input type="number" name="one">
- 加数2:<input type="number" name="two">
- <input type="submit" value="计算">
- </form>
- </body>
- </html>
count.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- 计算结果:<%=request.getAttribute("count")%>
- <!--计算结果:<%=application.getAttribute("count")%>-->
- </body>
- </html>
Servlet
- package servlet;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/CountServlet")
- public class CountServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String one=request.getParameter("one");
- int o=Integer.parseInt(one);//强制转换,将String类型的数据转换成int类型
- String two=request.getParameter("two");
- int t=Integer.parseInt(two);//强制转换,将String类型的数据转换成int类型
- System.out.println(one+" "+two);
- int c=o+t;
- String co=String.valueOf(c);//将int类型的数据转换成String类型
- //转发,可以携带数据
- request.setAttribute("count",co);
- request.getRequestDispatcher("count.jsp").forward(request,response);
- //用于存放数据
- // ServletContext s=this.getServletContext();
- // s.setAttribute("count",co);
- //重定向只能依靠ServletContext获取数据
- // response.sendRedirect("count.jsp");
- System.out.println(co);
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doPost(request,response);
- }
- }
作者:Mintimate 博客: https://www.mintimate.cn Mintimates Blog,只为与你分...
搞数据的都知道,阿里发明了数据中台,然后中台这个概念就马上成为了国内大多数...
1.我对着同桌大喊我同桌是猪他对我大喊你同桌才是猪 2.上课时间就像南孚电池,...
大家好,我是Java进阶者,今天小编带大家一起来学习Java技术基础! 一、Calendar...
业务背景 目前团队内的开发模式多是面向组件的,UI层和逻辑层均强耦合在一起,由...
评估方法主要是通过企业数据对业务的赤诚程度来评估企业应用数据的能力。回顾数...
Tailwind CSS 作者 Adam Wathan 宣布了一个新项目:用于 Tailwind CSS 的 JIT 编...
文章来源 云科技时代 宁川 在中国的商业数据库界 有一位Oracle的顶流铁粉 这就是...
一、Lambda架构需求 Lambda架构背后的需求是由于MR架构的延迟问题。MR虽然实现了...
许多企业已经迁移到云平台中并发现了它的好处,为此也需要了解一些顶级云存储解...