今日内容
Servlet、Session、Filter、Listener
Servlet
1、 Servlet概述
Servlet就是运行在服务器(Tomcat)上的Java程序。
Servlet用来处理客户端请求的,以及负责对客户端的响应。
Servlet默认情况下是单例模式的,每次用户访问,都是开启一个新的线程,调用service方法处理
2、使用Servlet
1. 先引入servlet-api.jar
2. 编写一个Java类,继承HttpServlet
3. 重写service(request,response)方法
4. 在service方法中处理请求,以及进行响应
3、Servlet获取请求的方式:
1) 配置到web.xml
让tomcat帮我们创建对象,并映射地址,当地址匹配,由tomcat调用这个对象的service方法进行处理!
访问格式:http://ip地址:端口号/项目名称/地址
http://localhost:8080/08_servlet/login
配置格式.
将servlet配置到web.xml 并起别名
<servlet>
<servlet-name>任意标识符</servlet-name>
<servlet-class>类的全称(包名+类名)</servlet-class>
</servlet>
根据别名,映射一个网址
<servlet-mapping>
<servlet-name>与第一步标识一致</servlet-name>
<url-pattern>/地址</url-pattern>
</servlet-mapping>
4、 常用方法
request 请求接收
request.setCharacterEncoding("UTF-8"); 设置请求接收的编码集 什么时候用 接收参数乱码时要设置,get请求不好使
request.getParameter("key"); 接收请求参数
request.getParameterMap(); 请求接收参数,封装到map集合中 ,通过 map.get(key);
request.setAttribute("key", value); 将数据设置到request作用域中
request.getRequestDispatcher("转发的页面 例如: login.jsp").forward(request, response); 转发
HttpSession session = request.getSession(); 获取session
request.getServletPath(); 获取servlet请求路径 比如发送的请求是 http://localhost:8080/08_servlet/login 那么获取的就是: /login
请求响应
response.setCharacterEncoding("UTF-8"); 请求响应的编码格式
response.sendRedirect(重定向的请求或页面""); 重定向
//给客户端响应
PrintWriter out = response.getWriter();
out.write("<h1>登录页面</h1>");
out.print("a");
5、servlet的生命周期
init 方法进行初始化
service 提供服务
destroy 销毁
GC回收
session
1. session概述
服务器端为了保存用户的状态而创建的一个特殊的对象
2. session对象获取
HttpSession session = request.getSession(boolean flg);
3. 常用方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
4. 修改session存储时间
第一种方式:修改web.xml
<session-config>
<!-- session 存储时长 默认30分钟 ,可以修改 -->
<session-timeout>60</session-timeout>
</session-config>
第二种方式:编程方式
session.setMaxInactiveInterval(int seconds);
6. 删除session
session.invalidate();
7, session 绑定数据
登录成功之后,在session对象上绑定一些数据,例如:
session.setAttribute("user",user);
当用户访问需要保护的资源时,进行sesion验证,例如:
Object obj = session.getAttribute("user");
if(obj == null){//没有登录
response.sendRedirect("login.jsp");
}
Filter过滤器
Filter 称为 过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器管理的所有web资源:
例如jsp、servlet、静态图片、文件、静态html进行拦截,从而实现一些特殊的功能,例如使用url级别的权限访问控制、
过滤敏感词汇、压缩响应信息等一些高级功能
1、Filter使用
步骤:
1.编写一个类,实现Filter接口
2.在web.xml中进行配置拦截地址
2、生命周期
init 初始化
doFilter 过滤
destory 销毁
程序启动调用Filter的init() 方法(永远只调用一次),程序停止调用Filter 的 destory()方法(永远只调用一次,
doFilter方法每次访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init方法以后调用,
以后不管调用几次都会调用doGet、doPost()方法之前))
3、实用场景
- 用户身份的认证
- 编码设置
- 资源权限审核
- 加密解密访问等等
Listener监听器
1、监听器概述
web监听器是一种servlet中特殊的类,它能帮助开发者监听web中的特定时间,比如:ServletContext、HttpSession、
ServletRequest的创建和效果、变量的创建、销毁和修改等,可以在某些动作前后增加处理,实现监控。
2、常用的用途
1)统计在线人数 利用HttpSessionListener
2)加载初始化信息 利用ServletContextListener
3)统计网站访问量 利用ServletContext
ServletContext:对应监控application内置对象的创建和销毁
当web容器开启的时候,执行contextInitialized方法
contextDestoryed方法
实现方式:直接实现ServletContextListener接口
HttpSessionListener:对应监控session内置对象的创建和销毁
当打开一个新的页面的时候,开启一个session会话,执行sessionCreated方法;当页面关闭session过期;或者容器关闭销毁的时候,执行sessionDestoryed方法。
实现方式:直接实现HttpSessionLinstener接口
ServletRequest:对应监控request内置对象的创建和销毁
当访问某个页面时候,发出一个request请求,执行requestInitialized方法;当页面关闭的时候,执行requestDestoryed方法
实现方法:直接实现ServletRequestLinstener接口
3、如何使用监听器
1、创建一个监听器。实现某种接口
2、在web.xml中配置该监听器
3、在JSP添加访问人数或者其他操作
4、案例(通过Listener实现在线人数的监控)
1、创建Java程序,实现HttpSessionLinstener
2、重写sessionCreated 创建会话 sessionDestoryed 销毁会话
3、在web.xml中配置该监听器
4、在JSP添加访问人数
<body>
在线人数:<%=session.getAttribute("userNumber") %>
</body>
2020-05-16