作者:邹爱红,撰写时间:2019年05月28日
监听器listener:
监听器listener:随着web项目的开始而开始,web项目的结束而结束
最先开始加载web.xml文件,随着webxml同时加载,里面的参数同时加载到服务器里。
主要作用是:将重复的代码简化,做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
如何获取web.xml的参数:
* 将web.xml里面初始的值获取到
比如说content里面的值
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
- ServletContextListener 监听ServletContext对象
- public class DemoListener implements ServletContextListener{//需要实现接口ServletContextListener定义类实现ServletContextListener
实现里面的两个抽象方法:
销毁方法
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// 应用监听器的销毁方法
}
把什么参数放进来就执行这个方法contextInitialized:
@Override
public void contextInitialized(ServletContextEvent serEvent) {
//这个方法能过获取到web.xml的初始值
//用初始化的这个对象赋值
serEvent.getServletContext();
String isername=serEvent.getServletContext().getInitParameter("username");
//把获取到的东西扔到项目中
//怎么调用去用它
serEvent.getServletContext().setAttribute("username", isername);
}
ServletContextEvent初始化了一个对象,通过这个对象,获取到我们的getServletContext,
第二种
- public class ListenerRequest implements ServletRequestListener {//实现ServletRequestListener
//这个解决了无法获取项目名的问题
@Override
public void requestDestroyed(ServletRequestEvent arg0) {//在请求调用的时候才会调用的
}
@Override
public void requestInitialized(ServletRequestEvent serEvent) {
// ServletRequestEvent通过这个对象处理,可以获取到ServletRequest对象
serEvent.getServletRequest();
String otx=serEvent.getServletContext().getContextPath();
System.out.println(otx);
serEvent.getServletRequest().setAttribute("otx", otx);
}
ServletRequestEvent可以获取到servlet的requst对象,
用getservletrequest方法。
然后去配置web.xml文件
<listener>
<listener-class>com.ly.listener.ListenerRequest</listener-class>
</listener>
- 过滤器:
主要目的:过滤字符编码;其次,做一些应用逻辑判断等.
Filter跟web应用一起启动
当web应用重新启动或销毁时,Filter也被销毁
Filter对浏览器传递过来的参数过滤,
浏览器传给filter,处理完以后,将请求返回给content层
- implements 实现Filter接口 , 引用import javax.servlet.Filter;
- dofilter方法最重要的两个参数就是,ServletRequest,ServletResponse
public class FilterDemo implements Filter{
实现里面的三个方法:
@Override
public void destroy() {
// System.out.println("准备销毁...");
}
@Override
public void doFilter(ServletRequest serRequest, ServletResponse arg1,FilterChain chain) throws IOException, ServletException {
serRequest.setCharacterEncoding("uft-8");解决乱码
// 强制类型转换
HttpServletRequest request = (HttpServletRequest) serRequest;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
//通过点出session,获取到它的username
System.out.println(session.getAttribute("username"));
System.out.println("filter执行成功");
chain.doFilter(serRequest, arg1);//将请求传回去
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("初始化...");
}
}
<filter>
配置路径
<filter-name>FilterEconding</filter-name>
<filter-class>com.ly.filter.FilterEconding</filter-class>
</filter>
再配置路由:
<filter-mapping>
<filter-name>FilterEconding</filter-name>
<!-- * 代表截获所有的请求想要它作用到哪里就到哪 /servlet/*-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>