25@JSP_day10
1、过滤器
1)什么是过滤器?
servlet规范中定义的一种特殊的类,可以拦截容器(服务器)的调用过程。
2)编程
step1 写一个java类,实现Filter接口。
step2 在doFilter方法里,实现处理逻辑。
step3 在web.xml文件里,配置过滤器。
练习:
写一个过滤器CommentFilterB,检查评论中字符的个数,如果超过20个字符,则提示用户评论字数过多,否则,调用CommentServlet输出用户的评论。
3)过滤器的优先级
由web.xml配置文件中的<filter-mapping>的先后顺序来决定。
4)初始化参数
step1 在web.xml文件中,使用<init-param>配置初始化参数。
step2 读取初始化参数
String FilterConfig.getInitParameter(String paraName);
5)过滤器的优点
a, 可以将多个模块相同的处理逻辑放在过滤器当中来处理(比如,session验证、权限管理、安全控制、编码处理等等),这样做的好处是方便代码的维护。
b,可以实现代码的"可插拔性"。
增加或者减少某个模块,不会影响到整个程序的运行。
2、监听器
1)什么是监听器
servlet规范当中定义的一种特殊的类,当容器创建或者销毁request,session,ServletContext,或者对这三个对象调用了setAttribute,removeAttribute方法时
产生的事件进行处理。
2)编程
step1 写一个java类,实现相应的监听器接口。
step2 在监听器接口方法中,实现监听的逻辑。
step3 web.xml文件当,配置。
统计系统在线人数。
3)ServletContext
servlet上下文
当servlet容器(服务器)启动时,会为每个应用创建唯一的一个ServletContext对象。该对象会一直存在,除非关闭服务器。
a,获得servlet上下文
方式一 GenericServlet.getServletContext();
方式二 HttpSession.getServletContext();
方式三 ServletConfig.getServletContext();
b, 作用:
作用一:绑订数据
setAttribute(String name,Object obj);
Object getAttribute(String name);
removeAttribute(String name);
作用二:访问全局的初始化参数
step1 在web.xml文件当中,使用<context-param>配置全局的初始化参数
step2 String getInitParameter(String paraName);
作用三: 获得逻辑路径对应的实际部署时的物理路径。
String getRealPath(String path);
3、上传文件(了解)
step1 设置表单的提交方式为post,并且设置表单的enctype属性:
<form action="" method="post" enctype="multipart/form-data">
此时,浏览器会将表单中的数据直接以二进制流的方式发送给服务器(不再进行url编码,即打开页面的编码是什么,就会对表单中的数据使用这种编码格式者编码)。
step2 在服务器端,不能够使用request.getParameter方法。要使用request.getInputStream方法获得一个InputStream,然后分析这个输入流,获得相应数据。
一般使用一些工具来分析。
比如 apache提供的 commons-fileupload.jar提供的一些类来分析。
将commons-fileupload.jar及相关的jar文件拷贝到WEB-INF\lib下,然后使用相应的api解析请求即可。
4、servlet的线程安全问题
1)线程安全问题产生的原因
容器在默认情况下,对于某个servlet,只会创建唯一的一个实例;如果多个请求到达容器,容器会启动多个线程来处理,此时,如果多个线程都访问了同一个servlet实例,就可能会产生线程安全问题(比如,修改servlet的属性)。
2)解决方式
a,加锁,使用synchronized对代码块加锁。
b, 让servlet实现SingleThreadModel接口(没有定义任何的方法,是一个标识接口)。
容器会为每一个线程分配一个servlet实例。
不建议使用,因为容器内部会产生过多的servlet实例。
servlet知识点小结
一、servlet基础
1、什么是servlet?
2、什么是servlet容器?
符合servlet规范的程序,为servlet提供运行环境并且管理servlet的生命周期。
servlet开发完成之后,必须部署到servlet容器当中才能运行。
3、如何开发一个servlet?
4、了解http协议
二、servlet核心
1、表单处理
1)如何获得表单中的参数值
String request.getParameter(String name);
String[] request.getParameterValues(String name);
2)如何处理中文参数值
step1 表单所在的页面以指定的编码格式打开(.jsp,使用page指令; html使用meta标记)并且,表单使用post方式提交。
step2 在服务器端使用
request.setCharacterEncoding(String code);
2、get请求与post请求
1)哪一些是get请求
2)get请求的特点
3)哪一些是post请求
4)post请求的特点
3、转发与重定向
1)什么是转发?
2)怎样转发(编程)?
request.setAttribute(String name,Object obj);
request.getRequestDispatcher(String url).forward(request,response);
3)转发与重定向编程当中需要注意的问题
转发或者重定向之前,会清空response中缓存的数据;如果调用了out.close,out.flush,会报错。
4)转发的特点?
5)什么是重定向?
6)如何重定向(编程)?
7)重定向的特点?
8)转发与重定向的区别?
转发:
目的地只能是同一个应用内部的某个组件。
浏览器地址栏的地址不变。
可以共享request。
重定向:
目的地是任意的。
浏览器地址栏的地址会变。
不能共享request。
4、servlet的生命周期
1)生命周期分成哪几个阶段?
a,(两种情况)
b,初始化(init方法)
c,就绪(service方法)
d,销毁(destroy方法)
2)servlet的初始化参数
a,<init-param>配置
b,String ServletConfig.getInitParameter(String paraName);
3) 基础的类与接口
a,Servlet接口
b,GenericServlet抽象类
c,HttpServlet抽象类
d,ServletConfig接口
e,ServletRequest接口,ServletResponse接口
f,HttpServletRequest接口,HttpServletResponse接口
g,ServletContext接口
setAttribute,getAttribute,removeAttribute
String getInitParameter(String paraName);
String getRealPath(String path);
三、状态管理
1、什么是状态管理
2、如何进行状态管理
3、cookie技术
1)什么是cookie?
2)创建cookie?
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
3)编码问题
URLEncoder.encode(String str,String code);
String URLDecoder.decode(String str,String code);
4)生存时间
cookie.setMaxAge(int seconds);
5)路径问题
cookie.setPath(String path);
6)限制
4、session技术
1)什么是session?
2)如何获得session?
a, HttpSession request.getSession();
b, HttpSession request.getSession(boolean flag);
3)session常用方法
a setAttribute,getAttribute,removeAttribute;
b,String getId();
4)session的超时
a, setMaxInactiveInterval(int seconds);
b,配置文件
5)删除session
session.invalidate();
四、数据库访问
1)如何使用jdbc访问数据库
2)dao
五、过滤器和监听器
1)什么是过滤器?
2)如何写一个过滤器?
3)初始化参数
a, <init-param>
b,String FilterConfig.getInitParameter(String paraName);
4)优先级
5)优点
6)什么是监听器?
7)如何写一个监听器?
六、上传文件(了解)
七、案例
员工管理
session验证
验证码
购物车
综合练习: