-
web-app中元素的顺序以及作用、举例
Web.xml 中出现的顺序(全小写) | 作用与使用举例 |
Icon | 指定 IDE 和 GUI 工具表示 web 应用的一两个图像文件的位置 <icon> <small-icon></small-icon> <large-icon></large-icon> <!--可以用small-icon指定16*16的图gif或JPEG图像,large-icon指定32*32的。 --> </icon> |
Display-name | GUI 工具标记这个 web 应用的一个名称 |
Description | 描述这个应用。 |
Context-param | 应用范围内的初始化参数 .( 与 init-param 的区别是:这个是整个 web 应用里可用的。 Init-param 只是在那个指定的 jsp 或 servlet 中可用。 ) Eg. <context-param> <param-name>contextParamName</param-name> <param-value>contextParamValue</param-value> </context-param> |
Filter | 过滤器元素。将一个名字与一个实现了 javax.servlet.Filter 接口的类相关联。 需要在 web.xml 中使用 2.3 或以上版本的 DTD 。 过滤器可截取和修改一个 servlet 或 jsp 和请求或从中发出的响应。在执行 servlet 和 jsp 之前,必须先执行第一个相关的过滤器的 doFilter 方法。 FilterChain 对象调用 doFilter 方法时,执行链中的下一个过滤器至最后一个,然后 servlet 或 jsp 才被执行。过滤器具有对到来的 ServletRequest 对象的全部访问权。 新建一个类 implements Filter: Eg. public class MyFilter implements Filter {
public void destroy() {
}
/* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest)request; //可以全权操作这个到来的request System.out.println("这里可以在执行servlet之前进行操作,而且具有对到来的servletRequest对象的所有访问权。"+req.getRemoteHost()); chain.doFilter(request, response); //执行完了doFilet再去执行相应的原servlet或jsp }
public void init(FilterConfig arg0) throws ServletException {
}
} filter 在 web.xml 中的声明与 servlet 相似: <filter> <filter-name>myFilter</filter-name> <filter-class>guoxp.ajax.servlet.MyFilter</filter-class> </filter>
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> <!--或是指定某个访问路径 --> </filter-mapping>
但它的 filter-mapping 有两种方式,上面的是与 servlet 相似的声明方式,它还可以直接声明它截取的 servlet 或 jsp 的名字(不过这个 servlet 或 jsp 的名字要在这个 web.xml 中稍后进行声明),即用下面的方式: <filter-mapping> <filter-name>myFilter</filter-name> <servlet-name>AJAXServer</servlet-name> </filter-mapping> |
Filter-mapping | 将过滤器的名字与一个或多个 servlet 或 jsp 页面相关联。 例子如上。 |
Listener | 指出监听程序类。事件监听程序在建立、修改和删除会话或 servlet 环境时得到通知。 web 应用的 Servlet-Context 建立或消除时,就会触发该监听器。 <listener> <listener-class>guoxp.ajax.servlet.MyListener</listener-class> </listener>
MyListener .java: public class MyListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent event) { System.out.println("destroyed...."); }
public void contextInitialized(ServletContextEvent event) { System.out.println("created...."); }
} |
Servlet | 命名一个 servlet 或 jsp 页面 Eg. <servlet> <servlet-name>AJAXServer</servlet-name> <servlet-class>guoxp.ajax.servlet.AJAXServer</servlet-class> <!-- 如果是 jsp 页面,就使用<jsp-file> 代替<servlet-class>。这样的配置可以使多个 url 共同用一个 jsp 处理,或是使得在 url 中去掉 .jsp 扩展名 --> <load-on-startup>1</load-on-startup> <!--指定装载 servlet 或是 jsp 时的顺序,因为有的 jsp , servlet 需要 init 较长的时间,按数字从小到大确定先后顺序。 --> </servlet>
|
Servlet-mapping | 为这个 servlet 名提供一个缺省的 url Eg. <servlet-mapping> <servlet-name>AJAXServer</servlet-name> <url-pattern>/AJAXServer</url-pattern> <!-- 必须以斜杠‘ / ’开始,还可以包含通配符,如 /*.jsp, 则这样的 .jsp 的访问都会请求到这个 AJAXServer--> <init-param> <param-name>paramName</param-name> <param-value>paramValue</param-value> <!--可以向 servlet 提供初始化参数。 在 servlet 中相应的得到这个参数的方法: 在 init() 方法中, public void init() throws ServletException { ServletConfig config=getServletConfig(); String value=config.getInitParameter("paramName"); } 在 jsp 中相应的用 jspInit() 方法: <%!private String paramValue;
public void jspInit() { ServletConfig config = getServletConfig(); paramValue = config.getInitParameter("paramName"); }%> --> </init-param>
</servlet-mapping>
|
Session-config | 设定会话的超时时间。或用 HttpSession 的 setMaxInactiveInterval 方法明确设置单个会话对象的超时值。 Eg. <session-config> <session-timeout>120</session-timeout> </session-config> |
Mime-mapping | 为 web 应用的特殊文件保证 分配特定的 mime 类型。 Eg. <mime-mapping> <extension>txt</extension> <mime-type>application/txt</mime-type> </mime-mapping>
附:常见的MIME类型
超文本标记语言文本 .htm,.html text/html 普通文本 .txt text/plain RTF文本 .rtf application/rtf GIF图形 .gif image/gif JPEG图形 .ipeg,.jpg image/jpeg au声音文件 .au audio/basic MIDI音乐文件 mid,.midi audio/midi,audio/x-midi RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio MPEG文件 .mpg,.mpeg video/mpeg AVI文件 .avi video/x-msvideo GZIP文件 .gz application/x-gzip TAR文件 .tar application/x-tar |
Welcome-file-list | 访问目录名时的起始文件。 Eg. <welcome-file-list> <welcome-file>modules/frame/frame.jsp</welcome-file> <welcome-file>index.jsp</welcome-file> /* 可以指定多个欢迎页,从上向下试用 */ </welcome-file-list> |
Error-page | Error-code 或特定异常时,订制显示的页面。注意 location 必须以斜线 / 开头,也就是相对于整个应用的。两个方式: error-code 和 exception-type
<error-page> <error-code>404</error-code> <location>/error404.jsp</location> <!--关于指定错误处理页面,也可以在 jsp 中指定 <%@ page errorPage="error.jsp" %> --> </error-page>
<error-page> <exception-type> javax.servlet.ServletException </exception-type> <location>/exception.jsp</location> </error-page>
里面有三个属性可供处理异常时使用,分别是:status_code、message、与exception_type 指定显示处理异常的页面exception.jsp,isErrorPage="true"指定 举例: <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" isErrorPage="true" %> <%--指定了isErrorPage就可以在EL中使用隐式对象${pageContext.exception} --%> <html> <head> <title>错误与例外处理页面</title> </head> <body> 错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br /> 错误信息: <%=request.getAttribute("javax.servlet.error.message")%> <br /> 异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br /> </body> </html> |
Jsp-config | <taglib> 对标记库文件指定别名 . 当标记库名改变时可以不改变 jsp 中的引用名。 2.4 中 ,<tablib> 已经作为 <jsp-config> 的子元素。 Eg. <jsp-config> <taglib> <taglib-uri>/dhtmlxgrid.tld</taglib-uri> <taglib-location>/WEB-INF/dhtmlxgrid.tld</taglib-location> </taglib> </jsp-config> |
Resource-env-ref | 声明与资源相关的一个管理对象 |
Resource-ref | 声明资源工厂使用的外部资源 |
Secuity-constraint | 制订应该保护的 url |
Login-config | 指定如何给试图访问受保护页面 用户授权。 |
Secuity-role | 给出安全角色列表 |
Env-entry | web 应用的环境项 |
Ejb-ref | 声明 EJB 主目录的引用 |
Ejb-local-ref | 声明一个 EJB 的本地主目录的应用 |
3. 重新映射/servlet/URL模式
在一个特定的Web应用中禁止以 http://host/webAppPrefix/servlet/ 开始的URL的处理非常简单。所需做的事情就是建立一个错误消息servlet,并使用url-pattern元素将所有匹配请求转向该servlet。只要简单地使用:
<url-pattern>/servlet/*</url-pattern>