网络云盘项目

  • 初始化过程:

    1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。

    2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。

    3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。

    4. 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。

    5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。

    6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。

由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet

1.<context-param>

作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。

param-name 设定上下文的参数名称。必须是唯一名称

param-value 设定的参数名称的值

Web.xml配置详解之context-param-阿里云开发者社区 (aliyun.com)

2.<listener>
        <listener-class>

(99条消息) JavaWeb之监听器Listener_XeonYu的博客-CSDN博客

监听器实际上就是接口回调。

作用:
在JavaWeb中Listener是Servlet规范定义的一种特殊类,主要用于监听3个作用域的创建、销毁,以及其属性变更

Servlet中的三个作用域分别为:

HttpServletRequest
HttpSession
ServletContext
注意pageContext表示jsp整个页面,不属于Servlet中的作用域

应用场景:

统计在线人数
页面访问量
应用启动时做一些初始化工作等等
 

1)创建

listener.java

(2)实现

默认实现了ServletContextListenerHttpSessionListener和**HttpSessionAttributeListener **3个接口,这3个接口是比较常用的,所以IDE自动帮我们实现了这些接口。

实际上3个作用域对应的监听器是不一样的

HttpServletRequest作用域对应的监听器是**ServletRequestListener(监听request的创建和销毁)和ServletRequestAttributeListener(监听request中属性的变更)**
HttpSession作用域对应的监听器是**HttpSessionListener(监听session的创建)和HttpSessionAttributeListener(监听session中属性的变更)**
ServletContext作用域对应的监听器是**ServletContextListener(监听servletContext的创建于销毁)和ServletContextAttributeListener(servletContext中属性的变更)**
 

 listener-class标签是我们什么的listener的全路径,该类需要实现系统已经实现的listener接口。
​​​​​​(99条消息) web学习:web.xml使用:listener标签的使用_程序员小孩的博客-CSDN博客_listener-class

3.    <filter>
      <filter-mapping>

filter元素向系统注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL。

(99条消息) Java Web之过滤器(Filter)_XeonYu的博客-CSDN博客_java过滤器

过滤器(Filter)
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理

大概流程图如下

应用场景:
自动登录
统一设置编码格式
访问权限控制
敏感字符过滤等
 

(1创建Filter

Java中Servlet Filter配置(web.xml详解) (51gjie.com)

XML或者filter.java

1. icon  可选元素,它声明IDE能够使用的一个图象文件。

2. filter-name  必需元素,它给过滤器分配一个选定的名字。

3. display-name  可选元素,它给出IDE使用的短名称。

4. description  可选元素,它给出IDE的信息,提供文本文档。

5. filter-class  必需元素,它指定过滤器实现类的完全限定名。

6. init-param  可选元素,它定义可利用FilterConfig的getInitParameter方法读取的初始化参数。单个过滤器元素可包含多个init-param元素。

输入过滤器名称,跟创建Servlet一样,这里我们直接使用 @WebFilter 注解,不再去web,xml中进行配置了。

(2 顺序

BFilter和AFilter是在web.xml中声明的,且BFilter的<filter-mapping>在前,故BFilter在AFilter之前执行。
ABFilter和CharsetFilter是通过注解声明的,故他俩在BFilter和AFilter之后执行,但是ABFilter的名称以A开头,故在CharsetFilter之前执行

(3访问权限控制

  1. 登录时将登录的账号密码保存到cookie中,下次访问时携带账号和密码,过滤器中进行校验
  2. 用户没有登录直接访问主页时,要跳转到登录页面
  3. 登录过滤器不对登录页面进行过滤

这里主要看一下LoginFilter的代码

我们在LoginFilter中对非登录页面的其他jsp都会进行过滤,判断cookie中是否携带了account和pwd。
如果有这两个数据表示之前登录过,那么对数据进行校验,正确的话就进行下一个操作。
否则的话,跳转到登录界面

4.

 <servlet>

<servlet-mapping>

Servlet配置

配置Servlet有两种方式:

(1). 在Servlet类中使用@WebServlet Annotation进行配置。

(2). 在web.xml文件中进行配置。

web.xml servlet、servlet-mapping配置 - 炎泽 - 博客园 (cnblogs.com)

5.

<welcome-file-list>

welcome-file-list的工作原理是,按照welcome-file的.list一个一个去检查是否web目录下面存在这个文件,如果存在,继续下面的工作,先去webcontent(这里是Eclipse的工程目录根目录)下是否真的存在index.html这个文件,如果不存在去找是否存在index.jsp这个文件,以此类推。

      还要说的是welcome-file不一定是html或者jsp等文件,也可以是直接访问一个action。就像我上面配置的一样,但要注意的是,一定要在webcontent下面建立一个index.action的空文件,然后使用struts配置去跳转,不然web找不到index.action这个文件,会报404错误,原因就是我之前说的那样。

      如果配置了servlet的url-pattern是/*,那么访问localhost:8080/会匹配到该servlet上,而不是匹配welcome-file-list;如果url-pattern是/(该servlet为默认servlet),如果其他匹配模式都没有匹配到,则会匹配welcome-file-list。如果访问到了welcome-file,项目会自动跳转到欢迎页!

/和 /* 对于所用请求都拦截,但是 / 对于 .jsp 的不拦截,直接访问到真实的jsp页面。 

web.xml中的welcome-file-list标签作用 - 千里之外kb - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值