Filter和ServletContext和Listener

目录

Filter案例

解决全站乱码问题

登录权限校验

ServletContext对象

Listener(监听器)


Filter案例

解决全站乱码问题

我们每次访问每个servlet都要书写处理请求和响应乱码的代码,这样代码十分冗余,所以我们可以在过滤中

@WebFilter("/*")
public class EncodeFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//your code..//解决请求乱码request.setCharacterEncoding("utf-8");//解决响应乱码response.setContentType("text/html;charset=utf-8");//放行filterChain.doFilter(request,response);}@Overridepublic void destroy() {}
}
@WebServlet("/servletDemo1")
public class servletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");System.out.println(username);response.getWriter().print("哈哈哈");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/servletDemo1" method="post"><input type="text" name="username"><input type="submit" value="提交">
</form>
</body>
</html>

登录权限校验

步骤

        1.访问hhh.html这个页面时必须先要登录,不登录不能访问,使用过滤器代码书写代码让其跳转到登录页面login.html

         2.登录loginServlet中获取用户名和密码,存到user对象中,然后存在session中(不关闭服务器,这个session就一直在服务器里面),最后重定向到hhh.html

        3. 使用一个过滤器对hhh.html进行拦截,先从session中获取用户信息,如果没有登录,获取的是null,就跳转到登录页面,如果不为null,说明登录成功,放行

 hhh.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>这就是终极文件</h1>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body>
<form action="/loginServlet" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="pwd"><br><input type="submit" value="提交">
</form>
</body>
</html>

loginServlet

@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求参数String username = request.getParameter("username");String pwd = request.getParameter("pwd");User user = new User();user.setUsername(username);user.setPwd(pwd);//这里在实际开发中,应该调用业务层的方法,与数据库交互//获取session对象HttpSession session = request.getSession();session.setAttribute("u",user);//登陆成功,就跳转到hhh.htmlresponse.sendRedirect("/hhh.html");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

loginFilter过滤器,过滤hhh.html


@WebFilter("/hhh.html")
public class loginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//your code..//从session中获取对象HttpSession session = request.getSession();User u = (User) session.getAttribute("u");if(u==null){//没有登录//跳转到登录页面response.sendRedirect("/login.html");}else{//放行filterChain.doFilter(request,response);}}@Overridepublic void destroy() {}
}

先登录

在显示页面

ServletContext对象

可以共享数据的对象

1.request:只能在一次请求一次响应中进行数据共享-->请求转发

2.session:只能在一次会话过程中,可以有多次请求和响应

3.ServletContext:只要项目存在就可以共享数据,多次会话,多次请求多次响应都可以共享数据,操作整个项目的配置文件

范围大小:

ServletContext>session>request

ServletContext属于接口,在tomcat启动的时候tomcat创建门面类(ServletContext的子类)

我们可以在Servlet类中直接获取ServletContext对象;getServletContext()属于父类GenericServlet中的方法

@WebServlet("/servletContextDemo1")
public class servletContextDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取ServletContext对象ServletContext servletContext = getServletContext();//获取指定文件的MIME类型String mimeType = servletContext.getMimeType("demo1.html");//相对于webapp的路径System.out.println("mimeType="+mimeType);//mimeType=text/html//获取指定文件的真实路径String realPath = servletContext.getRealPath("demo1.html");System.out.println("realPath="+realPath);//realPath=D:\java code\web6_filter_listener\target\web6_filter_listener-1.0-SNAPSHOT\demo1.html}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

Listener(监听器)

说明:
         javaweb的监听器就是监听ServletContext HttpServletRequest HttpSession这三个对象的创建和销毁,同时监听是哪个对象数据的变化,就是监听属性的变化:setAttibute(),removeAttribute()

1.ServletContext是tomcat启动创建,关闭tomcat销毁

2.HttpServlet是浏览器第一次访问执行request.getSession()创建,销毁时间 1)30min 2)执行invalidate()

3.HttpServletRequest时浏览器第一次访问Servlet创建,浏览器收到服务器的响应就销毁

//配置监听器
@WebListener
public class conTextListerner implements ServletContextListener {//实现接口//当ServletContext创建(启动tomcat)时执行该方法@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("ServletContext创建");}//当ServletContext(关闭tomcat)销毁时执行该方法@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("ServletContext销毁");}
}

 不使用注解可以在web.xml中配置

<!--    配置监听器--><listener><listener-class>com.hhh.listener.conTextListerner</listener-class></listener>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java——变量

一、变量介绍 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 1、变量声明和初始化 变量的声明&#xff1a; int a; i…

44-1 waf绕过 - WAF的分类

一、云 WAF 通常包含在 CDN 中的 WAF。在配置云 WAF 时&#xff0c;DNS 需要解析到 CDN 的 IP 上。请求 URL 时&#xff0c;数据包会先经过云 WAF 进行检测&#xff0c;如果通过检测&#xff0c;再将数据包流向主机。 二、硬件IPS/IDS防护、硬件WAF 硬件IPS/IDS防护&#xff…

VS Code 开发小技巧

