GVKun编程网logo

web.xml 加载(解析)顺序(web.xml的加载顺序)

3

关于web.xml加载和解析顺序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于/WebRoot/WEB-INF/web.xml、AzureAPIM:使用多个XML响应到单个XML响应的X

关于web.xml 加载解析顺序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于/WebRoot/WEB-INF/web.xml、Azure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换、eclipse 建立 Dynamic Web Project 时没有 web.xml、flex项目-部署报错Missing deployment descriptor "WEB-INF/web.xml"等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

web.xml 加载(解析)顺序(web.xml的加载顺序)

web.xml 加载(解析)顺序(web.xml的加载顺序)

web.xml 加载顺序

应用服务器启动时 web.xml 加载过程,至于这些节点在 xml 文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere 就严格要求 web.xml 的节点顺序,否则部署不成功,所以还是赞成按照 web.xml 标准格式写
content-param --> listener --> filter --> servlet

1、启动 WEB 项目的时候,应用服务器会去读它的配置文件 web.xml. 读两个节点:<listener></listener> 和 <context-param></context-param>   

2、紧接着,容器创建一个 ServletContext (上下文), 这个 WEB 项目所有部分都将共享这个上下文.

3、容器将 <context-param></context-param > 转化为键值对,并交给 ServletContext.

4、容器创建 <listener></listener > 中的类实例,即创建监听.

5、在监听中会有 contextInitialized (ServletContextEvent args) 初始化方法,在这个方法中获得: 
 ServletContext = ServletContextEvent.getServletContext();
 context-param 的值 = ServletContext.getInitParameter ("context-param 的键");    

6、得到这个 context-param 的值之后,你就可以做一些操作了。注意,这个时候你的 WEB 项目还没有完全启动完成。这个动作会比所有的 Servlet 都要早。换句话说,这个时候,你对 <context-param> 中的键值做的操作,将在你的 WEB 项目完全启动之前被执行。如果想在项目启动之前就打开数据库,那么这里就可以在 < context-param > 中设置数据库的连接方式,在监听类中初始化数据库的连接,这个监听是自己写的一个类,除了初始化方法,它还有销毁方法。用于关闭应用前释放资源。比如说数据库连接的关闭.


对于某类配置节而言,与它们出现的顺序是有关的
以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。
web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter () 方法的。 
servlet 同 filter 类似,此处不再赘述。

比如 filter 需要用到 bean ,但加载顺序是: 先加载 filter 后加载 spring,则 filter 中初始化操作中的 bean 为 null;所以,如果过滤器中要使用到 bean,可以将 spring 的加载 改成 Listener 的方式 
 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 

web.xml 节点解析

根节点
1、 
<web-app></web-app>

常用节点介绍
2、 <context-param />  用来设定 web 站台的环境参数
 它包含两个子元素:
 <param-name></param-name> 用来指定参数的名称
 <param-value></param-value> 用来设定参数值
 在此设定的参数,可以在 servlet 中用 getServletContext ().getInitParameter ("my_param") 来取得
 例子:
 <context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>classpath*:/log4j.properties</param-value>
 </context-param>

3、 <listener /> 用来设定 Listener 接口
 它的主要子元素为
 <listener-class></listener-class> 定义 Listener 的类名称
 例子:
 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

4、 <filter />  是用来声明 filter 的相关设定
 <filter-name></filter-name> 这当然就是指定 filter 的名字
 <filter-class></filter-class> 这是用来定义 filter 的类的名称
 <init-param></init-param> 用来定义参数,它有两个子元素:
 <param-name></param-name> 用来指定参数的名称
 <param-value></param-value> 用来设定参数值
 例子:
 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>

