javaweb学习(二): web.xml标签元素,配置详解_web.ⅹml_有猿再见的博客-程序员宅基地

技术标签: javaweb  web.xml配置  【JavaWeb】  

由于上家公司一直用的是springboot,普通的web项目的很多配置渐渐淡忘了,最近又在复习web项目的相关知识,一来是加深印象,二来也能给各位参考参考,不过最主要的还是为以后自己搭建框架或者配置别人框架时能够迅速完成,比如配置dubbo等,至少要知道web.xml的相关配置才行吧。废话不多说:

一、先从头部标签开始,一个最初始的web.xml标签如下(自己在eclipse上新建一个web项目就可以得到web
.ml了):

<?xml version="1.0" encoding="UTF-8"?><!--这个不说了,只表明xml所使用的版本-->
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>webTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

从文件的上到下开始:

  1. web-app标签
    web-app 是web.xml文件的根元素,在这个元素中,都必须标明这个 web.xml使用的是哪个模式文件,xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” ,xmlns=“http://java.sun.com/xml/ns/javaee” 等就是这些模式文件,只有引进这些模式文件,web.xml就能拥有定义出来的那些功能。

  2. xmlns:
    xmlns是xml namespace的缩写,也就是xml文件的一些命名空间,xmlns:xsi 冒号后面的xsi是这个命名空间的前缀。如果实在不懂,其实可以理解为:xmlns是web-app的属性,该属性引用一些文件(这个文件是以.xsd结尾的,直接就用链接引用即可),然后冒号后面的前缀,可以看成是这个文件(指的是.xsd结尾的文件)的id。

  3. display-name :
    指明这个项目的项目名,如 我这个项目名叫:webTest

  4. welcome-file-list : 在系统找不到相关页面的时候,会按顺序查找这些列表中指定的页面,用以展示到页面中。

二、因为web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping映射、filter过滤器、listener监听器、启动加载级别等。所以需要配置这些信息,以便完善项目后续的需求,这里直接把配置好的xml文件发出来(只是demo 不是公司的):

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  

    <!-- 在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?
    下面我们来看看Spring框架给我们提供过滤器CharacterEncodingFilter  
     这个过滤器就是针对于每次浏览器请求进行过滤的,然后再其之上添加了父类没有的功能即处理字符编码。  
      其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式。-->  
    <filter>  
        <filter-name>characterEncodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>characterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <!-- 项目中使用Spring 时,applicationContext.xml配置文件中并没有BeanFactory,要想在业务层中的class 文件中直接引用Spring容器管理的bean可通过以下方式-->  
    <!--1、在web.xml配置监听器ContextLoaderListener-->  
    <!--ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。  
    在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。  
    它的API说明  
    第一段说明ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。  
    如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口  
    第二段,ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->  
    BeanFactory这样一来spring中的所有bean都由这个类来创建  
     IUploaddatafileManager uploadmanager = (IUploaddatafileManager)    ContextLoaderListener.getCurrentWebApplicationContext().getBean("uploadManager");
     -->  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
    <!--2、部署applicationContext的xml文件-->  
    <!--如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml,  
    在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。  
    如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:  
    在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔。  
    也可以这样applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis-base.xml,  
    applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入。  
    在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。-->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:spring/applicationContext.xml</param-value>  
    </context-param>  

    <!--如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。-->  
    <!--方案一:激活Tomcat的defaultServlet来处理静态文件-->  
    <!--要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,我想性能是最好的吧。-->  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.css</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.swf</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.gif</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.jpg</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.png</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.js</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.html</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.xml</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.json</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.map</url-pattern>  
    </servlet-mapping>  
    <!--使用Spring MVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet,,所以可以配置多个DispatcherServlet-->  
    <!--DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。-->  
    <servlet>  
        <servlet-name>DispatcherServlet</servlet-name><!--在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。-->  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <!--指明了配置文件的文件名,不使用默认配置文件名,而使用dispatcher-servlet.xml配置文件。-->  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <!--其中<param-value>**.xml</param-value> 这里可以使用多种写法-->  
            <!--1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml-->  
            <!--2、<param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value>-->  
            <!--3、<param-value>classpath*:dispatcher-servlet.xml</param-value>-->  
            <!--4、多个值用逗号分隔-->  
            <param-value>classpath:spring/dispatcher-servlet.xml</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup><!--是启动顺序,让这个Servlet随Servletp容器一起启动。-->  
    </servlet>  
    <servlet-mapping>  
        <!--这个Servlet的名字是dispatcher,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中.-->  
        <!--ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器”了:P,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出-->  
        <servlet-name>DispatcherServlet</servlet-name>  
        <!--Servlet拦截匹配规则可以自已定义,当映射为@RequestMapping("/user/add")时,为例,拦截哪种URL合适?-->  
        <!--1、拦截*.do、*.htm, 例如:/user/add.do,这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。-->  
        <!--2、拦截/,例如:/user/add,可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。 -->  
        <url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。-->  
    </servlet-mapping>  

    <welcome-file-list><!--指定欢迎页面-->  
        <welcome-file>login.html</welcome-file>  
    </welcome-file-list>  
    <error-page> <!--当系统出现404错误,跳转到页面nopage.html-->  
        <error-code>404</error-code>  
        <location>/nopage.html</location>  
    </error-page>  
    <error-page> <!--当系统出现java.lang.NullPointerException,跳转到页面error.html-->  
        <exception-type>java.lang.NullPointerException</exception-type>  
        <location>/error.html</location>  
    </error-page>  
    <session-config><!--会话超时配置,单位分钟-->  
        <session-timeout>360</session-timeout>  
    </session-config>  
