监听作用域的创建与销毁
- ServletContextListener:应用作用域监听器,监听服务器启动与关闭
package com.javakc.web1.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
//应用作用域监听器,监听服务器启动与关闭
@WebListener
public class CustomServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听到服务器正在启动中...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听到服务器正在关闭中...");
}
}
数据字典
package com.javakc.web1.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.HashMap;
import java.util.Map;
//应用作用域监听器,监听服务器启动与关闭
@WebListener
public class CustomServletContextListener2 implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听到服务器正在启动中...");
//数据字典
/*Map<Integer, Object> genderMap = Map.of(1, "男", 2, "女", 3, "保密");
Map<Integer, Object> levelMap = Map.of(1, "初级", 2, "中级", 3, "高级");*/
Map<Integer, Object> genderMap = new HashMap<>();
genderMap.put(1, "男");
genderMap.put(2, "女");
genderMap.put(3, "保密");
Map<Integer, Object> levelMap = new HashMap<>();
levelMap.put(1, "初级");
levelMap.put(2, "中级");
levelMap.put(3, "高级");
ServletContext context = sce.getServletContext();
context.setAttribute("gender", genderMap);
context.setAttribute("level", levelMap);
}
}
package com.javakc.web1.listener;
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(
name = "UserServlet",
urlPatterns = "/user.do",
loadOnStartup = 0
)
public class UserServlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getServletContext().getAttribute("level"));
System.out.println(request.getServletContext().getAttribute("gender"));
}
}
- HttpSessionListener:会话作用域监听器,监听用户登陆与退出
package com.javakc.web1.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
//会话作用域监听器
@WebListener
public class CustomHttpSessionListener1 implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("监听用户登录");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("监听用户退出");
}
}
package com.javakc.web1.listener;
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 java.io.IOException;
@WebServlet(
name = "UserServlet",
urlPatterns = "/user.do",
loadOnStartup = 0
)
//会话作用域创建
public class UserServlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建会话作用域
HttpSession session1 = request.getSession();
}
}
package com.javakc.web1.listener;
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 java.io.IOException;
@WebServlet(
name = "LogoutServlet",
urlPatterns = "/logout.do",
loadOnStartup = 0
)
//会话作用域销毁
public class UserServlet3 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
//单独销毁,立即销毁
if (null != session) {
//立即销毁
session.invalidate();
}
}
}
- ServletRequestListener:请求作用域监听器,监听请求发出与响应返回
package com.javakc.web1.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class CustomServletRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("监听请求的发出");
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("监听响应的返回");
}
}
package com.javakc.web1.user;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
@WebServlet(
name = "UserServlet",
urlPatterns = "/user.do",
loadOnStartup = 0
)
//Servlet环境搭建
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doGet method!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doPost method!");
//响应类型
response.setContentType("text/html;charset=utf-8");
Writer writer = response.getWriter();
writer.write("<input type=\"text\">");
writer.write("<input type=\"button\" value=\"搜索\">");
writer.close();
}
}
监听作用域的属性改变事件
- ServletContextAttrubiteListener:监听应用作用域属性的改变
package com.javakc.web1.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class CustomServletContextAttributeListener implements ServletContextAttributeListener {
//添加属性
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
//输出属性名称和值
System.out.println(scae.getName() + ":" + scae.getValue());
}
//修改属性
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("修改属性");
}
//删除属性
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("删除属性");
}
}
package com.javakc.web1.listener;
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(
name = "UserServlet",
urlPatterns = "/user.do",
loadOnStartup = 0
)
//应用作用域
public class UserServlet5 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取应用作用域
ServletContext context = request.getServletContext();
//从应用作用域获取属性
Object username1 = context.getAttribute("username");
System.out.println("第一次从请求作用于获取属性:" + username1);
//向应用作用域中写入属性
context.setAttribute("username", "admin");
//从应用作用域获取属性
Object username2 = context.getAttribute("username");
System.out.println("第二次从请求作用于获取属性:" + username2);
//从应用作用域中移除属性
context.removeAttribute("username");
//从作用域中获取属性值
Object username3 = context.getAttribute("username");
System.out.println("第三次从请求作用于获取属性:" + username3);
}
}
- HttpSessionAttrubiteListener:监听会话作用域属性的改变
package com.javakc.web1.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener
public class CustomHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监听会话作用域属性添加");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监听会话作用域属性移除");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("监听会话作用域属性替换");
}
}
- ServletRequestAttrubiteListener:监听请求作用域属性的改变
package com.javakc.web1.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class CustomServletRequestAttributeListener implements ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("请求作用域属性添加");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("请求作用域属性移除");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("请求作用域属性替换");
}
}
package com.javakc.web1.context;
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(
name = "UserServlet",
urlPatterns = "/user.do",
loadOnStartup = 0
)
//请求作用域
public class UserServlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从作用域中获取属性值
Object username1 = request.getAttribute("username");
System.out.println("第一次从请求作用于获取属性:" + username1);
//向作用域中写入属性值
request.setAttribute("username", "admin");
//从作用域中获取属性值
Object username2 = request.getAttribute("username");
System.out.println("第二次从请求作用于获取属性:" + username2);
//从作用域中移除属性
request.removeAttribute("username");
//从作用域中获取属性值
Object username3 = request.getAttribute("username");
System.out.println("第三次从请求作用于获取属性:" + username3);
}
}