美文网首页JavaWeb
JavaWeb开发基础-路径、包含、过滤器

JavaWeb开发基础-路径、包含、过滤器

作者: 蘑菇v5 | 来源:发表于2018-11-16 15:55 被阅读17次

    【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!

    一、路径问题:

    两个路径:相对路径和绝对路径

    • 相对路径:

    相对于当前文件夹来设置路径,其中..表示上一级目录

    <a href="../../02/2.jsp">Link To 02</a>
    

    以上代码表示访问当前文件夹的上一级文件夹的上一级文件夹中的02文件夹中的2.jsp
    建议不要使用相对路径

    • 绝对路径:

    根据整个网站的根目录来确定绝对路径,使用/来指明根目录
    特别注意,在java中,/表示的不带有上下文路径,所以需要使用request.getContextPath()来获取上下文路径。

    <a href="<%=request.getContextPath() %>/01/1.jsp">Link To 01</a>
    

    在开发过程一般都是使用绝对路径

    二、包含问题:

    有两种包含方式:静态和动态, 实践中建议使用动态包含

    • 静态包含:

    <%@include file="/inc/header.jsp" %>,静态包含,直接把整个文件包含进来,在包含前不做任何处理

    图1
    • 动态包含:

    <jsp:include page="/inc/header.jsp"></jsp:include>,在包含之前会先对这个动态文件进行编译,之后把编译的结果以静态文件的形式包含进来

    图2

    注意:在包含文件时可以直接使用绝对路径,系统会自动加上上下文路径

    三、过滤器问题:

    • 过滤器介绍:

    Filter(过滤器)Servlet很类似,均需要进行相应的配置

    1、Filter的创建

    定义一个类让其实现Filter接口

    2、Filter的设置

    doFilter()方法中加入相应的拦截代码,加入了相应的拦截代码之后需要使用chain.doFilter(req,resp)让请求继续走

    3、Filter的配置

    web.xml中进行配置

     <filter>
      <filter-name>TestFilter</filter-name>
      <filter-class>org.itat.filter.MyFilter</filter-class>
      </filter>
     
      <filter-mapping>
      <filter-name>TestFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
    

    url-pattern表示要拦截哪些请求:

    • /*:表示拦截所有请求
    • /01/1.jsp : 表示仅仅只对01/1.jsp文件进行拦截
    • /01/* : 表示拦截01/这个文件夹中的所有信息

    特别注意:/01/*.jsp这种方式是不允许的,只允许以上三种方式

    • 使用过滤器解决字符编码的问题:

    步骤:定义一个CharacterEncodingFilter,在doFilter中使用request.setCharacterEncoding(xxx);来解决
    注意:当有多个Filter被定义的时候会每一个filter都执行,执行顺序按照web.xml中配置先后执行,为了让一些常量在配置文件中定义,可以使用<init-param>

    <filter>
      <filter-name>CharacterFilter</filter-name>
      <filter-class>org.itat.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>Char</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
      </filter>
    

    init-param就是用来定义相应的初始化参数,需要在Filterinit中通过config来获取

    @Override
      public void init(FilterConfig config) throws ServletException {
        charEncoding = config.getInitParameter("Char");//获取初始化参数
        if(charEncoding==null||"".equals(charEncoding)) {
           charEncoding = "UTF-8";
        }
      }
    

    charEncoding需要在doFilter中使用,所以将charEncoding定义成成员变量。

        chain.doFilter(request,response);
    
    • 使用过滤器根据正则表达式过滤访问地址:

    1、在初始化参数中传递一个正则表达式
    <init-param>
        <param-name>pattern</param-name>
        <param-value>.*\.jsp|.*Servlet</param-value>
      </init-param>
    

    .*\.jsp|.*Servlet表示匹配.jsp结尾和Servlet结尾的所有字符串

    2、获取浏览器的访问地址
    HttpServletRequest req = (HttpServletRequest)request;
    String url = req.getRequestURI();//获取浏览器的访问地址
    

    参数中是ServletRequestServletRequest中没有getRequestURI方法getRequetURL方法是在HttpServletRequest中,所以需要进行强制类型转换(HttpServletRequest req = (HttpServletRequest)request;

    3、判断是否匹配
    if(url.matches(pattern)) {
           System.out.println(url);
           System.out.println(url.matches(pattern));
           request.setCharacterEncoding(charEncoding);//修改字符编码
        }
    

    相关文章

      网友评论

        本文标题:JavaWeb开发基础-路径、包含、过滤器

        本文链接:https://www.haomeiwen.com/subject/waymfqtx.html