web.xml配置详解
admin
2024-04-16 03:23:13
0

参考:

  • XML 教程

1、头文件

参考:

  • XML:文件头部xmlns详解
  • XML 中的 xmlns、xmlns:xsi、xsi:schemaLocation


  • xmlns:xsi , xmlns, xsi:schmeLocation 这些看上去相近的属性是什么含义, 为什么他们的值是不一样的 URL?
  • 这些 URL 是否对应一些可以访问的资源,对于该文件的解析是否会需要下载这些 URL 对应的资源?

①、xmlns:h="http://xmlns.jcp.org/xml/ns/javaee"
h元素定义一个命名空间,"http://xmlns.jcp.org/xml/ns/javaee"是标识该空间的唯一字符串(常采用URL形式)
②、xmlns="http://xmlns.jcp.org/xml/ns/javaee"
默认空间的唯一标识符"http://xmlns.jcp.org/xml/ns/javaee"

对于命名空间的标识符, URI 的作用仅仅是保证唯一性, 它并不需要对应一个可以访问的资源或文件 ! 但是, 有很多公司都会让namespace 的 URI 指向一个包含该命名空间信息的网页。

③、xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
④、xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
根据之前的知识我们可以理解, xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD(XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。

注: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器

这行的语法其实是, xsi:schemaLocation = "键" “值”,即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。

前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已。

后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容。

例:



  • xmlns="http://www.springframework.org/schema/beans"就是定义了一个默认命名空间, xmlns 的值可以随便改,只要是唯一的就行,如果更改了这里的值,下面的xsi:schemaLocation中的也要修改为对应的值。
  • xmlns:context="http://www.springframework.org/schema/context"就是定义了一个 context 的命名空间,使用 context 下的元素,需要加上 context 前缀。
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",创建了一个 xsi 命名空间,可以通过xsi:schemaLocation来定义 xsd 文件的位置,以便 XML 解析器解析 XML 文件。

2、配置欢迎页面

wecome1.jspwecome2.jsp欢迎页面

上面代码中就配置了两个欢迎页面 wecome1.jsp 和 wecome2.jsp,显示时按照配置顺序显示,如果能找到 wecome1.jsp 文件就显示该文件,如果找不到就找第二个,依次类推。

欢迎页面是用于访问 web 工程时,只给了根名,没有给出具体的页面,这时就回去访问配置的欢迎页面,如果没有配置欢迎页面,不同的应用服务器可能会有不同的行为。对于 Tomcat 来说,会默认先查找 index.html 文件,如果找到了,就将其返回给浏览器;如果没有找到,就继续查找 index.jsp 文件,如果都没有找到,那么 Tomcat 就会显示 The requested resource is not available 的页面。

欢迎页面只是在没有给出具体的访问页面时会被用到,如果指定了具体页面,只要访问的路径正确,是可以正常访问的。

3、Servlet 配置

Servlet命名和定制URL

TestServletcom.yiyu.servlet.showAllServletTestServlet/TestServlet

:注册的名字
:配置的 Servlet 的全类名
:为这个 Servlet 映射一个对外访问路径
servlet 和 url-pattern 之间的关系是 一对多的关系。

4、Filter 配置

参考:

  • web.xml filter配置

过滤器配置

Filter1D2020128.TestFilterFilter1/TestServletFilter1/*

  • Filter 的 url-pattern 中配置的路径是访问已经存在的网络资源,如静态页面、jsp、servlet等。
  • filter 和 url-pattern 之间的关系是 多对多的关系。即,Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。(多个 filter 会根据 web.xml 中配置的顺序组成 filter 链)。

常用场合:
(1)认证Filter
(2)日志和审核Filter
(3)图片转换Filter
(4)数据压缩Filter
(5)密码Filter
(6)令牌Filter
(7)触发资源访问事件的Filter
(8)XSLT Filter
(9)媒体类型链Filter

此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁

过滤器生命周期:初始化init() → 过滤doFilter() → 析构(销毁)destroy()
过滤器有四种拦截方式!分别是:REQUEST、FORWARD、INCLUDE、ERROR。
过滤器链 顺序:按照web.xml中配置的顺序

4.1、如何创建Filter?

类似于servlet,需两步
第一步:创建Filter处理类(一般我们都用现有的)
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1) void init(FilterConfig config):用于Filter的初始化。FilteConfig用于访问Filter的配置信息。
(2) void destroy():Filter销毁前的操作,例如完成某些资源的回收。
(3) void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):
实现过滤功能的核心方法,实现对请求request进行预处理,也可以实现对服务器响应response进行后处理—它们的分界线为是否调用了chain.doFilter(request,response),执行该方法之前,即对用户请求request进行预处理,执行该方法之后,即对服务器响应response进行后处理。

第二步:Web.xml文件中配置Filter
Filter配置与Servlet的配置非常相似,区别在于Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL。配置Filter有两种方式:
(1). 在Filter类中通过Annotation进行配置。
(2). 在web.xml文件中通过配置文件进行配置。

初始化参数

InitParamServletInitParamServletencodingutf-8helloween		passwordadmin			adminbabyface	babyface1	InitParamServlet/initParamServlet

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {String username = request.getParameter("username");String password = request.getParameter("password");Enumeration params = this.getInitParameterNames(); // 所有的初始化参数名称while (params.hasMoreElements()) {String nameParam = (String) params.nextElement(); // 获取参数名String valueParam = this.getInitParameter(nameParam); // 获取参数值// 如果用户名,密码匹配则显示notice.htmlif (nameParam.equalsIgnoreCase(username) && valueParam.equalsIgnoreCase(password)) { request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response);return;}}this.doGet(request, response); // 若username,password不匹配,显示登录页面。}

使用到了枚举类型: Enumeration params = this.getInitParameterNames();

  1. 获取web.xml中所有的参数名: this.getInitParameterNames();
  2. 对枚举的遍历: while (params.hasMoreElements()){ …}
  3. 获取下一个元素: params.nextElement();
  4. 获取名称对应的值: getInitParameter(nameParam);
  5. 重定向: request.getRequestDispatcher(“/WEB-INF/notice.html”).forward(request,response);

相关内容

热门资讯

平板安卓系统找不到了,探寻系统... 亲爱的读者,你是否也有过这样的经历:手机里突然找不到那个熟悉的安卓平板系统图标了?别急,让我带你一探...
检查充电系统和安卓拍照,充电系... 亲爱的读者们,今天我要和你聊聊两个超级实用的话题:检查充电系统和安卓拍照。这两个小细节,可是让你的手...
原生安卓如何刷小米系统,小米系... 亲爱的安卓爱好者们,你是否曾对原生安卓的纯净体验心驰神往,同时又对小米系统的丰富功能爱不释手?别急,...
安卓系统有多少等级的,揭秘其多... 你有没有想过,那个陪伴我们日常生活的安卓系统,它其实有着丰富的等级体系呢?没错,就是那个让我们的手机...
安卓系统重装win10系统,轻... 你有没有想过,你的安卓手机突然间变得卡顿不堪,仿佛被时间遗忘的机器?别急,今天就来教你一招,如何让你...
双机系统需要寻址吗安卓,双机系... 你有没有想过,你的安卓手机里那双机系统,是不是也需要有个家呢?没错,就是寻址!别小看了这个小小的动作...
安卓系统最好的日程软件 你有没有发现,每天的生活就像一场马拉松,时间就像那不停歇的跑步机,你得紧紧抓住它,才能不被甩在后面。...
安卓系统对音质的影响,安卓系统... 你有没有发现,用安卓手机听音乐的时候,音质好像总是不那么完美呢?是不是觉得有时候声音有点闷,或者高频...
王者系统转移安卓转苹果,畅享跨... 你有没有想过,把你在安卓手机上玩得风生水起的《王者荣耀》账号,转移到苹果手机上继续征战呢?这可不是一...
清理车机安卓系统垃圾,释放性能... 亲爱的车主朋友们,你是不是也和我一样,发现车机里的安卓系统越来越慢,就像老牛拉破车一样,让人头疼不已...
华为哪个手机是安卓系统,探索华... 你有没有想过,华为那么多手机,哪一款才是真正搭载了安卓系统的呢?别急,今天我就来给你好好捋一捋,让你...
揽胜可以安装安卓系统吗,安卓系... 你有没有想过,你的揽胜SUV不仅能驰骋在山川湖海之间,还能变身成为一个移动的智能中心呢?没错,今天就...
王牌战士安卓系统下载,畅享竞技... 亲爱的玩家们,你是否在寻找一款刺激的射击游戏来释放你的战斗热情?如果你的答案是肯定的,那么今天我要给...
小米安卓7.0系统特点,创新体... 你知道吗?最近小米手机的新系统安卓7.0可是火得一塌糊涂呢!作为一个紧跟科技潮流的数码爱好者,我当然...
安卓老系统怎么下载软件,轻松找... 你那安卓老系统是不是有点儿落伍了?别急,今天就来给你支个招,教你怎么下载那些新鲜出炉的软件,让你的手...
安卓系统升级鸿蒙系统后app,... 你知道吗?最近手机界可是掀起了一股不小的风潮呢!那就是安卓系统升级到鸿蒙系统后,那些我们熟悉的app...
阿里os系统能装安卓 你知道吗?最近在科技圈里可是掀起了一股热潮,那就是阿里OS系统能装安卓的消息。这可不是什么小道消息,...
香橙派one安卓系统,轻巧便携... 你有没有听说过香橙派One这款小玩意儿?它可是最近在科技圈里火得一塌糊涂呢!想象一个迷你电脑,却能装...
怎么恢复到安卓系统,重拾流畅体... 手机用久了,是不是突然觉得卡得要命,想给它来个“大变身”?别急,今天就来教你怎么把安卓手机恢复到原厂...
魅族系统基于安卓5.0,基于安... 亲爱的数码爱好者们,今天我要和你聊聊一个特别的话题——魅族系统。你可能已经知道,魅族手机以其独特的F...