文章目录
1,Filter过滤器(重点) 监听器
1过滤器(重点)
Filter: 过滤器, 用来过滤网站的数据
- 处理中文乱码
- 登录验证等…
创建filter步骤
步骤1,maven依赖包
-
<dependencies> <!--Servlet依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <!--jsp依赖--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <!--jstl表达式依赖--> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!--standard标签库--> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!--连接数据库--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies>
步骤2,实现filter接口 (注意是javax.servlet 包下面的) 重新方法
-
implements Filter
package com.fff.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
//初始化: 服务器启动的时候初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("cef初始化了");
}
//Chain : 链
//过滤器中的所有代码, 过滤特定请求的时候都会执行
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
System.out.println("cef执行前");
filterChain.doFilter(servletRequest, servletResponse);//让我们的请求继续走, 如果不写, 程序到这里就被拦截停止
System.out.println("cef执行后");
}
//销毁: web服务器关闭的时候, 过滤器会销毁
@Override
public void destroy() {
System.out.println("cef销毁了");
}
}
步骤3,配置过滤器(web.xml)
<filter>
<filter-name>charcter</filter-name>
<filter-class>com.fff.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charcter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
2,监听器
实现一个监听器接口
- 1编写一个监听器: 实现监听器的接口
- 2web.xml中注册监听器
public class OnlineCountListener implements HttpSessionListener {
//创建session监听
//一旦创建session就会触发一次这个事件
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
System.out.println(se.getSession().getId());
Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
if (onlineCount==null){
onlineCount = new Integer(1);
}else{
onlineCount+=1;
}
context.setAttribute("OnlineCount",onlineCount);
}
//销毁session监听
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
}
}
<!--注册监听器-->
<listener>
<listener-class>com.fff.listener.OnlineCountListener</listener-class>
</listener>
3.过滤器, 监听器常见应用
需求: 用户登录后才能进入主页, 用户注销后不能进入主页
1.用户登录之后, 向session中放入用户数据
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("zs".equals(username)&&"123".equals(password)){
//登录成功, session中存入ID
req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
//跳转到success页面
resp.sendRedirect(req.getContextPath()+"/sys/success.jsp");
}else {
//失败直接导error页面
resp.sendRedirect(req.getContextPath()+"/error.jsp");
}
}
2.进入主页时要判断用户是否已经登录(过滤器)
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//强转req ,resp 便于获取session
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
Object session = request.getSession().getAttribute(Constant.USER_SESSION);
if (session==null){
//如果不存在session说明没有登录, 直接跳转error页面
response.sendRedirect(request.getContextPath()+"/error.jsp");
}
filterChain.doFilter(servletRequest,servletResponse);
}
3,配置web.xml
<filter>
<filter-name>sys</filter-name>
<filter-class>com.fff.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sys</filter-name>
<!--过滤/sys/目录下的所有页面-->
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
2.MVC三层架构
MVC : Model, view, Controller
- Model
- 业务处理: 业务逻辑(service)
- 数据持久层: CRUD (Dao)
- View
- 展示数据
- 提供链接, 发齐Servlet请求
- Controller
- 接收用户的请求:
- 交给业务层处理对应的代码
- 控制视图的跳转