【声明:】本文是作者(蘑菇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>
在开发过程一般都是使用绝对路径
二、包含问题:
有两种包含方式:静态和动态, 实践中建议使用动态包含
-
静态包含:
图1
<%@include file="/inc/header.jsp" %>
,静态包含,直接把整个文件包含进来,在包含前不做任何处理
-
动态包含:
图2
<jsp:include page="/inc/header.jsp"></jsp:include>
,在包含之前会先对这个动态文件进行编译,之后把编译的结果以静态文件的形式包含进来
注意:在包含文件时可以直接使用绝对路径,系统会自动加上上下文路径
三、过滤器问题:
-
过滤器介绍:
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
就是用来定义相应的初始化参数,需要在Filter
的init
中通过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();//获取浏览器的访问地址
参数中是ServletRequest
,ServletRequest
中没有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);//修改字符编码
}
网友评论