转发(携带参数进行跳转)
RequestDispatcher对象
forward()方法
1、request.getRequestDispatcher("url").forward(request, response) request设置属性的
2、
重定向:将用户请求重新定位到一个新的URL
response.sendRedirect("url")
【getParameter: 从请求里面拿参数;返回String类型
getAttribute:从属性拿参数;返回Object类型(toString())】
转发与重定向的区别:
转发url没有发生变化,而重定向会转发不会重新发送请求,重定向会转发可以携带参数,而重定向不可以转发只可跳转当前项目路径,而重定向可以跳转任意url| 比较项 | 转发 | 重定向 |
|---|---|---|
| URL变化 | 否 | 是 |
| 重新发出请求 | 不会(地址栏路径不变,内容改变) | 会 |
| 是否携带请求 | 是 | 否 |
| 目标URL要求 | 仅本Web应用 | 任意URL |
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量
---A页面:
<%pageContext.setAttribute("uname", "page只在当前jsp页面里");
---A页面输出,B页面null%>
<%=pageContext.getAttribute("uname")%>
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过 程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
✔使用转发到B.jsp【http://localhost:8080/web01/A.jsp,状态栏路径】,重定向就不是本次请求
---A页面:
<%request.setAttribute("uname", "request本次请求周期");%>
request.getRequestDispatcher("B.jsp").forward(request, response);
%>
---B页面输出:
<%=request.getAttribute("uname")%>
<%
//B页面再次转发,即A直接到C
request.getRequestDispatcher("C.jsp").forward(request, response);
%>
---C页面输出,
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。
即:只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。
---A页面:
<%
session.setAttribute("uname", "session是当前会话(浏览器不关)");
response.sendRedirect("B.jsp"); //两次请求
//输出sessionID
out.println(session.getId());
//设置60秒非session活动时间后清除session中的值
session.setMaxInactiveInterval(60);
%>
---B页面:
<%=session.getAttribute("uname")%>
---C页面清除session:
<%
out.print("清除session");
//单个清除
session.removeAttribute("uname");
//清除所有session失效
session.invalidate();
%>
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。
application作用域里的变量,存活时间最久,需手动删除,否则一直存在。
application里的变量可以被所有用户共用。如果用户甲的操作修改;application中的变量,用户乙访问时得到的是修改后的值。
//存入值
application.setAttribute("name","张三");
//获取值
String name = application.getAttribute("name").toString();