JavaWeb-过滤器、监听器常见应用
一、过滤器、监听器常见应用
监听器:GUI编程中经常使用;
package com.kuang.filter;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame("中秋节快乐"); // 新建一个窗体
Panel panel = new Panel(null); // 面板
frame.setLayout(null); // 设置窗体的布局
frame.setBounds(300,300,500,500); // 窗体坐标和宽高
frame.setBackground(new Color(0,0,255)); // 设置背景颜色
panel.setBounds(50,50,300,300); // 面板坐标和宽高
panel.setBackground(new Color(0,255,0)); // 设置背景颜色
frame.add(panel); // 把面板添加到窗体上
frame.setVisible(true); // 设置窗体为可见性
// 监听事件,监听关闭事件
frame.addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
System.out.println("打开");
}
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
System.out.println("未激活");
}
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.out.println("关闭ing");
// 有 0和 1
System.exit(0);
}
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
System.out.println("关闭ed");
}
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
System.out.println("激活");
}
});
}
}
用户登录之后才能进入主页!用户注销后就不能进入主页了!
-
登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>登录</h1> <!-- 地址前面需要加上项目名 --> <form action="/javaweb-filter/servlet/login" method="post"> <input type="text" name="username"> <input type="submit"> </form> </body> </html> -
验证用户登录密码
package com.kuang.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.kuang.util.Constant; // 登录页面 public class LoginServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取前端请求的参数 String username = req.getParameter("username"); System.out.println("aaa: --------------------> "+username); if (username.equals("admin")) { // 登录成功 req.getSession().setAttribute(Constant.USER_SESSION, req.getSession().getId()); resp.sendRedirect("/javaweb-filter/sys/success.jsp"); }else { // 登录失败 resp.sendRedirect("/javaweb-filter/error.jsp"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("123"); // TODO Auto-generated method stub doGet(req, resp); } } -
登录成功
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>主页</h1> <p><a href="/javaweb-filter/servlet/logout">注销</a></p> </body> </html> -
登录失败
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>错误</h1> <p><a href="/javaweb-filter/index.jsp">返回登录页面</a></p> </body> </html> -
过滤器
package com.kuang.filter; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.kuang.util.Constant; // 让用户不输入密码不能进入主页 public class SysFilter implements Filter{ public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // 把 ServletRequest强制转换成 HttpServletRequest HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; if (request.getSession().getAttribute(Constant.USER_SESSION)==null) { // 注意:/javaweb-filter/ 项目名前面必须要有 /,否则会循环重定向不会停下来 response.sendRedirect("/javaweb-filter/error.jsp"); } chain.doFilter(request,response); } public void destroy() { } } -
用户注销
package com.kuang.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.kuang.util.Constant; // 注销页面代码 public class LogoutServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Object user_session = req.getSession().getAttribute(Constant.USER_SESSION); if(user_session != null) { req.getSession().removeAttribute(Constant.USER_SESSION); resp.sendRedirect("/javaweb-filter/index.jsp"); } else { resp.sendRedirect("/javaweb-filter/index.jsp"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); } } -
提取此项目中的变量名
package com.kuang.util; public class Constant { // 用于提取项目中的变量名 public final static String USER_SESSION = "USER_SESSION"; } -
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>javaweb-filter</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 映射登录页面 -->
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.kuang.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/login</url-pattern>
</servlet-mapping>
<!-- 映射注销页面 -->
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.kuang.servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/servlet/logout</url-pattern>
</servlet-mapping>
<!-- 映射过滤器 -->
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.kuang.servlet.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
</web-app>

浙公网安备 33010602011771号