servlet web.xml配置选项详解
一般的web工程中都会用到web.xml,web.xml主要包括一些配置标签,例如Filter、Listener、Servlet等,可以用来预设容器的配置,可以方便的开发web工程。但是web.xml并不是必须的,一个web工程可以没有web.xml文件
<web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> </web-app>
这是整个配置文件的根标签,web.xml的模式文件是由Sun公司定义的,它必须标明web.xml使用的是哪个模式文件。
<display-name>
<display-name>serTest</display-name>
它标注了该web项目的名字,提供GUI工具可能会用来标记这个特定的Web应用的一个名称
<welcome-list-file>
<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>
<welcome-file-list>定义了首页文件,也就是用户直接输入域名时跳转的页面(如http://localhost:8080/)
<servlet>
用来声明一个servlet的数据,主要有以下子元素:
<servlet-name>
指定servlet的名称
<servlet-class>
指定servlet的类名称
<jsp-file>
指定web站台中的某个JSP网页的完整路径
<init-param>
用来定义初始化参数,可有多个init-param。在servlet类中通过ServletConfig对象传入init函数,通过- getInitParamenter(String name)方法访问初始化参数
例如使用<init-param>来初始化数据库连接参数
public void init(ServletConfig config) throws SevletException{ super(config); String driver = config.getInitParameter("driver"); String url = config.getInitParameter("url"); String username = config.getInitParameter("username"); String passwd = config.getInitParameter("passwd"); try{ Class.forName(driver).newInstance(); this.conn = DriverManager.getConnection(url, username, passwd); System.out.println("Connection successful..."); } catch(SQLExceprion se){ System.out.println("se"); } catch(Exception e){ e.printStackTrace(): } }
此时servlet配置为
<servlet> <servlet-name>myServlet</servlet-name> <servlet-class>*.myservlet</servlet-class> <init-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/myDatabase</param-value> </init-param> <init-param> <param-name>username</param-name> <param-value>tang</param-value> </init-param> <init-param> <param-name>passwd</param-name> <param-value>whu</param-value> </init-param> </servlet>
<load-on-startup>
指定当Web应用启动时,装载Servlet的次序。当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。
<servlet-mapping>
用来定义servlet所对应的URL,包含两个子元素
<servlet-name>
指定servlet的名称
<url-pattern>
指定servlet所对应的URL
<!-- 基本配置 --> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>*.myservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping> <!-- 高级配置 --> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>*.myservlet</servlet-class> <init-param> <param-name>foo</param-name> <param-value>bar</param-value> </init-param> <run-as> <description>Security role for anonymous access</description> <role-name>tomcat</role-name> </run-as> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping>
需要特别注意的是</servlet-mapping>元素,这个元素规定了一个servlet-name和url-pattern,如果请求的url能够匹配该url-pattern,则使用servlet-name指定的servlet处理该请求。
url-pattern匹配规则
按照优先级从高到低排列:
精确匹配:类似于/myServlet的精确路径
通配符匹配:/*
扩展名匹配:*.html,*.jpg ,.do ,.action之类的
默认匹配(/)——当之前匹配都不成功时
当servlet收到来自客户端的url请求时,先把请求url减去当前项目上下文路径,然后再与url-pattern进行匹配,匹配按照上面列出的优先级顺序进行,只要有一个匹配成功就停止,不再继续匹配其他的。
(注:/*.action这种匹配式是错误的,容器无法识别同时拥有两种匹配规则的pattern)
<!-- 配置--> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>*.myservlet</servlet-class> </servlet> myServlet <servlet-name>myServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping>
收到来自客户端的请求http://localhost:8080/serTest/myServlet/index.html,首先将该请求url减去项目上下文得到/myServlet/index.html,之后与url-pattern进行匹配,发现/myServlet匹配成功,之后便把该请求交由servlet-name指定的myServlet处理。
另一方面,<servlet-mapping>并不是必须的,例如在如下项目中:
src文件夹中是定义的两个servlet类(Test和Img)和一个逻辑事务处理类(Output),如果我们都不设置<servlet-mapping>,则可以像如下方法进行请求
请求使用Test处理:http://localhost:8080/serTest/Test
请求使用Img处理:http://localhost:8080/serTest/Img
请求静态图片文件:http://localhost:8080/serTest/img/img.jpg
<filter>
过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
<listener>
Listener元素指出事件监听程序类
<session-config>
配置会话超时,单位是分钟
<session-config> <session-timeout>120</session-timeout> </session-config>
<error-page>
在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
更多元素参见:https://www.cnblogs.com/nhdlb/p/10365239.html
文章转载至:https://blog.csdn.net/MSDN_tang/article/details/83588425
servlet web.xml配置选项详解的更多相关文章
- Tomcat web.xml配置参数详解
Apache Tomcat Configuration Reference - The Context Containerhttps://tomcat.apache.org/tomcat-5.5-do ...
- Web.xml配置参数详解
1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...
- web.xml配置及详解
1.web.xml 是网络程序中的一个很重要的配置文件. 2.XML基础标准是为XML的进一步实用化制定的标准,它规定了采用XML制定标准时的一些公用特征.方法或规则.XML Schema描述了更加严 ...
- web.xml 配置的详解
http://my.oschina.net/u/1383439/blog/224448 http://blog.csdn.net/guihaijinfen/article/details/836383 ...
- 史上最全web.xml配置文件元素详解
一.web.xml配置文件常用元素及其意义预览 <web-app> <!--定义了WEB应用的名字--> <display-name></display-na ...
- web.xml配置文件元素详解
一.web.xml配置文件常用元素及其意义 1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <display-name></disp ...
- WEB容器启动——web.xml加载详解
最近在看spring的源码,关于web.xml文件在容器(Tomcat.JBOSS等)启动时加载顺序问题很混乱,通过搜集资料,得出以下的结论: 1.加载顺序与它们在 web.xml 文件中的先后顺序无 ...
- servlet两种配置方法详解
1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...
- nodejs的mysql模块学习(三)数据库连接配置选项详解
连接选项 当在创建数据连接的时候 第一种大多数人用的方法 let mysql = require('mysql'); let connection = mysql.createConnection({ ...
随机推荐
- JDK8新特性04 方法引用与构造器引用
import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /** * 一.方法引用 * ...
- 二、linux IO 编程---系统调用和POSIX标准和标准IO
2.1 系统调用 2.1.1 概念 所谓系统调用(system call)是指曹错系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务. 应用程序可以 ...
- 第26月第30天 srt
1. ffmpeg -i 0.mp4 -vf subtitles=0.srt 1.mp4 https://jingyan.baidu.com/article/c45ad29c73cef2051653e ...
- 将web项目导入到eclipse中常见错误
将web项目导入到eclipse中常见错误 错误1:string cannot be resolved to a type 原因:这种情况一般是因为你的JDK版本没有设置好,或者设置的有不一致的 ...
- 多分类Logistics回归公式的梯度上升推导&极大似然证明sigmoid函数的由来
https://blog.csdn.net/zhy8623080/article/details/73188671 也即softmax公式
- MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)
engine 引擎就是MySQL存储数据的不同方式 myisam 插入速度快 支持全文索引 innoDB 插入速度慢 支持事务安全 假设两人同时购买火车票,两人同时看到只有一张火车票,几乎同时下单 或 ...
- openstack Q版部署-----网络服务(neutron)安装部署(7)
一.数据库配置(控制节点) 控制节点创建数据库: CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'lo ...
- openstack Q版部署-----glance安装配置(4)
镜像服务(glance)使用户能够发现,注册和检索虚拟机镜像. 它提供了一个REST API,使您可以查询虚拟机镜像元数据并检索实际镜像. 您可以将通过镜像服务提供的虚拟机映像存储在各种位置,从简单的 ...
- Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)
linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...
- Python全栈(第一部分)day2
昨日内容回顾 编译型:一次性将全部代码编译成二进制文件 代表语言: C,C++ 优点:执行效率高 缺点:开发速度慢,不能跨平台 解释型:当程序运行时,从上至下一行一行的解释成二进制 优点:开发速度快, ...