VS Code的开发小技巧 添加代码片段 平时开发的时候&#xff0c;可以快速创建一个空白的模板。 一个快速生成代码片段的网站&#xff1a;https://snippet-generator.app/ 打开网站&#xff0c;把常用的模板代码复制进去&#xff0c;就会自动生成VS Code可以使用的代码片段了。…

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架&#xff1a;Java、Maven、Spring Boot 数据分布式采集&#xff1a;Flume、Sqoop、kettle 数据分布式存储&#xff1a;Hadoop HDFS 离线批处理计算&#xff1a;MapReduce、Spark、Flink 实时流式计算&#xff1a;Storm/Spark Streaming、…

2024.05.30更新票星球抢购软件

文章目录 软件功能订阅须知早期代码软件功能 自持自定义搜索演唱会信息支持添加、删除观影人信息支持多账号并发抢票支持捡漏模式支持IP代理订阅须知 订阅后如果有问题,请联系博主,如果不懂可以免费提供讲解和远程服务早期代码 def enter_concert(self):print(u###打开浏览器…

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…

Science:论文写不出来?这三个方法让你一天完成一篇论文

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 众所周知&#xff0c;干了学术研究这一行&#xff0c;论文就是你研究质量和数量的衡量标准&#xff0c;可以说&#xff0c;你的一切“输入”-读文献、做实验、分析数据&#x…

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …

【C语言】柔性数组

前言 你是否听说过柔性数组呢&#xff1f;如果没有的话&#xff0c;就一起了解一下吧。 &#xff08;没有malloc free calloc realloc 四个函数的前置知识的朋友最好先阅读一下我的“动态内存管理”一文&#xff0c;因为下面会涉及到。&#xff09; 介绍 C99中&#xff0c;…

python找出100~999之间的水仙花数字

水仙花数字&#xff1a;个位&#xff0c;十位&#xff0c;百位的立方之和等于这个数本身 例如&#xff1a;153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)

LeetCode题练习与总结:路径总和Ⅱ--113

一、题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], target…

FreeRTOS同步互斥与通信

本章简介&#xff1a; 本章是概述性的内容。可以把多任务系统当做一个团队&#xff0c;里面的每一个任务就相当于团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念&#xff0c;都可以在现实生活中找到例子。 各类RT…

Java大厂面试题第2季

一、本课程前提要求和说明 面试题1&#xff1a; 面试题2&#xff1a; 面试题3&#xff1a; 面试题4&#xff1a; 面试题5&#xff1a; 高频最多的常见笔试面试题目 ArrayList HashMap 底层是什么东东 JVM/GC 多线程与高并发 java集合类

【科研基础】证明积累

1-Bayesian Estimation (P317) Suppose that x = θ + ν w h e r e ν i s a n N ( 0 , σ ) random variable and θ is the value of a n N ( θ 0 , σ 0 ) random variable θ (Fig. 8-7). Find the bayesian estimate θ o f θ . \begin{align…

大学校园广播“录编播”与IP校园公共广播系统技术方案

一、项目概述 1、校园IP网络广播系统概述 大学校园广播系统是学校整个弱电系统中的子系统&#xff0c;它是每个学校不可缺少的基础设施之一&#xff0c;在传递校园文化、传播校园新闻资讯方面发挥着重要的作用。近几年来&#xff0c;虽然视频技术和网络技术在飞速发展&#xf…

操作系统的体系结构:宏内核和微内核

操作系统的体系结构是一个开放的问题。操作系统在核心态为应用程序提供公共的服务&#xff0c;那么操作系统在核心态应该提供什么服务、怎样提供服务&#xff1f;有关这个问题的回答形成了两种主要的体系结构&#xff1a;宏内核和微内核。 宏内核&#xff1a;大而全 宏内核系统…

word里面没有Acrobat选项

加载项被禁止&#xff0c;选择项里面&#xff0c;没有Acrobat选项 文件-》选项 加载项-》com加载项-》转到 添加Acrobat 出现Acrobat选项

[Qt]关于QListWidget、QScrollArea 为什么在QDesigner上设置了之后界面上仍然不生效的问题

前言 最近做了一些有关QListWidget和QScrollArea的控件&#xff0c;我去&#xff0c;这两个控件是真的坑&#xff0c;明明我在QDesigner的操作界面上对这两个控件的界面进行了修改&#xff0c;但是编译出来的软件就是看上去什么都没有&#xff0c;很坑&#xff0c;Gpt也没解决…

【linux】宝塔,首页挂载磁盘,显示使用情况

挂载前&#xff1a; 挂载后&#xff1a; 数据无价&#xff0c;建议&#xff1a;备份需要挂载的磁盘&#xff0c;或者使用新磁盘来进行操作。 1、下载自动挂载磁盘的脚本&#xff1a; wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh 2、给脚本添加执行权限&a…

省级交通运输行政执法综合管理平台项目实施方案

背景 党的十八届四中全会提出全面推进依法治国的总目标和重大任务。全会通过的《中共中央关于全面推进依法治国若干重大问题的决定》&#xff0c;开启了中国法治建设的新时代&#xff0c;依法治国已经成为党领导人民治理国家的基本方略。 为了贯彻和落实《交通运输信息化“十三…