5、 <servlet /> 用来声明一个 servlet 的数据,主要有以下子元素:
 <servlet-name></servlet-name> 指定 servlet 的名称
 <servlet-class></servlet-class> 指定 servlet 的类名称
 <jsp-file></jsp-file> 指定 web 站台中的某个 JSP 网页的完整路径
 <init-param></init-param> 用来定义参数,和前面的 < init-param > 差不多
 同样,与 <servlet></servlet > 一起使用的是
 <servlet-mapping></servlet-mapping> 用来定义 servlet 所对应的 URL,包含两个子元素:
 <servlet-name></servlet-name> 指定 servlet 的名称
 <url-pattern></url-pattern> 指定 servlet 所对应的 URL
 <servlet>
  <servlet-name>DemoServlet</servlet-name>
  <servlet-class>com.test.DemoServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DemoServlet</servlet-name>
  <url-pattern>/demoServlet</url-pattern>
 </servlet-mapping>

基本节点:

6、 <description/> 是对站台的描述
 例子:<description> 传道、授业、解惑 </description> 

7、 <display-name/> 定义站台的名称
 例子:<display-name> 我的站点 </display-name>

8、 <icon> 
icon 元素包含 small-icon 和 large-icon 两个子元素。用来指定 web 站台中小图标和大图标的路径. 
<small-icon>/ 路径 /smallicon.gif</small-icon> 
small-icon 元素应指向 web 站台中某个小图标的路径,大小为 16 X 16 pixel, 但是图象文件必须为 GIF 或 JPEG 格式,扩展名必须为:.gif 或.jpg. 
<large-icon>/ 路径 /largeicon-jpg</large-icon> 
large-icon 元素应指向 web 站台中某个大图表路径,大小为 32 X 32 pixel, 但是图象文件必须为 GIF 或 JPEG 的格式,扩展名必须为;gif 或 jpg. 
例子: 
<icon> 
 <small-icon>/images/small.gif</small-icon> 
 <large-icon>/images/large.gir</large-icon> 
</icon>

9、 <distributable/> 是指定该站台是否可分布式处理

10、 <session-config/> 用来定义 web 站台中的 session 参数
 包含一个子元素:
 <session-timeout></session-timeout> 用来定义这个 web 站台所有 session 的有效期限,单位为 分钟

11、 <mime-mapping /> 定义某一个扩展名和某一个 MIME Type 做对应该
 包含两个子元素:
 <extension></extension> 扩展名的名称
 <mime-type></mime-type> MIME 格式
 例子:
 <mime-mapping>
  <extension>doc</extension>  
  <mime-type>application/vnd.ms-word</mime-type>
 </mime-mapping>    
 <mime-mapping>
  <extension>xls</extension>
  <mime-type>application/vnd.ms-excel</mime-type>
 </mime-mapping>

12、 <error-page>
 <error-page>
     <error-code>500</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>400</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>403</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>404</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>502</error-code>
     <location>/index.jsp</location>
 </error-page>

13、
 <jsp-config/>
 <jsp-config>
 <taglib>
 <taglib-uri>/struts-tags</taglib-uri>
 <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
 </taglib>
 <taglib>
 <taglib-uri>/struts-dojo-tags</taglib-uri>
 <taglib-location>/WEB-INF/struts-dojo-tags.tld</taglib-location>
 </taglib>
 <taglib>
 <taglib-uri>/s</taglib-uri>
 <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
 </taglib>
 </jsp-config>

14、 <welcome-file-list/>
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

15、 <resource-ref></resource-ref> 定义利用 JNDI 取得站台可利用的资源
 有五个子元素:
 <description></description> 资源说明
 <rec-ref-name></rec-ref-name> 资源名称
 <res-type></res-type> 资源种类
 <res-auth></res-auth> 资源经由 Application 或 Container 来许可
 <res-sharing-scope></res-sharing-scope> 资源是否可以共享,有 Shareable 和 Unshareable 两个值,默认为 Shareable

 比如,配置数据库连接池就可在此配置
 <resource-ref>
 <description>JNDI JDBC DataSource of shop</description>
 <res-ref-name>jdbc/sample_db</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
 </resource-ref>


/WebRoot/WEB-INF/web.xml

/WebRoot/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<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>sfpt</display-name>  

 <!-- 加载Spring -->  

<listener>
    <listener-class>action.TimerAction</listener-class>
 </listener>

 <listener>   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>

 <context-param>   

