• JSP网站开发基础总结《十二》


      前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握。具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文乱码的问题,内容不多,大家只要简单一练习便可以掌握。

     1、登录表单:

      和一般的表单没有任何区别,大家可以新建一个Login.jsp作为登录界面,在其中添加一个表单即可。

    <body>
        <center>
            <form method="post" action="<%=request.getContextPath() %>/servlet/login" enctype="application/x-www-form-urlencoded">
                姓名:<input type="text" name="name">
                密码:<input type="password" name="pwd">
                <input type="submit" value="登录">
                <input type="reset" value="重置">  
            </form>
        </center>
      </body>

     2、select:

      既然是登录,就一定少不了我们select类,因为我们仅仅讨论过滤器的作用,在这里就不再连接数据库了,大家如有需要可以参看我的前几篇博客,对于数据库连接,有详细的讲解。我们的select代码:

    public class login extends HttpServlet {
    
        /**
         * Constructor of the object.
         */
        public login() {
            super();
        }
    
        /**
         * Destruction of the servlet. <br>
         */
        public void destroy() {
            super.destroy(); // Just puts "destroy" string in log
            System.out.println("销毁select");
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            doPost(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");//防止中文乱码
            response.setCharacterEncoding("utf-8");//防止中文乱码
            String username = request.getParameter("name");//获得表单中用户的填写的姓名
            String pwd = request.getParameter("pwd");//获得表单中用户输入的密码
            if("小米".equals(username)&&"admin".equals(pwd)){//身份判断
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }else{
                response.sendRedirect(request.getContextPath()+"/error.jsp");
            }
        }
    
        /**
         * Initialization of the servlet. <br>
         *
         * @throws ServletException if an error occurs
         */
        public void init() throws ServletException {
            System.out.println("初始化select");
        }
    
    }

     2、success.jsp与error.jsp:

      为了达到极佳的用户体验,我们这里新建两个jsp界面,用于给用户反馈登录成功与否提醒。

     3、创建Filter类:

    public class firstFilter implements Filter {
    
        FilterConfig config ;
        
        public void destroy() {
    
        }
    
        public void doFilter(ServletRequest Request, ServletResponse Response,
                FilterChain arg2) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest)Request;
            
            HttpServletResponse res = (HttpServletResponse)Response;
            
            //防止中文乱码
            req.setCharacterEncoding("utf-8");
            res.setCharacterEncoding("utf-8");
            
            //Filter设置字符集
            //req.setCharacterEncoding(config.getInitParameter("lanager"));
            //res.setCharacterEncoding(config.getInitParameter("lanager"));
            
            HttpSession session = req.getSession();
            String username = (String) session.getAttribute("username");
            
            //System.out.println(new String(username.getBytes("ISO-8859-1"),"utf-8"));//防止中文乱码
            
            System.out.println(username);
            
    //        if(req.getRequestURI().indexOf("index.jsp")!=-1 || req.getRequestURI().indexOf("servlet/login")!=-1){
    //            arg2.doFilter(Request, Response); 
    //            return ;
    //        }
            
            String noLoginPath = config.getInitParameter("noLoginPath");//获得我们设置的默认值
            if(noLoginPath!=null){
                String [] NoPath = noLoginPath.split(";");
                for(int i=0; i<NoPath.length; i++ ){
                    if(req.getRequestURI().indexOf(NoPath[i])!=-1){
                        arg2.doFilter(Request, Response); 
                        return ;
                    }
                }
            }
            
            if(username!=null){
                arg2.doFilter(Request, Response);
                //res.sendRedirect(req.getContextPath()+"/success.jsp");
            }else{
                res.sendRedirect(req.getContextPath()+"/index.jsp");
            }
        }
    
        public void init(FilterConfig arg0) throws ServletException {
            config = arg0;
        }
    
    }

      这里我们第一次使用了init()方法中的FilterConfig对象,该方法具体的作用是什么呢?我们在web.xml中配置我们的Filter时,设置的默认字段,可以通过其来获得。

     4、web.xml配置:

      这里我们第一次设置默认字段。

      

     5、运行测试:

      启动我们的项目,在地址栏输入工程名:http://localhost:8080/Test/index.jsp,进入登录界面,当我们登录成功后,复制一下地址栏的地址,然后打开一个新的浏览器,在地址栏直接访问刚刚拷贝的地址,我就会发现我们又回到了登录界面,这就表示我们的过滤器起作用了。当然我们的过滤器的功能远不止这些,剩下的就要靠到家自己摸索了。

     6、中文问题:

      在上面的代码中已经为大家介绍了一下有关防止中文乱码的问题,大家可以自行了解。

      到今天我们关于JSP基础知识的总结就真正的告一段落了,如果以上十二篇博客你均已学会,我保证做一个简单的动态网站不是什么问题,当然想做好一个网站,只有这些是远远不够的,大家还需要学习div+css以及JavaScript的知识,所谓师傅领进门,修行靠个人,祝大家在程序猿这条路上愈来愈好。

  • 相关阅读:
    如何写一个邮件模板页面
    java集合List,Set,Map等集合
    参悟python元类(又称metaclass)系列实战(二)
    参悟python元类(又称metaclass)系列实战(一)
    对Python"一切皆对象"的小参悟
    Linux设置ntp客户端
    JMeter BeanShell向文件中写入内容
    JMeter处理接口签名(sign)
    JMeter处理动态的签名内容
    多线程总结,ThreadPoolExecutor创建线程池,
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/4355318.html
Copyright © 2020-2023  润新知