zoukankan      html  css  js  c++  java
  • 过滤器 拦截器 登录login实例

    当请求来的时候,首先经过拦截器/过滤器,在经过一系列拦截器/拦截器处理后,再由再根据URL找到Servlet.执行servlet中的代码.

    过滤器:按照过滤的对象类型的不同,可分为按资源名过滤和按请求的分类过滤.

    按请求的分类过滤:

      <filter-mapping>
          <filter-name>CharFilter</filter-name>
          <url-pattern>/*</url-pattern>
          <dispatcher>ERROR</dispatcher>
          <dispatcher>ASYNC</dispatcher>
          <dispatcher>FORWARD</dispatcher>
          <dispatcher>INCLUDE</dispatcher>
          <dispatcher>REQUEST</dispatcher>
       </filter-mapping>

    首先建一个dynamic web project

    然后在WebContent或webroot文件夹下面的WEB-INF文件夹下面再建两个文件夹classes和lib.

    classes文件夹用来存放加载的字节码文件,lib文件夹用于存放jar包

    接下来在WEB-INF目录下新建一个web.xml文件,用于配置拦截器信息和servlet.

    然后处理请求页面,可以建一个文件夹专门存放.jsp文件或者.html文件

    下面看登录信息字符串解码的程序:

    建一个Filter的类,该类实现了Filter接口:

     1 package test.filter;
     2 import java.io.IOException;
     3 import javax.servlet.Filter;
     4 import javax.servlet.FilterChain;
     5 import javax.servlet.FilterConfig;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.ServletRequest;
     8 import javax.servlet.ServletResponse;
     9 public class CharFilter implements Filter {
    10     /**
    11      * 加载配置的方法
    12      */
    13     public void init(FilterConfig config) throws ServletException {
    14         System.out.println("CharFilter.init()");
    15     }
    16     /**
    17      * 执行拦截的方法
    18      */
    19     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    20             throws IOException, ServletException {
    21         // 将请求到的数据转化为UTF-8 将服务器输入到jsp的汉字进行转码
    22         response.setContentType("text/html; charset=utf-8");
    23         // 将form表单中的内容提交给服务器时进行解码
    24          request.setCharacterEncoding("utf-8");
    25         // 将拦截后处理过的内容转发给下一个filter
    26         chain.doFilter(request, response);
    27     }
    28     /**
    29      * 销毁拦截器
    30      */
    31     public void destroy() {
    32     }
    33 }

    下来在进行servlet中处理业务逻辑:

    代码如下:

    package test.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    @WebServlet("/hello")
    public class CharServlet extends HttpServlet{
    
        private static final long serialVersionUID = 1L;
            protected void service(HttpServletRequest request, 
                HttpServletResponse response) throws ServletException, IOException {
                String parameter = request.getParameter("username");//获取name参数
                String  pas = request.getParameter("pas");//获取password参数
        
                System.out.println(parameter+"密码:"+pas);
                if("huike".equals(parameter)&&"111".equals(pas)){
                    request.getRequestDispatcher("/JSP/login.jsp").forward(request, response);
                }else{
                    PrintWriter writer = response.getWriter();
                    writer.write("账户或密码错误");    
                    writer.close();
                }
                
            }
    }

    登录界面的.jsp文件

    <%@ page import="java.util.UUID" %>  <!-- 导入UUID的jar包 -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>hello world!!你好</h1>
            <form action="/Charset/hello" method="POST">
                    账户:<input type="text" name = "username"   placeholder ="hello world" required/><br/><br/>
            密码:<input type="password" name = "pas" /><br/><br/>
            <input type="submit" />
        </form>
    </body>
    </html>

    跳转页面的.jsp文件

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html >
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>login</title>
    </head>
    <body>
    <h1>login</h1>
        ${name} <!-- 通过servlet中设置的键获取name的值 ,进行参数传递-->
        <a>你好</a>
    </body>
    </html>

    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_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>Charset</display-name>
          <filter>
              <filter-name>CharFilter</filter-name>
              <filter-class>test.filter.CharFilter</filter-class> //filter类的权限定名称
          </filter>
          <filter-mapping>
              <filter-name>CharFilter</filter-name>
              <url-pattern>/*</url-pattern>
          
          </filter-mapping>
    </web-app>

    访问URL:http://localhost:8080/工程名/放.jsp文件的文件夹名/XX.jsp,另:在WEB-INF下面的jsp文件不能直接访问到

  • 相关阅读:
    自学python:python学习笔记之Ubuntu 16.04网络的配置
    Python 3 中字符串和 bytes 的区别
    Python map学习笔记
    Python lambda 知识点
    Eclipse中Activiti插件的安装
    Activiti简介
    Jquery ajax回调函数不执行
    Spring Boot安装及入门实现
    mysql给root开启远程访问权限
    linux下安装Tomcat
  • 原文地址:https://www.cnblogs.com/huike/p/6520480.html
Copyright © 2011-2022 走看看