Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除“;由「;在码头9.2.x_Java_Jetty - Fatal编程技术网

Java 如何删除“;由「;在码头9.2.x

Java 如何删除“;由「;在码头9.2.x,java,jetty,Java,Jetty,我正在尝试实现一个定制的errorhandler,并在/webapp/web-INF中使用jetty-web.xml,它运行良好 <Configure class="org.eclipse.jetty.server.handler.ContextHandler"> <Set name="errorHandler"> <New class="com.example.CustomErrorHandler" /> </Set> &

我正在尝试实现一个定制的errorhandler,并在/webapp/web-INF中使用jetty-web.xml,它运行良好

<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
   <Set name="errorHandler">
      <New class="com.example.CustomErrorHandler" />
   </Set>
</Configure> 
那么,为什么jetty.xml中没有激活自定义处理程序呢

编辑:使用jetty 9.2.19.v20160908

注:Jetty 9.2.x是EOL(寿命终止)-使用更新的Jetty支持/稳定版本。

存在一种配置,可以从默认错误页面中删除Jetty供电的
(以及HTTP响应头中的
服务器
头)

这是HttpConfiguration.setSendServerVersion(false)
设置

无需创建自定义
错误处理程序
或任何复杂的操作

HttpConfiguration
位于设置为绑定到端口并接受传入连接的
ServerConnector

如果您在
${jetty.base}
目录中使用了适当的
${jetty.home}
(),则可以使用属性为所有
${jetty.home}
附带的
${ServerConnector
配置配置此设置

举个例子

让我们设置一个简单的
${jetty.base}
,它足以演示

[tmp]$mkdir未提供基础
[tmp]$cd未提供基础/
[noprovided base]$java-jar~/jetty-home-9.4.22.v20191022/start.jar\
--创建startd\
--添加到start=http、deploy、webapp
MKDIR:${jetty.base}/start.d
信息:webapp在${jetty.base}/start.d/webapp.ini中初始化
信息:服务器已过渡启用,ini模板可与--add to start=server一起使用
信息:安全性可传递启用
信息:可传递地启用servlet
信息:http在${jetty.base}/start.d/http.ini中初始化
信息:线程池已过渡启用,ini模板可与--add to start=threadpool一起使用
信息:bytebufferpool已过渡启用,ini模板可与--add to start=bytebufferpool一起使用
信息:部署在${jetty.base}/start.d/deploy.ini中初始化
MKDIR:${jetty.base}/webapps
信息:基本目录已修改
[未提供基础]$ls-la
总数16
drwxr-xr-x 4 joakim joakim 4096 11月13日08:09/
drwxr-xr-x 13 joakim joakim 4096 11月13日08:08/
drwxr-xr-x 2 joakim joakim 4096 11月13日08:09开始d/
drwxr-xr-x 2 joakim joakim 4096 11月13日08:09网络应用/
现在让我们运行这个基本默认/未配置的
${jetty.base}

[noprovided base]$java-jar~/jetty-home-9.4.22.v20191022/start.jar
2019-11-13 08:12:28.248:INFO::main:Logging在379ms时初始化为org.eclipse.jetty.util.log.StdErrLog
2019-11-13 08:12:28.467:信息:oejs.服务器:main:jetty-9.4.22.v20191022;建成时间:2019-10-22T13:37:13.455Z;git:B1E6B5512E008F7FBDF1CBEA4 FF8A6446D1073B;jvm 11.0.5+10
2019-11-13 08:12:28.480:信息:oejdp.ScanningAppProvider:main:部署监视器[file:///home/joakim/tmp/noprovided-base/webapps/]间隔1
2019-11-13 08:12:28.503:信息:oejs.AbstractConnector:main:已启动ServerConnector@48ebde5e{HTTP/1.1[HTTP/1.1]}{0.0.0.0:8080}
2019-11-13 08:12:28.504:INFO:oejs.Server:main:Started@634ms
并查看它生成的错误消息(和响应头)的类型

[tmp]$curl-vvhttp://localhost:8080/flarg
*正在尝试::1。。。
*TCP_节点集
*已连接到本地主机(::1)端口8080(#0)
>GET/flarghttp/1.1
>主机:本地主机:8080
>用户代理:curl/7.58.0
>接受:*/*
> 
未找到
是的,由Jetty://9.4.22.v20191022提供动力的
响应体页脚和
服务器:Jetty(9.4.22.v20191022)
页眉存在

现在让我们配置这个
${jetty.base}
来禁用版本报告

[noprovided base]$echo“jetty.httpConfig.sendServerVersion=false”>>start.ini
[未提供基础]$cat start.ini
jetty.httpConfig.sendServerVersion=false
一次重新启动服务器,另一次测试显示

[tmp]$curl-vvhttp://localhost:8080/flarg
*正在尝试::1。。。
*TCP_节点集
*已连接到本地主机(::1)端口8080(#0)
>GET/flarghttp/1.1
>主机:本地主机:8080
>用户代理:curl/7.58.0
>接受:*/*
> 
未找到
响应正文页脚和
服务器
响应页眉提供动力的
现在消失

在您的Jetty版本(9.2.18.v20160721)中,“由Jetty供电”存在于5个不同的位置(
ContextHandler
DefaultHandler
HttpSpiContextHandler
响应
,最后是
ErrorHandler
)。如果您使用的是独立的Jetty服务器,则始终存在4个

使用旧版本的Jetty无法删除所有这些引用

这是通过Jetty 9.3.0代码库上的多次提交解决的

最后的承诺是


您必须使用Jetty 9.3.0(或更新版本)才能从Jetty生成的各种响应中删除这些引用。

我看到提到了
Jetty web.xml
/webapp/web-INF
,这是用于实际的WAR/webapp吗?还有,你的最终目标是什么,你想达到什么?(自定义
ErrorHandler
通常适用于那些希望管理非上下文错误的人,这与您通过
jetty web.xml
使用它的努力相反)我的目标是从默认错误页面中删除“由jetty供电”。是的,jetty-web.xml使用cutsom错误调用jar
<Configure id="Server" class="org.eclipse.jetty.server.Server">
...
  <Call name="addBean">
    <Arg>
      <New class="com.example.CustomErrorHandler"/>
    </Arg>
  </Call> 
</Configure>
public class CustomErrorHandler extends ErrorHandler {

   public CustomErrorHandler() {
      super.setShowMessageInTitle(false);
      super.setShowStacks(false);
   }

   @Override
   protected void writeErrorPageBody(final HttpServletRequest request, final Writer writer, final int code,
         final String message, final boolean showStacks) throws IOException {
      final String uri = request.getRequestURI();

      writeErrorPageMessage(request, writer, code, message, uri);
      if (showStacks) {
         writeErrorPageStacks(request, writer);
      }
   }
}