当程序员,需要的知识点 - 草稿

自学java web


对于程序员来说,我们从最开始的java se 到后来的java ee ,一路上上也是费了不少力气,今天来为大家讲一下我们在java web 中的 组件 filter 和Listener 。


对于这两个来说,我们应该不陌生,在我们访问网页的时候,会时长看到提示框,让我们先去登录,然后再去访问网页,今天给大家讲的就是,这其中是怎么去实现的呢, 希望我们大家学习了jsp后,做一个登录系统后好吸收这点知识。

首先我们先要去创建一个loginfilter,

之后我们在@WebFilter中修改路径, 为loginFilter,对于filter 来说,拥有三个生命周期,分别是 init ,dofilter,destory


1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源

2. doFilter:每一次请求被拦截资源时,会执行。执行多次

3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

* 拦截路径配置:


1. 具体资源路径: /index.jsp  只有访问index.jsp资源时,过滤器才会被执行

2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行

3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行

4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

然后我们分析一下  过滤器filter 怎样的执行原理

我们来讲一下代码及过程


1. 我们先来强制转换一下req

Httpservletrequest request =(HttpServletRequset) req;

2. 获取一下登录的资源路径

String uri =request.getRequsetURI();

3. 判断是否包含登录相关路径资源,要注意排除掉前端页面的css ,js ,图片路径

if (uri.contains("/login.jsp")|| uri.contains("/loginServlet") || uri.contains("/css/" )||uri.contains("/js/")||    uri.contains("/fonts/")){

    //包含,用户就是登录,放行

chain..dofilter(req,resp);

}else{

  //不包含,需要用户验证是否登录

//3. 从获取session中获取user

Objiect user =request.getSession().getAttribute("user");

if(user !=null){

  //登录放行

chain.doFilter(req,resp);

}else{

//没有登录,跳转登录页面

request.setAttribute("login_msg","去登录");

request.getRequestDispatcher("/login.jsp").forward(request,resp);

}

}


这样我们的filter的业务逻辑代码就实现,,我们平时想要访问的时候,必须要先去登录,才能看到其中的东西。就跟我们现在 在网页中访问的图片一样,需要登录之后,才能下载以及查看。

今天大家好好看看,这些代码 ,,之后我们会给大家从分享一下 干货,以方便大家好好学习。

你可能感兴趣的:(当程序员,需要的知识点 - 草稿)