重定向与请求转发和 JSP内置对象范围
一、重定向与请求转发:
- 重定向(Redirect):客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)返回客户端浏览器;客户端浏览器收到服务器端结果后解析其头部信息,然后自动按照头部指定地址以GET方式再次向Web应用服务器端发请求,此时地址栏URL发生变化,服务器端接收到新的请求再将结果返回至客户端浏览器,客户端浏览器解释执行返回结果并将执行结果显示给用户,至此该过程结束。
- 请求转发(Forward):这里的“请求”是名词,请求转发指客户端浏览器向Web服务器端发送请求,服务器端收到请求后进行相应处理后再将该请求转发到另外的资源(即这一“转发”操作是在Web服务器端执行的),服务器端对该资源进行处理后反馈给客户端。
区别:
-
重定向:当客户端向服务器发送一个请求,请求地址发生了变化(),服务器向客户端返回了一个继续处理的新地址,此时客户端自动(不需要人工参与)访问服务器的新地址,服务器将新地址的内容返回给客户端。采用重定向的方式进行处理,客户端和服务器端共执行了两次请求和两次响应,且浏览器地址栏显示的是第二次访问的新地址。即:客户端向Servlet发送请求,Servlet调用response.sendReadirect()方法,返还给客户端一个新的xxx.jsp地址,客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。
-
请求转发:客户端向服务器端发送一个请求,请求地址没有发生了变化**,服务器调用内部的方法直接将请求转发给新地址进行处理,然后将处理结果反馈给客户端**。采用请求转发的方式,客户端和服务器端只执行了一次请求和一次响应,且浏览器地址栏显示的是第一次访问的原地址
-
请求转发方式处理页面跳转,跳转的新地址必须是本Web应用系统的资源,不可以访问其他Web应用的资源,而重定向没有这个限制。
-
重定向无法再新的页面获取request.setAttribute中保存的数据,请求转发可以。
-
Web项目中WEB-INF文件夹是最安全的目录,该目录内的资源只能通过请求转发获取,重定向的方式无法获取。
二、JSP内置对象
内置对象范围
对象 | 描述 |
---|---|
pageContext对象 | 在一个页面范围内有效 |
request对象 | 在一个服务器请求范围内有效,与客户端请求绑定在一起 |
session对象 | 在一次会话范围内有效 |
application对象 | 在一个应用服务器(指同一个Web工程)范围内有效,当应用服务器启动后即创建该对象并与所有用户共享。 |
三、JSP文件中写java代码
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//可以写java代码,编译与java代码方法中
Date data = new Date();
System.out.println(1/0);
session.setAttribute("", "");//内置对象
%>
<%!
//用于写方法和全局变量
String a = "123";//编译成java文件时为全局变量
%>
<%=pageContext.getAttribute("name") %>
</body>
</html>