</web-app>

看注释应该看得懂。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenhaiyushitiaoyu/article/details/84073011

智能推荐

关于浏览器缓存的控制cache-control,expires,last-modified,etag,及编程示例_iteye_11287的博客-程序员宅基地

原理       浏览器的缓存的意义在于减少网络流量,为了达到这个目的,采用了两个手段 1、减少客户端对服务器的请求       解决方案是:为每个资源设置一个有效期限。       在客户端取得资源后,缓存在本地,一段时间内,如果再次展示这个资源时,不再向服务器发出请求,而是直接取缓存的内容。       相对应的编程手段就是          1. 在Htpp的H...

Java8-Lambda表达式的5种形式_成都超平面科技的博客-程序员宅基地

形式一:这种写法没有参数,用一对圆括号表示。Runnable noArguments = () -&amp;amp;amp;gt; System.out.println(&amp;amp;quot;Hello World&amp;amp;quot;);形式二:这种写法只有1个参数,可以省略括号,下面的 event 相当于 (event)。ActionListener oneArgument = event -&amp;amp;amp;gt; System.out....

python 论文降重_我用Python写了一个论文降重工具-Go语言中文社区_普罗奈尔的博客-程序员宅基地

时值毕业季,有不少小伙伴深受论文查重的困扰。因此我便想到做一个简单的自动去重的工具,先看看效果,我们再对原理或是代码实现做进一步的分析。首先需要输入appid以及key,这些可以在百度翻译开放平台申请一个账号,可以免费申请一个账号。接着将需要进行降重的文本内容复制到相应的输入框内,点击开始按钮,即可输出不同但意思相近的语句,即达到降重去重的作用。点击复制按钮便可以将得到的新文本复制到剪贴板上,点击...

解决Windows环境下“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误_当文件已存在时无法创建该文件_chenyogie的博客-程序员宅基地

文章目录1 错误描述2 原因分析3 解决方案1 错误描述本机windows系统,hadoop3.2.2版本。在运行MapReduce任务的时候报“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误,但是该错误不影响MR任务的执行结果。2 原因分析直接根据log信息,发现抛出异常的位置在RawLocalFileSystem类的mkOneDirWithMode方法中。且这里可以看到异常信息与控制台的异常信息相符。p2

eclipse,android studio 签名打包,获取MD5, SHA1(应用的签名)_打包签名是md5还是sha1_pszh的博客-程序员宅基地

引入:(1)项目的收官阶段,我们比用到的签名,打包,上传应用商店。。。(2)在开发的中途接入第三方的sdk时候经常需要我们的签名的md5去获取相应的appID(比如微信分享,登陆需要项目的应用签名)下面我们就来说说这两个平台的打包和MD5的获取舍不得丢弃的老大爷Eclipse应用打包:1.:2.3.4.56下次打包就使用这个,不需要重建了获取MD

HDU1263-------水果_HeisenbergWDG的博客-程序员宅基地

Problem Description夏天来了~~好开心啊,呵呵,好多好多水果~~Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.Input第一行正整数N(0&lt;N&lt;=10)表示有N组测试数据.每组测试数据的第一行是一个整数M(0&lt;M&lt;=100),表示工...

随便推点

idea 目录结构显示不对_idea建包目录结构不对_互联网搬砖从业者的博客-程序员宅基地

我是用idea 将整个文件夹进行加载,所有的 Module 就在一个视图里面但是升级后变成了这种解决添加文件夹下.idea 文件下的 .iml就行了

mysql命令行备份数据库_mysql 无法用命令备份_lcyGo的博客-程序员宅基地

MySQL数据库使用命令行备份|MySQL数据库备份命令例如:数据库地址:127.0.0.1数据库用户名:root数据库密码:pass数据库名称:myweb 备份数据库到D盘跟目录mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql 备份到当前目录

B-树和B+树的应用:数据搜索和数据库索引_hguisu的博客-程序员宅基地

B-树1 .B-树定义:有序数组+平衡多叉树B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A...

“打怪升级”,电竞浪潮中一家非典型公司的生存之道_商业价值的博客-程序员宅基地

“我老婆是中医,上海没有好的中医院,所以她现在就是在北京上班,也不知道听谁说的,女人一定要有自己的事业。”孙博文自嘲似地说道,他今年大约三十岁,但身材已经明显发福,只要一低头,便能清晰看见他的双下巴,他有些炫耀似地补充道,“我老婆还是90后呢。”从某种角度而言,孙博文的确有资格炫耀。和王思聪一样,他也是个富二代,当钛媒体问他当年出来创业时从家里拿了多少钱时,他警觉似

八大排序算法-shell 排序_shell排序_Hist_花透的博客-程序员宅基地

基本思想 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。操作方法 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; 按增量序列个数k,对序列进行k 趟排序; 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时

推荐文章

热门文章

相关标签