文章目录
一. 保存作用域
原始情况下,保存作用域我们可以认为有四个: page(页面级别,现在几乎不用) , request(一次请求响应范围) , session(一次会话范围) , application(整个应用程序范围)
1) request:一次请求响应范围
2) session:一次会话范围有效
3) application: 一次应用程序范围有效
1) request:一次请求响应范围
demo01
package com.atwhy.demo;
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;
/**
* 演示request保存作用域(demo01-demo02)
* 2.客户端重定向不能获取数据,因为一次请求范围内才可以获取数据
* 2.服务器端转发,由于只请求一次,而后由服务端转发,内部转发,可以获取数据
*/
@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.向request保存作用域保存数据
request.setAttribute("uname","lili");
//2.客户端重定向(demo02不能获取数据)
//response.sendRedirect("demo02");
//2.服务器端转发(demo能获取数据)
request.getRequestDispatcher("demo02").forward(request,response);
}
}
demo02
package com.atwhy.demo;
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("/demo02")
public class Demo02Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取request保存作用域保存的数据,key为uname
Object uname = request.getAttribute("uname");
System.out.println(uname);
}
}
2) session:一次会话范围有效
demo03
package com.atwhy.demo;
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;
/**
* 演示Session保存作用域(demo03-demo04)
* 一次会话范围内有效
* 所有客户端重定向和服务端转发都可以使demo4获取到数据
*/
@WebServlet("/demo03")
public class Demo03Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.向request保存作用域保存数据
request.getSession().setAttribute("uname","lili");
//2.客户端重定向(demo04可以获取到数据)
response.sendRedirect("demo04");
//2.服务器端转发(demo04可以获取到数据)
//request.getRequestDispatcher("demo04").forward(request,response);
}
}
demo04
package com.atwhy.demo;
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("/demo04")
public class Demo04Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取request保存作用域保存的数据,key为uname
Object uname = request.getSession().getAttribute("uname");
System.out.println(uname);
}
}
3) application: 一次应用程序范围有效
demo05
package com.atwhy.demo;
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;
/**
* 演示application保存作用域(demo05-demo06)
* 一次会话范围内有效
* 所有客户端重定向和服务端转发都可以使demo4获取到数据
*/
@WebServlet("/demo05")
public class Demo05Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.向application保存作用域保存数据
//ServletContext:Servlet上下文
ServletContext application = request.getServletContext();
application.setAttribute("uname","lili");
//2.客户端重定向(demo04可以获取到数据)
response.sendRedirect("demo06");
//2.服务器端转发(demo04可以获取到数据)
//request.getRequestDispatcher("demo04").forward(request,response);
}
}
###demo06
package com.atwhy.demo;
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("/demo06")
public class Demo06Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取request保存作用域保存的数据,key为uname
ServletContext application = request.getServletContext();
Object uname = application.getAttribute("uname");
System.out.println(uname);
}
}