web.xml是在学习javaWeb时遇到的第一个坑,刚开始不知道有什么用的时候真是GGG…..一万个跑不起来。(基础不牢的可怕…)
于是在知识丰富后决定写点东西记录一下(放置自己忘了)
web项目中,xml文件要和servelt类配合使用,准确地说web.xml文件就是servelt的配置文件
学过html的人应该都能理解标签的作用,web.xml就是通过标签来进行名称,路由和servelt的相互关联的.
基本的xml是这样的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>d</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>
目前所有的内容都可以由编译器自动生成,无需更改。不过可以根据自己的需要修改welcome-file-list中的内容,运行时输入项目名会直接访问到列表中第一个文件,没有的话会访问第二个,依次类推;
……处将填入servelt的配置信息
<servlet>
<servelt-name>Myservelet</servelt-name>
<servelt-class>web.app.Myservelt</servelt-class>
<servelt-name>...</servelt-name>
<servelt-class>....</servelt-class>
..
</servlet>
<servlet-mapping>
<servelt-name>Myservelet</servelt-name>
<url-pattern>/helloWorld</url-pattern>
<servelt-name>..</servelt-name>
<url-pattern>..</url-pattern>
</servlet-mapping>
servelt标签中的内容是注册一个servelt,其中的servelt-name代表注册servelt的类名,后续的servelt-class是完整的路径
servlet-mapping用来映射外部访问时的虚拟路径。url-pattern是一个以/开头的字符串,可以通过项目网址+url-pattern的方式来访问到该servelt(只有映射到虚拟路径的servelt才能被被客户端访问到)
一些注意的地方
servlet-mapping中可以对同一个name配多个url-pattern,然后同一个servelt可以通过多个路径访问
url-pattern中可以使用通配符,支持的格式有(1)*.xx(2)xx/*
(1)可以匹配任何以.xx结尾的路径
(2)可以匹配任何以xx开头的路径
两种通配符不能同时使用
如果可以匹配到多个存在的路径的话,
会有一个比较
无通配符url>有通配符url
xx/*>/*
xx/*>*.xx
/*>*.xx
url-pattern 为“/”的servlet为默认servelt,所有URL地址不存在的访问,都会转交至默认servlet
web.xml中的其它内容
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
init-param标签是sevelt标签下的一个子标签,用来确认一些基础属性(比如字符编码)param-name和param-value中分别填入属性名和属性值,运行时这些属性会被封装为一个serveltCOnfig对象传递给servelt
应用程序配置
<context-param>
<param-name>dd</param-name>
<param-value>dd</param-value>
</context-param>
<context-param>
<param-name>dd</param-name>
<param-value>dd</param-value>
</context-param>
使用与上文类似,不过直接放在根元素中,同样在启动时会被封装为ServeltContext对象使用(除了配置信息外,还可以传递全局参数)