当前位置:网站首页>servlet中 servlet context与 session与 request三个对象的常用方法和存放数据的作用域。
servlet中 servlet context与 session与 request三个对象的常用方法和存放数据的作用域。
2022-07-06 09:23:00 【飘飘~】
提示:context,session,request,作为Servlet之间重要的传值手段,对于他们作用域的区分,使我们学习的重难点。
目录
HttpSession:一次会话,当session销毁时结束(默认为短暂会话,若要持久会话需要设置最大存活期session.setMaxInactiveInterval(秒数);)。
前言:本篇文章我们将从三者的基本概念开始进行阐述,从三者之间的优缺点入手,进而分析他们之间作用域的异同。
一、Servlet的三大数据存放对象
①ServletContext
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过config.getServletContext()方法获得ServletContext对象。
②HttpSession
创建于服务器端,保存于服务器,维护于服务器端,每创建一个新的Session,服务器端都会分配一个唯一的ID,并且把这个ID保存到客户端的Cookie中,保存形式是以JSESSIONID来保存的。
③HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
三者公共方法(API)
存储数据:setAttribute(name,value);
获取数据:getAttribute(name);
删除数据: removeAttribute(name);
二、作用域
ServletContext:(服务器启动到服务器关闭。)
Test01
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
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 org.thymeleaf.context.WebContext;
/**
* Servlet implementation class Test01
*/
@WebServlet("/Test01")
public class Test01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
//request域
String name = "猪八戒";
context.setAttribute("name", name);
//打印到页面
out.print("页面1"+context.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Test02
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
* Servlet implementation class Test02
*/
@WebServlet("/Test02")
public class Test02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
//request域
//打印到页面
out.print("页面2"+context.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
运行结果:
当前edge浏览器都可以请求到
换一个火狐浏览器也可以请求到
HttpSession:一次会话,当session销毁时结束(默认为短暂会话,若要持久会话需要设置最大存活期session.setMaxInactiveInterval(秒数);)。
Test01
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;
import org.thymeleaf.context.WebContext;
/**
* Servlet implementation class Test01
*/
@WebServlet("/Test01")
public class Test01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
//request域
String name = "沙和尚";
session.setAttribute("name", name);
//打印到页面
out.print("页面1"+session.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Test02
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;
/**
* Servlet implementation class Test02
*/
@WebServlet("/Test02")
public class Test02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
//request域
//打印到页面
out.print("页面2"+session.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
运行结果:
当前edge浏览器都可以请求到
换一个火狐浏览器请求不到
HttpServletRequest:一次请求。
Test01
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Test01
*/
@WebServlet("/Test01")
public class Test01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
//request域
String name = "孙悟空";
request.setAttribute("name", name);
//打印到页面
out.print("页面1"+request.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Test02
package com.ape.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Test02
*/
@WebServlet("/Test02")
public class Test02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 处理乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取资源
PrintWriter out = response.getWriter();
//request域
//打印到页面
out.print("页面2"+request.getAttribute("name"));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
运行结果:
当进行转发后: (地址栏不变,但request请求完成了)
三、 使用场景
Request域:跟当前操作有关,可以通过转发传值到其他页面。
Session域:是一次回话,只能用于当前浏览器,适用于跟用户信息相关的,比如保存登录信息。
application域:公共的,都可以调用在整个项目运行期间,存储全局信息,一些重要信息不建议使用。
最后大家:
新的一周元气满满(*^▽^*)!!!
边栏推荐
- xray與burp聯動 挖掘
- Experiment five categories and objects
- 小程序web抓包-fiddler
- 《统计学》第八版贾俊平第十四章指数知识点总结及课后习题答案
- 记一次edu,SQL注入实战
- 中间件漏洞复现—apache
- MSF generate payload Encyclopedia
- 《统计学》第八版贾俊平第五章概率与概率分布
- Internet Management (Information Collection)
- Fire! One day transferred to go engineer, not fire handstand sing Conquest (in serial)
猜你喜欢
《统计学》第八版贾俊平第七章知识点总结及课后习题答案
On the idea of vulnerability discovery
DVWA (5th week)
Intranet information collection of Intranet penetration (I)
循环队列(C语言)
Hackmyvm target series (4) -vulny
[VMware abnormal problems] problem analysis & Solutions
Data mining - a discussion on sample imbalance in classification problems
. Net6: develop modern 3D industrial software based on WPF (2)
HackMyvm靶机系列(2)-warrior
随机推荐
网络层—简单的arp断网
攻防世界MISC练习区(SimpleRAR、base64stego、功夫再高也怕菜刀)
Force deduction 152 question multiplier maximum subarray
Experiment five categories and objects
Based on authorized access, cross host, and permission allocation under sqlserver
《统计学》第八版贾俊平第十章方差分析知识点总结及课后习题答案
内网渗透之内网信息收集(四)
《统计学》第八版贾俊平第十三章时间序列分析和预测知识点总结及课后习题答案
[issue 18] share a Netease go experience
How does SQLite count the data that meets another condition under the data that has been classified once
搭建域环境(win)
7-8 7104 Joseph problem (PTA program design)
内网渗透之内网信息收集(二)
[err] 1055 - expression 1 of order by clause is not in group by clause MySQL
Experiment 7 use of common classes (correction post)
Experiment 8 exception handling
How to understand the difference between technical thinking and business thinking in Bi?
Chain team implementation (C language)
图书管理系统
Sword finger offer 23 - print binary tree from top to bottom