扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容介绍了“Java中转发与重定向的区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为义乌企业提供专业的成都做网站、成都网站建设,义乌网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
转发与重定向简介
转发和重定向都是实现页面跳转
也就是说,当我们访问一个 Servlet 的时候 ,Servlet 帮我们跳转到另一个界面。
转发与重定向的区别
实现转发调用的是 HttpServletRequest 对象中的方法
实现重定向调用的是 HttpServletResponse 对象中的方法
转发时浏览器中的 url 地址不会发生改变
重定向时浏览器中的 url 地址会发生改变
转发时浏览器只请求一次服务器
重定向时浏览器请求两次服务器
转发能使用 request 带数据到跳转的页面
重定向能使用 ServletContext 带数据到跳转的页面
代码演示转发和重定向
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" %>登录
转发和重定向如何带数据到某个页面
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" %>转发和重定向传代数据练习 <% //1、接收转发传代的数据 String name = (String) request.getAttribute("name"); out.println("转发传代的数据:"+name); %>
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" %>转发和重定向传代数据练习 <% //1、接收重定向传代的数据 String name1 = (String)application.getAttribute("name"); out.println("重定向传代的数据:"+name1); %>
练习
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title
count.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title 计算结果:<%=request.getAttribute("count")%>
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); } }
“Java中转发与重定向的区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流