web.xml详解之Servlet和URL路径

来源:互联网 发布:昆明java语言培训 编辑:程序博客网 时间:2024/05/16 05:47

[译]web.xml详解之Servlet和URL路径

2013-7-11阅读181 评论0


google developers 上的一篇文章,原文见:https://developers.google.com/appengine/docs/java/config/webxml#Servlets_and_URL_Paths

*不是百分之百的原文翻译,这里翻译的比较口语化,并且有我自己的理解。

web.xml中定义了访问路径和servlet之间的映射,也就是定义了当用户访问某个路径的时候,调用哪个servlet进行处理。web server会根据这里的配置决定调用某个类某个方法。比如说对于HTTP GET访问会调用相应的doGet方法。

想要定义一个url到servlet的映射,要先定义<servlet>,然后在<servlet-mapping>中定义url到servlet的映射。

<servlet>标签用来声明servlet,包括servlet的名称(在web.xml中可以被其他元素引用),servlet对应的类,还有初始化的参数<init-param>。可以基于一个类声明多个servlet,但是初始化参数不一样。servlet的名称必须唯一。

类相同,初始化参数不同的例子:

    <servlet>        <servlet-name>redteam</servlet-name>        <servlet-class>mysite.server.TeamServlet</servlet-class>        <init-param>            <param-name>teamColor</param-name>            <param-value>red</param-value>        </init-param>        <init-param>            <param-name>bgColor</param-name>            <param-value>#CC0000</param-value>        </init-param>    </servlet>    <servlet>        <servlet-name>blueteam</servlet-name>        <servlet-class>mysite.server.TeamServlet</servlet-class>        <init-param>            <param-name>teamColor</param-name>            <param-value>blue</param-value>        </init-param>        <init-param>            <param-name>bgColor</param-name>            <param-value>#0000CC</param-value>        </init-param>    </servlet>

<servlet-mapping>标签定义了url到servlet之间的映射,这里的url定义的是一种url模式,匹配这个模式的url都会转给servlet处理。url模式可以用星号:* 做模糊匹配,但是不支持字符串中间使用通配符,也不支持一次使用多个*。

在url模式中使用通配符的例子:

    <servlet-mapping>        <servlet-name>redteam</servlet-name>        <url-pattern>/red/*</url-pattern>    </servlet-mapping>    <servlet-mapping>        <servlet-name>blueteam</servlet-name>        <url-pattern>/blue/*</url-pattern>    </servlet-mapping>

在上面的例子中,请求http://www.example.com/blue/teamProfile 请求会被TeamServlet处理,servlet使用getPathInfo方法截取请求路径判断是否匹配url模式。

servlet可以用本身的getServletConfig方法来取得初始化参数,再通过getInitParameter方法,将参数名称传入,取得参数的值。

String teamColor = getServletConfig().getInitParameter("teamColor");

0 0
原创粉丝点击