首页 > 解决方案 > 如何修改 jetty-home-11.0.6\etc\*.xml 文件

问题描述

我正在将 Jetty9 更新为 Jetty11 并理解了 Jetty-Home 和 Jetty-Base 目录的概念。我的问题是如何修改以下文件,因为 Jeety-Home 是只读目录,不应在 Jetty-Home 目录中更新。

  1. 等\jetty.XML
  2. 等\webdefault.XML
  3. 等\jetty-requestlog.xml
  4. lib\jetty-http-11.0.6.jar\org\eclipse\jetty\http(添加 MimeTypes)

我正在阅读有关自定义 Jetty 模块概念的信息,但无法获得太多信息。这是这样做的方法吗?如果有,请分享参考文档

我以前直接在jetty-distribution-9.4.43.v20210629中修改上述文件。

Exa :- 我必须修改以下属性,例如

1. jetty.httpConfig.sendServerVersion to false in etc\jetty.xml
2. Increased the query params to 10000 in etc\jetty.xml.
        <Call name="setAttribute">
            <Arg>org.eclipse.jetty.server.Request.maxFormKeys</Arg>
            <Arg>10000</Arg>
        </Call>
3. set development mode to false in etc\webdefault.xml  
<init-param>
 <param-name>development</param-name>
 <param-value>false</param-value>
</init-param>
4. add below MIME Types in mime.properties file under lib\jetty-http-11.0.6.jar\org\eclipse\jetty\http folder
     appcache=text/cache-manifest
     ttf=application/font-sfnt

标签: eclipsewebserverjettyapplication-serverjetty-10

解决方案


${jetty.home}正如您将看到的,为了实现最终目标,您没有更改目录中的任何内容。

  1. jetty.httpConfig.sendServerVersion假装etc\jetty.xml

${jetty.base}/start.d/*.ini这是一个属性,只需在适当的文件中定义您想要的值。

  1. 将查询参数增加到10000in etc\jetty.xml
       <Call name="setAttribute">
           <Arg>org.eclipse.jetty.server.Request.maxFormKeys</Arg>
           <Arg>10000</Arg>
       </Call>

这不能作为服务器属性或属性。

如果要配置 maxFormKeys,请针对特定的 webapp 和/或上下文进行配置。

为您的 webapp 使用已记录的可部署 XML 并设置maxFormKeys

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ... other configuration for your webapp ...
  <Set name="maxFormContentSize">400000</Set>
  <Set name="maxFormKeys">400</Set>
</Configure>
  1. 将开发模式设置为 falseetc\webdefault.xml
<init-param>
  <param-name>development</param-name>
  <param-value>false</param-value>
</init-param>
  1. 在 lib\jetty-http-11.0.6.jar\org\eclipse\jetty\http 文件夹下的 mime.properties 文件中添加 MIME 类型
    appcache=text/cache-manifest
    ttf=application/font-sfnt

对于这两者,配置它们的正确位置是您的 webapp 特定描述符。

注意:mime.properties定义MimeTypes默认值,其中的值MimeTypes仅用于从DefaultServlet.

对于自定义描述符行为,您可以在特定的 webapp 和/或上下文中配置它。

你可以:

  1. 声明整个新的默认描述符<Set name="defaultsDescriptor">...location...</Set>
  2. 或提供一个替换描述符以在默认描述符之后应用,这只是与默认描述符的更改差异。<Set name="overrideDescriptor">...location...</Set>
  3. WEB-INF/web.xml或在描述符中提供您想要的条目。

对于选项 1(不建议使用这种方法,因为您正在使用 jetty 本身的版本,并且不会获得更新版本的 Jetty 附带的修复/更新/改进),将 的全部内容复制webdefault.xml到您的新文件中${jetty.base}/etc/,并像这样在您的可部署 XML 中引用它${jetty.base}/webapps/<name>.xml...

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ... other configuration for your webapp ...  
  <Set name="defaultsDescriptor"><Property name="jetty.base" default="."/>/etc/custom-default-descriptor.xml</Set>
</Configure>

对于选项 2(最佳服务器级别选项${jetty.base}/etc/override-web.xml
和选项 3(最正确使用 servlet 规范WEB-INF/web.xml,描述符只是与默认值的区别,看起来像这样......

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
   xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
   metadata-complete="false"
   version="3.1" >

  <servlet id="jsp">
    <servlet-name>jsp</servlet-name>
    <init-param>
      <param-name>development</param-name>
      <param-value>false</param-value>
    </init-param>
  </servlet>

  <mime-mapping>
    <extension>appcache</extension>
    <mime-type>text/cache-manifest</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>ttf</extension>
    <mime-type>application/font-sfnt</mime-type>
  </mime-mapping>
</web-app>

对于选项 2,您可以${jetty.base}/webapps/<name>.xml像这样引用它...

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ... other configuration for your webapp ...  
  <Set name="overrideDescriptor"><Property name="jetty.base" default="."/>/etc/override-web.xml</Set>
</Configure>

推荐阅读