一直以来都是拷贝别人的代码,虽然说能够正常使用,但是说不出个原由,跟不会有啥区别呢? O(∩_∩)O不管记录的学习点难不难,都是进步的表现哦!既然有空闲时间,那就来总结点东西吧!
熟悉一个web项目,还得从web.xml入手。
web.xml 的加载顺序是:ServletContext -> context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。(这一句也忘记是从哪个笔者那里学来的)先来说说web.xml中的标签吧!
一、指定欢迎页 (常用标签之一)
<!-- 可以配置多个,从上到下的优先级顺序 -->
<welcome-file-list>
<welcone-file>default.html</welcone-file>
<welcone-file>login.jsp</welcome-file>
</welcome-file-list>
welcome-file-list : 工作原理,简而言之就是配置项目的访问页。如果没有配置上面这一段代码或者是项目中没有web.xml文件,默认会将index.html作为欢迎页,如果index.html也找不到,tomcat会将找到的index.jsp作为欢迎页返回,如果上面这些都没有,就会提示 The requested resource (/XXX) is not available。 ~\(≧▽≦)/偶就遇到过这个问题,现在又学习了解下,相信下次就能很快解决问题,不重复犯错!
二、错误页面(常用标签之一)
在配置错误页面的时候,location的值如果没有 / 符号,就会提示错误信息:
Multiple annotations found at this line:
- cvc-complex-type.2.2: Element 'location' must have no element [children], and the value must be valid.
- cvc-pattern-valid: Value 'error.jsp' is not facet-valid with respect to pattern '/.*' for type 'null'.
错误页面如果配置的是*.html,无需再配置其它,如果是*.jsp页面,如果在jsp页面需要把isErrorPage设置为true,即:<%@ page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>;(刚编写验证的代码中,没有设置isErrorPage为true,好像也没报错,正常显示啦O(∩_∩)O)
三、<context-param> 上下文配置(常用标签之一)
context-param: 声明应用范围(整个WEB项目)内的上下文初始化参数,是放在ServletContext中的。
1.启动一个web项目时,容器(如:tomcat)会去读取它的配置文件web.xml中的两个节点: <listener></listener> 和 <context-param></context-param>
2.紧接着容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文
3.容器将 <context-param></context-param> 转化为键值对,并交给 ServletContext
4.容器创建 <listener></listener> 中的类实例,即创建监听
5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的键");
6.得到这个context-param的值之后,你就可以做一些操作了。注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早(这里验证了文章开始讲述的web.xml加载顺序)
下面是加载spring文件的配置 , 和 一个自定义上下文参数的配置及servlet实现代码(用代码更好验证上面6点的描述O(∩_∩)O):
O(∩_∩)O~ 上面很多也是从别的笔者那里学习的,百度context-params出来的结果都差不多,那就自己也记录一份,写个简单的例子验证下吧。只有自己经历过才会印象更深刻哦!
另外 区分下 <init-param></init-param> ---- 存放servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
注意:load-on-startup : 标记容器是否在启动的时候就加载这个servlet; 当值为0或大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;正数的值越小,启动该servlet的优先级越高。
四、filter过滤器配置
Filter 技术是servlet 2.3 新增加的功能,一个filter必须实现javax.servlet.Filter。
过滤器执行流程:servlet调用前截获→修改request头和数据→修改response头和数据→servlet调用后截获。
filter-class 中指定的过滤器类须继承 javax.servlet.Filter 具有须有以下三种方法:
init(FilterConfig fc):初始化,读取配置文件中的iinit-param参数值,在WEB应用启动时调用
doFilter(...):用于对request,response进行处理,并能过chain.doFilter(...) 交过下一个控制器,访问filter-mapping映射到的url时调用
destroy():资源销毁
下面是字符集过滤器的配置使用例子:
上面是熟悉了解filter的使用,但是实际项目开发中这个可以交由spring管理,只需要web.xml配置下即可,spring字符集过滤器可以参考这个http://blog.csdn.net/gdufzxp/article/details/10077665 web.xml中filter更多详解可以参考:http://blog.csdn.net/ps101505138/article/details/24412005/ 上面的讲解都挺详细的,向大师们学习O(∩_∩)O
五、Servlet在web.xml中的配置
以上只是说明这几种标签在web.xml中的使用,不是很深入,就是说明如何使用O(∩_∩)O哈哈~ 另外在送上几篇讲解比较详细的,供自己以后更深入的学习吧。 web.xml配置详解:http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html http://www.cnblogs.com/morlin/p/4301063.html