----------------------------------------------分割线----------------------------------------------------------------
---------------------------------2017年8月10日10:08:20-----------------------------------------------
访问顺序为1—>2—>3—>4,其中2和3的值必须相同。
访问原理:首先浏览器访问地址通过servlet映射(servlet-mapping)找到这个url的servlet名字,即是上图2的名字:Hello,再到已经配置好的servlet标签匹配到与之servlet-name相同的servlet,进而找到这个servlet所对应的class文件!
值得注意的是:无论3.0版本后注解的方式引用,使得我们在新创建servlet后不需要在web.xml里配置了,取而代替的方式是:
3.0版本指的是:
url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。
还有,web.xml 的 / 表示的是http://localhost:8080/ + 工程名 ,而.jsp页面的action,加了/表示绝对路径http://localhost:8080/,没有加 / 表示的是相对路径
----------------------------------------------分割线----------------------------------------------------------------
---------------------------------2017年8月12日13:44:56-----------------------------------------------
Filter 过滤器:
一:对指定页面过滤:
<filter><filter-name>LoginFilter</filter-name>
<filter-class>com.qingshixun.login.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern> /welcome.jsp</url-pattern>
</filter-mapping>
二:对所有页面过滤:
可能会造成对页面样式过滤:解决办法如下
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse) response;
//获取请求界面的路径
String a=req.getRequestURI();
if(a.contains(".css") || a.contains(".js") || a.contains(".png")|| a.contains(".jpg")){
//如果发现是css或者js文件,直接放行
chain.doFilter(request, response);
}
}
----------------------------------------------分割线----------------------------------------------------------------
---------------------------------2017年8月15日22:13:39-----------------------------------------------
Filter使用心得:在使用filter进行用户安全性过滤的时候,由于使用了/*对登录界面进行了一个死循环过滤!思维一开始局限于过滤就单纯的放行login请求和login.jsp(这是对页面和请求的一个选择性过滤) 另一种方法是通过session中存的值是否为空来放行!