<param-name>contextConfigLocation</param-name>  

 <param-value>classpath:applicationContext.xml</param-value>

  <!-- <param-value>classpath:applicationContext*.xml</param-value> -->

 </context-param>

 <!-- 默认项目访问首页 -->

 <welcome-file-list>   <welcome-file>index.jsp</welcome-file>  </welcome-file-list>

 <!-- 加载struts -->

 <filter>  

 <filter-name>struts2</filter-name>  

 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>  

</filter>  

<filter-mapping>   

<filter-name>struts2</filter-name>  

 <url-pattern>*.action</url-pattern>

 </filter-mapping>

</web-app>

Azure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换

Azure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换

如何解决Azure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换

注意:我使用的是 azure apim

我有两个 api 返回 xml 响应显示如下: 响应 1:

<A>
  <B>10</B>
</A>

响应 2:

<C>
  <D>10</D>
</C>

我想转换 XML 响应以获得以下输出,其中 Response 2 放在 Response 1 中 输出:

<A>
  <B>10</B>
  <C>
    <D>10</D>
  </C>
</A>

解决方法

设置入站策略以实现它。

我的想法是结合使用send-requestset-variablereturn-response,也就是先调用2个API,然后保存请求的具体值,组合成一个新的Xml文档。这是我的策略,我使用了 2 个 azure 函数来扮演 API 的角色:

   <inbound>
        <base />
        <send-request mode="new" response-variable-name="reqone" timeout="20" ignore-error="true">
            <set-url>https://xxx.azurewebsites.net/api/HttpTrigger1</set-url>
            <set-method>GET</set-method>
        </send-request>
        <send-request mode="new" response-variable-name="reqtwo" timeout="20" ignore-error="true">
            <set-url>https://xxxx.azurewebsites.net/api/HttpTrigger2</set-url>
            <set-method>GET</set-method>
        </send-request>
        <set-variable name="valOne" value="@{
            string text = ((IResponse)context.Variables["reqone"]).Body.As<XDocument>().Root.Value;
            return text;
        }" />
        <set-variable name="valTwo" value="@{
            string text = ((IResponse)context.Variables["reqtwo"]).Body.As<XDocument>().Root.Value;
            return text;
        }" />
        <return-response>
            <set-status code="200" />
            <set-header name="Content-Type" exists-action="override">
                <value>text/xml</value>
            </set-header>
            <set-body>@{
                XDocument srcTree = new XDocument(  
                    new XElement("A",new XElement("B",context.Variables.GetValueOrDefault("valOne","")),new XElement("C",new XElement("D",context.Variables.GetValueOrDefault("valTwo","")))
                    )  
                );
                return srcTree.ToString();
            }</set-body>
        </return-response>
    </inbound>

这是我的 api 响应:

enter image description here

这是我的测试结果:

enter image description here

eclipse 建立 Dynamic Web Project 时没有 web.xml

eclipse 建立 Dynamic Web Project 时没有 web.xml

 新建的 web Project 没有 web.xml,网上查查原来是这样的。。。。

解决方案:

建立 web 项目时,建到第三个下一步时,将 Generate web.xml deployment descriptor 这个选项选中即可。

flex项目-部署报错Missing deployment descriptor

flex项目-部署报错Missing deployment descriptor "WEB-INF/web.xml"

纯粹的Flex项目,打包成WAR后,部署到weblogic中报错。

错误信息:[J2EE:160043]Missing deployment descriptor "WEB-INF/web.xml" at "D:\bea\mydomain\myserver\stage\TEST.war"
原因:WAR包里面缺少web.xml文件,无法识别为web项目。
解决方法:在WAR包里新增web.xml文件。在根目录下新建文件夹WEB-INF,在WEB-INF下新建文件web.xml,web.xml中的内容如下:

<?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 加载解析顺序的分享已经告一段落,感谢您的关注,如果您想了解更多关于/WebRoot/WEB-INF/web.xml、Azure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换、eclipse 建立 Dynamic Web Project 时没有 web.xml、flex项目-部署报错Missing deployment descriptor "WEB-INF/web.xml"的相关信息,请在本站查询。

本文标签: