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("激活");
			}
		});
	}
}

用户登录之后才能进入主页!用户注销后就不能进入主页了!

  1. 登录页面

    <%@ 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>
    
  2. 验证用户登录密码

    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);
        }
    }
    
  3. 登录成功

    <%@ 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>
    
  4. 登录失败

    <%@ 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>
    
  5. 过滤器

    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() {
    
        }
    }
    
  6. 用户注销

    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);
        }
    }
    
  7. 提取此项目中的变量名

    package com.kuang.util;
    
    public class Constant {
        // 用于提取项目中的变量名
        public final static String USER_SESSION = "USER_SESSION";
    
    }
    
  8. 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>
posted @ 2021-02-21 09:49    阅读(69)  评论(0)    收藏  举报