过滤器
过滤器作用
不需要设置编码。可以写很多个过滤器
过滤器包:filer
使用:
1.实现filter接口(servlet类)
2.方法
被销毁:destory
@Override
public void destroy() {
// TODO Auto-generated method stub
}
请求被过滤器拦截:doFilter
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {
servletRequest没有session。所以需要转换成HttpServlet
//设置编码
//登录验证
//放行
arg2.doFilter(arg0,arg1)
}
- 列子:
package com.zking.filer;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter(
filterName = "myFilter",//配置过滤器的名字,等同于<filter-name>myFilter</filter-name>
urlPatterns = {"/*"},//配置过滤多个页面
//配置初始化参数
initParams = {
@WebInitParam(name="name",value="张三"),
@WebInitParam(name="sex",value="男")
}
)
public class MyFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
//转换参数类型,arg0和arg1
HttpServletRequest req = (HttpServletRequest)arg0;
HttpServletResponse resp = (HttpServletResponse)arg1;
//设置编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//配置out
PrintWriter out = resp.getWriter();
//配置session
HttpSession session = req.getSession();
//访问登录页面的请求不能被过滤
//获取过滤器所拦截的请求,到底是什么请求?
String uriPath = req.getRequestURI();
//indexOf("要找到的字符串")如果找不到返回-1
if(uriPath.indexOf("login.jsp")!=-1) {//找到了,意味着该请求是访问login.jsp
//放行/继续前进
arg2.doFilter(arg0,arg1);
return ;
}
if(uriPath.indexOf("signup.jsp")!=-1) {//找到了,意味着该请求是访问signup.jsp
//放行/继续前进
arg2.doFilter(arg0,arg1);
return ;
}
//登录验证
Object name = session.getAttribute("uname");
if(null != name) {//已经登录
//放行/继续前进
arg2.doFilter(arg0,arg1);
}else {//没有登录
out.print("<script> alert('登录失败');location.href='"+req.getContextPath()+"/home/signup.jsp';</script>");
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
过滤器初始化/过滤器被创建:
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
//获取配置的初始化参数
getIntoParamter()
3.配置过滤器(位置:1.web.xml/2.web注解配置)
- 配置过滤器的初始化参数:
<into-param>
//参数名
<param-name></param-name>
//参数值
<param-value></param-value>
<into-param>
- 设置过滤器要过滤的请求
<url-pattern>地址</url-pattern>
过滤单个请求:<url-pattern>/index.jsp</url-pattern>
过滤指定后缀名请求(过滤整个带jsp后缀名的项目):<url-pattern>*.jsp</url-pattern>
过滤指定目录里面的请求:<url-pattern>/home/index.jsp</url-pattern>
过滤整个项目所有请求:<url-pattern>/*</url-pattern>
配置单个请求:WebFilter("/index.jsp")
配置多个请求:
WebFilter(
filterName="";
urlPatterns={"/*"};//配置过滤多个
配置过滤器的初始化参数:
initParams = {
@WebInitParam(name="name",value="张三"),
@WebInitParam(name="sex",value="男")
}
)
监听器
定义
- 一个实现特定接口的普通java程序,这个java程序专门用来监听另一个就java对象的方法的调用,或属性的改变当被监听对象发送上述事件后,监听程序的某个方法就会被执行。
- 监听器包:listener
使用:
1:实现ServlrtContextListtenner
2.配置监听器(位置:1.web.xml/2.web注解配置)
<listenner>
<listenner-class>地址 </listenner-class>
</listenner>
@WebSevlet("")
3.方法
- 应用程序被销毁
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
- 应用程序初始化
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}