From 110a22c8f3a30e19b08b424deaee9e33c5894730 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Mon, 9 Nov 2020 15:06:47 -0600 Subject: [PATCH 01/14] First pass of single page doc generation for 9.4.x --- jetty-documentation/pom.xml | 235 ++++++------------------------------ 1 file changed, 34 insertions(+), 201 deletions(-) diff --git a/jetty-documentation/pom.xml b/jetty-documentation/pom.xml index 69af45cad111..4abfb9a9bd56 100644 --- a/jetty-documentation/pom.xml +++ b/jetty-documentation/pom.xml @@ -1,145 +1,59 @@ + - 4.0.0 org.eclipse.jetty jetty-project - 9.4.35-SNAPSHOT + 9.4.34.v20201102 + + 4.0.0 jetty-documentation Jetty :: Documentation - pom - - ${project.build.directory}/current - ${project.version} - - - maven-resources-plugin - - - copy-assets - process-resources - - copy-resources - - - - - src/main/resources - - ** - - - - ${html.directory} - - - - org.asciidoctor asciidoctor-maven-plugin + 1.5.7.1 + + + org.asciidoctor + asciidoctorj-diagram + 2.0.5 + + + + html5 + + asciidoctor-diagram + + + http://www.eclipse.org/jetty/javadoc/${project.version} + http://download.eclipse.org/jetty/stable-9/xref + ${basedir}/.. + https://github.com/eclipse/jetty.project/tree/jetty-9.4.x + https://github.com/eclipse/jetty.project/tree/jetty-10.0.x-doc-refactor/jetty-documentation/src/main/asciidoc + http://central.maven.org/maven2 + ${project.version} + ${maven.build.timestamp} + true + + - output-html - compile + index + generate-resources process-asciidoc - docbook - book + src/main/asciidoc index.adoc - - attributes+ - - true - true - true - ${project.version} - https://eclipse.org/jetty/javadoc/${javadoc.version} - https://download.eclipse.org/jetty/stable-9/xref - ${basedir}/.. - https://github.com/eclipse/jetty.project/tree/jetty-9.4.x - https://repo1.maven.org/maven2 - ${project.version} - - - - - - - com.agilejava.docbkx - docbkx-maven-plugin - 2.0.17 - - - html - compile - - generate-html - - - css/docbook.css - ${project.basedir}/src/main/docbkx-stylesheet/html/docbook.xsl - - - - - - - - - - - - - - - - - - - - - - - + ${project.build.directory}/html - - - ${project.build.directory}/generated-docs - index.xml - ${project.build.directory}/docbkx/generated - true - true - - - - net.sf.docbook - docbook-xml - 5.1b4-all - resources - zip - runtime - - - net.sf.xslthl - xslthl - 2.1.3 - runtime - - - org.eclipse.jetty.toolchain - jetty-xslt-tools - 1.3 - runtime - - maven-assembly-plugin @@ -160,85 +74,4 @@ - - - - generate-pdf - - - - com.agilejava.docbkx - docbkx-maven-plugin - - - generate-pdf - compile - - generate-pdf - - - index.xml - 1 - A4 - src/main/docbkx-stylesheet/fo/docbook.xsl - - - - - - net.sf.offo - fop-hyph - 1.2 - runtime - - - - - org.asciidoctor - asciidoctor-maven-plugin - - - org.asciidoctor - asciidoctorj-pdf - 1.5.0-alpha.11 - - - - - output-pdf - generate-sources - - process-asciidoc - - - pdf - rouge - index.adoc - - - ${project.version} - true - true - true - ${project.version} - https://download.eclipse.org/jetty/stable-9/apidocs - https://download.eclipse.org/jetty/stable-9/xref - ${basedir}/../jetty.project/ - https://github.com/eclipse/jetty.project/tree/jetty-9.4.x - font - - - - - - - - - - - - - - - + \ No newline at end of file From 6914b4986f77424dfa4ea7eeac36ece4b35097bb Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Mon, 9 Nov 2020 16:58:31 -0600 Subject: [PATCH 02/14] Updates to POM and HTML assembly --- jetty-documentation/pom.xml | 5 +++-- jetty-documentation/src/main/assembly/html.xml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/jetty-documentation/pom.xml b/jetty-documentation/pom.xml index 4abfb9a9bd56..7921a0b76065 100644 --- a/jetty-documentation/pom.xml +++ b/jetty-documentation/pom.xml @@ -1,4 +1,3 @@ - @@ -10,6 +9,8 @@ 4.0.0 jetty-documentation Jetty :: Documentation + pom + @@ -37,7 +38,7 @@ http://central.maven.org/maven2 ${project.version} ${maven.build.timestamp} - true + left diff --git a/jetty-documentation/src/main/assembly/html.xml b/jetty-documentation/src/main/assembly/html.xml index 6c0dcf7c8b40..aa7f4cb9dec2 100644 --- a/jetty-documentation/src/main/assembly/html.xml +++ b/jetty-documentation/src/main/assembly/html.xml @@ -7,7 +7,7 @@ ${project.version} - ${project.basedir}/target/docbkx/html + ${project.basedir}/target/html ** From 951b74cf3cc10d731d58abb62782748b1722edc4 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Tue, 10 Nov 2020 09:38:58 -0600 Subject: [PATCH 03/14] Update snapshot version --- jetty-documentation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jetty-documentation/pom.xml b/jetty-documentation/pom.xml index 7921a0b76065..f811d8af9669 100644 --- a/jetty-documentation/pom.xml +++ b/jetty-documentation/pom.xml @@ -3,7 +3,7 @@ org.eclipse.jetty jetty-project - 9.4.34.v20201102 + 9.4.35-SNAPSHOT 4.0.0 From a4c612d4bcd2553147571c76f7336ac09733fe38 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Wed, 11 Nov 2020 10:24:00 -0600 Subject: [PATCH 04/14] Removing deprecated Docbook assets --- .../src/main/docbkx-resources/css/docbook.css | 310 --- .../css/font-awesome/font-awesome-ie7.min.css | 22 - .../css/font-awesome/font-awesome.css | 2086 ----------------- .../css/font-awesome/font-awesome.css.map | 7 - .../css/font-awesome/font-awesome.min.css | 4 - .../css/highlighter/darkula.css | 152 -- .../css/highlighter/default.css | 155 -- .../css/highlighter/foundation.css | 135 -- .../css/highlighter/github.css | 123 - .../css/highlighter/googlecode.css | 144 -- .../css/highlighter/zenburn.css | 118 - .../docbkx-resources/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../fonts/fontawesome-webfont.svg | 655 ------ .../fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes .../main/docbkx-resources/images/caution.png | Bin 1250 -> 0 bytes .../main/docbkx-resources/images/caution.svg | 25 - .../docbkx-resources/images/draft-ribbon.png | Bin 9413 -> 0 bytes .../main/docbkx-resources/images/favicon.ico | Bin 1150 -> 0 bytes .../docbkx-resources/images/important.png | Bin 722 -> 0 bytes .../docbkx-resources/images/important.svg | 25 - .../docbkx-resources/images/jetty-avatar.svg | 179 -- .../images/jetty-header-logo.png | Bin 5822 -> 0 bytes .../images/jetty-logo-shadow.png | Bin 37553 -> 0 bytes .../images/jetty-logo-shadow.svg | 113 - .../docbkx-resources/images/jetty-logo.svg | 88 - .../main/docbkx-resources/images/jetty.gif | Bin 9918 -> 0 bytes .../src/main/docbkx-resources/images/note.png | Bin 490 -> 0 bytes .../src/main/docbkx-resources/images/note.svg | 33 - .../src/main/docbkx-resources/images/tip.png | Bin 449 -> 0 bytes .../src/main/docbkx-resources/images/tip.svg | 31 - .../main/docbkx-resources/images/warning.png | Bin 1241 -> 0 bytes .../main/docbkx-resources/images/warning.svg | 23 - .../docbkx-resources/js/highlight.pack.js | 1 - .../src/main/docbkx-stylesheet/fo/docbook.xsl | 288 --- .../main/docbkx-stylesheet/html/docbook.xsl | 438 ---- 38 files changed, 5155 deletions(-) delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/docbook.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome-ie7.min.css delete mode 100755 jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css delete mode 100755 jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css.map delete mode 100755 jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.min.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/darkula.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/default.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/foundation.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/github.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/googlecode.css delete mode 100644 jetty-documentation/src/main/docbkx-resources/css/highlighter/zenburn.css delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/FontAwesome.otf delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.eot delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.svg delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.ttf delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.woff delete mode 100755 jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.woff2 delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/caution.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/caution.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/draft-ribbon.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/favicon.ico delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/important.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/important.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty-avatar.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty-header-logo.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty-logo.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/jetty.gif delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/note.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/note.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/tip.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/tip.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/warning.png delete mode 100644 jetty-documentation/src/main/docbkx-resources/images/warning.svg delete mode 100644 jetty-documentation/src/main/docbkx-resources/js/highlight.pack.js delete mode 100644 jetty-documentation/src/main/docbkx-stylesheet/fo/docbook.xsl delete mode 100644 jetty-documentation/src/main/docbkx-stylesheet/html/docbook.xsl diff --git a/jetty-documentation/src/main/docbkx-resources/css/docbook.css b/jetty-documentation/src/main/docbkx-resources/css/docbook.css deleted file mode 100644 index 9245481c19b1..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/docbook.css +++ /dev/null @@ -1,310 +0,0 @@ -a { - text-decoration: none; - color: #069; -} - -a:hover { - text-decoration: underline; -} - -a:visited { - color: #036; -} - -body { - font-family: Verdana, Helvetica, arial, freesans, clean, sans-serif; - font-size: 10pt; - width: 960px; - margin-left: auto; - margin-right: auto; - background-color: #FFF; - color: #444; -} - -code { - font-size: 10pt; -} - -.table-contents table td, -.table-contents table th, -.navheader table td, -.navfooter table td { - font-size: 10pt; -} - -.navfooter hr, -.navheader hr { - border: 0px; - border-bottom: 1px solid #fc390e; /* jetty orange */ -} - -.navfooter a, -.navheader a { - font-weight: bold; - color: #fc390e; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: bold; - margin-bottom: 12pt; -} - -h1 { font-size: 18pt; } -h2 { font-size: 16pt; } -h3 { font-size: 14pt; } -h4 { font-size: 12pt; } -h5 { font-size: 10pt; } -h6 { font-size: 10pt; } - -p, ul { - margin: 1.286em 0; - line-height: 120%; -} - -dl { - margin: 0; - line-height: 120%; -} - -pre { - font-family: "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; - font-weight: normal !important; - font-style: normal !important; - font-size: 10pt !important; - margin: 0px; - overflow-x: auto; -} - -strong { - color: #000; -} - -/* Pretty Tables */ - -.table table { - border: 1px solid #036; - padding: 0; - border-collapse: collapse; -} - -.table tr { - border: 0; - padding: 0; -} - -.table tr:nth-child(even) { - background-color: #EEE; -} - -.table th { - padding: 5px; - background: #036; - color: white; - text-align: center; - font-weight: bold; -} - -.table td { - border: 1px solid #CCC; - padding: 5px; -} - -h2.subtitle { - font-variant: normal; -} - -h3.author { - font-variant: normal; - margin-top: 2em; - margin-bottom: 0; -} - -.email { -} - -.informalfigure { - text-align: center; -} - -.mediaobject { - display: inline-block; -} - -div.variablelist dd p { - margin: 0; - margin-top: 0; - margin-bottom: 1em; - margin-left: 1em; -} - -span.term { - font-weight:bold; - padding-left:3px; - padding-right:3px; -} - -.caption p { - margin: 0; - text-align: right; -} - -.navfooter table tr td { - width: 33.33%; -} - -.navfooter { - margin-bottom: 1.0em; -} - -.example .title { - color: #248; -} - -div .screenexample { - background-color: #EEE; - border:solid 1px #CCC; - padding: 1.5em; - color: black; - border-radius: 15px; -} - -pre.screen { - white-space: pre; - width: 100%; - color: black; - overflow-x: initial; - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ -} - -div.variablelist { - padding-left: 20px; -} - -.programlisting { - color: black; - font-weight: normal; -} - -.programlisting .hl-tag { - color: #881280; - font-weight: normal; -} - -.programlisting .hl-string { - color: green; - font-weight: bold; -} - -.programlisting .hl-keyword { - color: #009; - font-weight: bold; -} - -.programlisting .hl-attribute { - color: #fc390e; -} - -.programlisting .hl-value { - color: #009; -} - -.programlisting .hl-annotation { - color: #880; -} - -.programlisting .hl-comment { - color: gray; - font-style: italic; -} - -.caution, .important, .note, .tip, .warning { - padding: 10px; - padding-left: 2.0em; - margin: 10px; - border-style: solid; - border-width: 1px; - border-top-width: 4px; -} - -.caution { border-color: #c60; } -.caution h3 { color: #c60; } - -.warning { border-color: #900; } -.warning h3 { color: #900; } - -.important { border-color: #069; } -.important h3 { color: #069; } - -.note { border-color: #909; } -.note h3 { color: #909; } - -.tip { border-color: #090; } -.tip h3 { color: #090; } - -.caution h3, .important h3, .note h3, .tip h3, .warning h3 { - margin: 0px; - margin-bottom: 0.5em; -} - -.jetty-callout { - background-color: #DEF; - text-align: left; - border: thin solid #CCF; - padding: 4px; -} - -.jetty-callout h5 { - font-size: 10pt; - margin: 0; - margin-bottom: 5px; -} - -.jetty-callout .callout { - font-weight: bold; - font-style: normal; -} - -.jetty-callout a { - text-decoration: none; -} - -.jetty-callout .website { - color: #48f; -} - -.jetty-callout p { - font-style: oblique; - margin: 0; -} - -div.draft { - background-color: #FF3300; - text-align: left; - font-size: 110%; - border:thin dotted blue; - padding: 4px; - margin-top: 2.0em; - margin-bottom: 2.0em; - padding: 2.0em; - color: white; -} - -div.draft p { - font-weight: bold; - margin: 0; -} - -div.draft h5 { - margin: 0; - margin-bottom: 1.0em; - font-size: 150%; -} - -div.draft a { - color: yellow; -} - diff --git a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome-ie7.min.css b/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome-ie7.min.css deleted file mode 100644 index ae301609e00b..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome-ie7.min.css +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Font Awesome 3.0.2 - * the iconic font designed for use with Twitter Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fortawesome.github.com/Font-Awesome/ - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - * Contact - * ------------------------------------------------------- - * Email: dave@davegandy.com - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle}.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%}.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px}.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit}.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em}a [class^="icon-"],a [class*=" icon-"]{cursor:pointer}ul.icons{text-indent:-1.5em;margin-left:3em}.icon-glass{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-music{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-search{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-film{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-large{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-in{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-out{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cog{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trash{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-home{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-time{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-road{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-inbox{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-repeat{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-refresh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-headphones{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-qrcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-barcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tags{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-book{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-print{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-font{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bold{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-italic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-height{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-width{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-center{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-justify{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facetime-video{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-picture{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pencil{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-map-marker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-adjust{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tint{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-edit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-move{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pause{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eject{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-question-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-info-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-screenshot{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ban-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-full{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-small{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-asterisk{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exclamation-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-gift{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-leaf{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fire{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-warning-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plane{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-calendar{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-random{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magnet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-retweet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-shopping-cart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bar-chart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera-retro{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-key{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cogs{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-half{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signout{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pushpin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-external-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trophy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lemon{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-credit-card{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rss{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hdd{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bullhorn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-certificate{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-globe{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-wrench{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tasks{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-filter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-briefcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fullscreen{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-group{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beaker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cut{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-copy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paper-clip{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-save{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sign-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reorder{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ul{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ol{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-strikethrough{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-underline{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-table{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-truck{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-money{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-columns{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-undo{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-legal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-dashboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bolt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sitemap{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-umbrella{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paste{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lightbulb{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exchange{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user-md{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stethoscope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-suitcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-coffee{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-food{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-building{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hospital{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ambulance{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-medkit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fighter-jet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beer{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-h-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-desktop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-laptop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tablet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-mobile-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-spinner{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reply{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')} \ No newline at end of file diff --git a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css b/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css deleted file mode 100755 index ace5a08451fc..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css +++ /dev/null @@ -1,2086 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../../fonts/fontawesome-webfont.eot?v=4.5.0'); - src: url('../../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-feed:before, -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-intersex:before, -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-yc:before, -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-battery-4:before, -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battery-2:before, -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-1:before, -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-0:before, -.fa-battery-empty:before { - content: "\f244"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-sticky-note-o:before { - content: "\f24a"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-hourglass-o:before { - content: "\f250"; -} -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: "\f255"; -} -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: "\f256"; -} -.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa-hand-spock-o:before { - content: "\f259"; -} -.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-tv:before, -.fa-television:before { - content: "\f26c"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa-calendar-times-o:before { - content: "\f273"; -} -.fa-calendar-check-o:before { - content: "\f274"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-map-o:before { - content: "\f278"; -} -.fa-map:before { - content: "\f279"; -} -.fa-commenting:before { - content: "\f27a"; -} -.fa-commenting-o:before { - content: "\f27b"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-vimeo:before { - content: "\f27d"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-credit-card-alt:before { - content: "\f283"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-pause-circle-o:before { - content: "\f28c"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stop-circle-o:before { - content: "\f28e"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-percent:before { - content: "\f295"; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css.map b/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css.map deleted file mode 100755 index 60763a8640f1..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], -"names": [], -"file": "font-awesome.css" -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.min.css b/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.min.css deleted file mode 100755 index 92f6e0e34846..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/font-awesome/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../../fonts/fontawesome-webfont.eot?v=4.5.0');src:url('../../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%} .fa-2x{font-size:2em} .fa-3x{font-size:3em} .fa-4x{font-size:4em} .fa-5x{font-size:5em} .fa-fw{width:1.28571429em;text-align:center} .fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none} .fa-ul>li{position:relative} .fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center} .fa-li.fa-lg{left:-1.85714286em} .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em} .fa-pull-left{float:left} .fa-pull-right{float:right} .fa.fa-pull-left{margin-right:.3em} .fa.fa-pull-right{margin-left:.3em} .pull-right{float:right} .pull-left{float:left} .fa.pull-left{margin-right:.3em} .fa.pull-right{margin-left:.3em} .fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear} .fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)} @-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} @keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} .fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)} .fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)} .fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)} .fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)} .fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)} :root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none} .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle} .fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center} .fa-stack-1x{line-height:inherit} .fa-stack-2x{font-size:2em} .fa-inverse{color:#fff} .fa-glass:before{content:"\f000"} .fa-music:before{content:"\f001"} .fa-search:before{content:"\f002"} .fa-envelope-o:before{content:"\f003"} .fa-heart:before{content:"\f004"} .fa-star:before{content:"\f005"} .fa-star-o:before{content:"\f006"} .fa-user:before{content:"\f007"} .fa-film:before{content:"\f008"} .fa-th-large:before{content:"\f009"} .fa-th:before{content:"\f00a"} .fa-th-list:before{content:"\f00b"} .fa-check:before{content:"\f00c"} .fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"} .fa-search-plus:before{content:"\f00e"} .fa-search-minus:before{content:"\f010"} .fa-power-off:before{content:"\f011"} .fa-signal:before{content:"\f012"} .fa-gear:before,.fa-cog:before{content:"\f013"} .fa-trash-o:before{content:"\f014"} .fa-home:before{content:"\f015"} .fa-file-o:before{content:"\f016"} .fa-clock-o:before{content:"\f017"} .fa-road:before{content:"\f018"} .fa-download:before{content:"\f019"} .fa-arrow-circle-o-down:before{content:"\f01a"} .fa-arrow-circle-o-up:before{content:"\f01b"} .fa-inbox:before{content:"\f01c"} .fa-play-circle-o:before{content:"\f01d"} .fa-rotate-right:before,.fa-repeat:before{content:"\f01e"} .fa-refresh:before{content:"\f021"} .fa-list-alt:before{content:"\f022"} .fa-lock:before{content:"\f023"} .fa-flag:before{content:"\f024"} .fa-headphones:before{content:"\f025"} .fa-volume-off:before{content:"\f026"} .fa-volume-down:before{content:"\f027"} .fa-volume-up:before{content:"\f028"} .fa-qrcode:before{content:"\f029"} .fa-barcode:before{content:"\f02a"} .fa-tag:before{content:"\f02b"} .fa-tags:before{content:"\f02c"} .fa-book:before{content:"\f02d"} .fa-bookmark:before{content:"\f02e"} .fa-print:before{content:"\f02f"} .fa-camera:before{content:"\f030"} .fa-font:before{content:"\f031"} .fa-bold:before{content:"\f032"} .fa-italic:before{content:"\f033"} .fa-text-height:before{content:"\f034"} .fa-text-width:before{content:"\f035"} .fa-align-left:before{content:"\f036"} .fa-align-center:before{content:"\f037"} .fa-align-right:before{content:"\f038"} .fa-align-justify:before{content:"\f039"} .fa-list:before{content:"\f03a"} .fa-dedent:before,.fa-outdent:before{content:"\f03b"} .fa-indent:before{content:"\f03c"} .fa-video-camera:before{content:"\f03d"} .fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"} .fa-pencil:before{content:"\f040"} .fa-map-marker:before{content:"\f041"} .fa-adjust:before{content:"\f042"} .fa-tint:before{content:"\f043"} .fa-edit:before,.fa-pencil-square-o:before{content:"\f044"} .fa-share-square-o:before{content:"\f045"} .fa-check-square-o:before{content:"\f046"} .fa-arrows:before{content:"\f047"} .fa-step-backward:before{content:"\f048"} .fa-fast-backward:before{content:"\f049"} .fa-backward:before{content:"\f04a"} .fa-play:before{content:"\f04b"} .fa-pause:before{content:"\f04c"} .fa-stop:before{content:"\f04d"} .fa-forward:before{content:"\f04e"} .fa-fast-forward:before{content:"\f050"} .fa-step-forward:before{content:"\f051"} .fa-eject:before{content:"\f052"} .fa-chevron-left:before{content:"\f053"} .fa-chevron-right:before{content:"\f054"} .fa-plus-circle:before{content:"\f055"} .fa-minus-circle:before{content:"\f056"} .fa-times-circle:before{content:"\f057"} .fa-check-circle:before{content:"\f058"} .fa-question-circle:before{content:"\f059"} .fa-info-circle:before{content:"\f05a"} .fa-crosshairs:before{content:"\f05b"} .fa-times-circle-o:before{content:"\f05c"} .fa-check-circle-o:before{content:"\f05d"} .fa-ban:before{content:"\f05e"} .fa-arrow-left:before{content:"\f060"} .fa-arrow-right:before{content:"\f061"} .fa-arrow-up:before{content:"\f062"} .fa-arrow-down:before{content:"\f063"} .fa-mail-forward:before,.fa-share:before{content:"\f064"} .fa-expand:before{content:"\f065"} .fa-compress:before{content:"\f066"} .fa-plus:before{content:"\f067"} .fa-minus:before{content:"\f068"} .fa-asterisk:before{content:"\f069"} .fa-exclamation-circle:before{content:"\f06a"} .fa-gift:before{content:"\f06b"} .fa-leaf:before{content:"\f06c"} .fa-fire:before{content:"\f06d"} .fa-eye:before{content:"\f06e"} .fa-eye-slash:before{content:"\f070"} .fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"} .fa-plane:before{content:"\f072"} .fa-calendar:before{content:"\f073"} .fa-random:before{content:"\f074"} .fa-comment:before{content:"\f075"} .fa-magnet:before{content:"\f076"} .fa-chevron-up:before{content:"\f077"} .fa-chevron-down:before{content:"\f078"} .fa-retweet:before{content:"\f079"} .fa-shopping-cart:before{content:"\f07a"} .fa-folder:before{content:"\f07b"} .fa-folder-open:before{content:"\f07c"} .fa-arrows-v:before{content:"\f07d"} .fa-arrows-h:before{content:"\f07e"} .fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"} .fa-twitter-square:before{content:"\f081"} .fa-facebook-square:before{content:"\f082"} .fa-camera-retro:before{content:"\f083"} .fa-key:before{content:"\f084"} .fa-gears:before,.fa-cogs:before{content:"\f085"} .fa-comments:before{content:"\f086"} .fa-thumbs-o-up:before{content:"\f087"} .fa-thumbs-o-down:before{content:"\f088"} .fa-star-half:before{content:"\f089"} .fa-heart-o:before{content:"\f08a"} .fa-sign-out:before{content:"\f08b"} .fa-linkedin-square:before{content:"\f08c"} .fa-thumb-tack:before{content:"\f08d"} .fa-external-link:before{content:"\f08e"} .fa-sign-in:before{content:"\f090"} .fa-trophy:before{content:"\f091"} .fa-github-square:before{content:"\f092"} .fa-upload:before{content:"\f093"} .fa-lemon-o:before{content:"\f094"} .fa-phone:before{content:"\f095"} .fa-square-o:before{content:"\f096"} .fa-bookmark-o:before{content:"\f097"} .fa-phone-square:before{content:"\f098"} .fa-twitter:before{content:"\f099"} .fa-facebook-f:before,.fa-facebook:before{content:"\f09a"} .fa-github:before{content:"\f09b"} .fa-unlock:before{content:"\f09c"} .fa-credit-card:before{content:"\f09d"} .fa-feed:before,.fa-rss:before{content:"\f09e"} .fa-hdd-o:before{content:"\f0a0"} .fa-bullhorn:before{content:"\f0a1"} .fa-bell:before{content:"\f0f3"} .fa-certificate:before{content:"\f0a3"} .fa-hand-o-right:before{content:"\f0a4"} .fa-hand-o-left:before{content:"\f0a5"} .fa-hand-o-up:before{content:"\f0a6"} .fa-hand-o-down:before{content:"\f0a7"} .fa-arrow-circle-left:before{content:"\f0a8"} .fa-arrow-circle-right:before{content:"\f0a9"} .fa-arrow-circle-up:before{content:"\f0aa"} .fa-arrow-circle-down:before{content:"\f0ab"} .fa-globe:before{content:"\f0ac"} .fa-wrench:before{content:"\f0ad"} .fa-tasks:before{content:"\f0ae"} .fa-filter:before{content:"\f0b0"} .fa-briefcase:before{content:"\f0b1"} .fa-arrows-alt:before{content:"\f0b2"} .fa-group:before,.fa-users:before{content:"\f0c0"} .fa-chain:before,.fa-link:before{content:"\f0c1"} .fa-cloud:before{content:"\f0c2"} .fa-flask:before{content:"\f0c3"} .fa-cut:before,.fa-scissors:before{content:"\f0c4"} .fa-copy:before,.fa-files-o:before{content:"\f0c5"} .fa-paperclip:before{content:"\f0c6"} .fa-save:before,.fa-floppy-o:before{content:"\f0c7"} .fa-square:before{content:"\f0c8"} .fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"} .fa-list-ul:before{content:"\f0ca"} .fa-list-ol:before{content:"\f0cb"} .fa-strikethrough:before{content:"\f0cc"} .fa-underline:before{content:"\f0cd"} .fa-table:before{content:"\f0ce"} .fa-magic:before{content:"\f0d0"} .fa-truck:before{content:"\f0d1"} .fa-pinterest:before{content:"\f0d2"} .fa-pinterest-square:before{content:"\f0d3"} .fa-google-plus-square:before{content:"\f0d4"} .fa-google-plus:before{content:"\f0d5"} .fa-money:before{content:"\f0d6"} .fa-caret-down:before{content:"\f0d7"} .fa-caret-up:before{content:"\f0d8"} .fa-caret-left:before{content:"\f0d9"} .fa-caret-right:before{content:"\f0da"} .fa-columns:before{content:"\f0db"} .fa-unsorted:before,.fa-sort:before{content:"\f0dc"} .fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"} .fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"} .fa-envelope:before{content:"\f0e0"} .fa-linkedin:before{content:"\f0e1"} .fa-rotate-left:before,.fa-undo:before{content:"\f0e2"} .fa-legal:before,.fa-gavel:before{content:"\f0e3"} .fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"} .fa-comment-o:before{content:"\f0e5"} .fa-comments-o:before{content:"\f0e6"} .fa-flash:before,.fa-bolt:before{content:"\f0e7"} .fa-sitemap:before{content:"\f0e8"} .fa-umbrella:before{content:"\f0e9"} .fa-paste:before,.fa-clipboard:before{content:"\f0ea"} .fa-lightbulb-o:before{content:"\f0eb"} .fa-exchange:before{content:"\f0ec"} .fa-cloud-download:before{content:"\f0ed"} .fa-cloud-upload:before{content:"\f0ee"} .fa-user-md:before{content:"\f0f0"} .fa-stethoscope:before{content:"\f0f1"} .fa-suitcase:before{content:"\f0f2"} .fa-bell-o:before{content:"\f0a2"} .fa-coffee:before{content:"\f0f4"} .fa-cutlery:before{content:"\f0f5"} .fa-file-text-o:before{content:"\f0f6"} .fa-building-o:before{content:"\f0f7"} .fa-hospital-o:before{content:"\f0f8"} .fa-ambulance:before{content:"\f0f9"} .fa-medkit:before{content:"\f0fa"} .fa-fighter-jet:before{content:"\f0fb"} .fa-beer:before{content:"\f0fc"} .fa-h-square:before{content:"\f0fd"} .fa-plus-square:before{content:"\f0fe"} .fa-angle-double-left:before{content:"\f100"} .fa-angle-double-right:before{content:"\f101"} .fa-angle-double-up:before{content:"\f102"} .fa-angle-double-down:before{content:"\f103"} .fa-angle-left:before{content:"\f104"} .fa-angle-right:before{content:"\f105"} .fa-angle-up:before{content:"\f106"} .fa-angle-down:before{content:"\f107"} .fa-desktop:before{content:"\f108"} .fa-laptop:before{content:"\f109"} .fa-tablet:before{content:"\f10a"} .fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"} .fa-circle-o:before{content:"\f10c"} .fa-quote-left:before{content:"\f10d"} .fa-quote-right:before{content:"\f10e"} .fa-spinner:before{content:"\f110"} .fa-circle:before{content:"\f111"} .fa-mail-reply:before,.fa-reply:before{content:"\f112"} .fa-github-alt:before{content:"\f113"} .fa-folder-o:before{content:"\f114"} .fa-folder-open-o:before{content:"\f115"} .fa-smile-o:before{content:"\f118"} .fa-frown-o:before{content:"\f119"} .fa-meh-o:before{content:"\f11a"} .fa-gamepad:before{content:"\f11b"} .fa-keyboard-o:before{content:"\f11c"} .fa-flag-o:before{content:"\f11d"} .fa-flag-checkered:before{content:"\f11e"} .fa-terminal:before{content:"\f120"} .fa-code:before{content:"\f121"} .fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"} .fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"} .fa-location-arrow:before{content:"\f124"} .fa-crop:before{content:"\f125"} .fa-code-fork:before{content:"\f126"} .fa-unlink:before,.fa-chain-broken:before{content:"\f127"} .fa-question:before{content:"\f128"} .fa-info:before{content:"\f129"} .fa-exclamation:before{content:"\f12a"} .fa-superscript:before{content:"\f12b"} .fa-subscript:before{content:"\f12c"} .fa-eraser:before{content:"\f12d"} .fa-puzzle-piece:before{content:"\f12e"} .fa-microphone:before{content:"\f130"} .fa-microphone-slash:before{content:"\f131"} .fa-shield:before{content:"\f132"} .fa-calendar-o:before{content:"\f133"} .fa-fire-extinguisher:before{content:"\f134"} .fa-rocket:before{content:"\f135"} .fa-maxcdn:before{content:"\f136"} .fa-chevron-circle-left:before{content:"\f137"} .fa-chevron-circle-right:before{content:"\f138"} .fa-chevron-circle-up:before{content:"\f139"} .fa-chevron-circle-down:before{content:"\f13a"} .fa-html5:before{content:"\f13b"} .fa-css3:before{content:"\f13c"} .fa-anchor:before{content:"\f13d"} .fa-unlock-alt:before{content:"\f13e"} .fa-bullseye:before{content:"\f140"} .fa-ellipsis-h:before{content:"\f141"} .fa-ellipsis-v:before{content:"\f142"} .fa-rss-square:before{content:"\f143"} .fa-play-circle:before{content:"\f144"} .fa-ticket:before{content:"\f145"} .fa-minus-square:before{content:"\f146"} .fa-minus-square-o:before{content:"\f147"} .fa-level-up:before{content:"\f148"} .fa-level-down:before{content:"\f149"} .fa-check-square:before{content:"\f14a"} .fa-pencil-square:before{content:"\f14b"} .fa-external-link-square:before{content:"\f14c"} .fa-share-square:before{content:"\f14d"} .fa-compass:before{content:"\f14e"} .fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"} .fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"} .fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"} .fa-euro:before,.fa-eur:before{content:"\f153"} .fa-gbp:before{content:"\f154"} .fa-dollar:before,.fa-usd:before{content:"\f155"} .fa-rupee:before,.fa-inr:before{content:"\f156"} .fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"} .fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"} .fa-won:before,.fa-krw:before{content:"\f159"} .fa-bitcoin:before,.fa-btc:before{content:"\f15a"} .fa-file:before{content:"\f15b"} .fa-file-text:before{content:"\f15c"} .fa-sort-alpha-asc:before{content:"\f15d"} .fa-sort-alpha-desc:before{content:"\f15e"} .fa-sort-amount-asc:before{content:"\f160"} .fa-sort-amount-desc:before{content:"\f161"} .fa-sort-numeric-asc:before{content:"\f162"} .fa-sort-numeric-desc:before{content:"\f163"} .fa-thumbs-up:before{content:"\f164"} .fa-thumbs-down:before{content:"\f165"} .fa-youtube-square:before{content:"\f166"} .fa-youtube:before{content:"\f167"} .fa-xing:before{content:"\f168"} .fa-xing-square:before{content:"\f169"} .fa-youtube-play:before{content:"\f16a"} .fa-dropbox:before{content:"\f16b"} .fa-stack-overflow:before{content:"\f16c"} .fa-instagram:before{content:"\f16d"} .fa-flickr:before{content:"\f16e"} .fa-adn:before{content:"\f170"} .fa-bitbucket:before{content:"\f171"} .fa-bitbucket-square:before{content:"\f172"} .fa-tumblr:before{content:"\f173"} .fa-tumblr-square:before{content:"\f174"} .fa-long-arrow-down:before{content:"\f175"} .fa-long-arrow-up:before{content:"\f176"} .fa-long-arrow-left:before{content:"\f177"} .fa-long-arrow-right:before{content:"\f178"} .fa-apple:before{content:"\f179"} .fa-windows:before{content:"\f17a"} .fa-android:before{content:"\f17b"} .fa-linux:before{content:"\f17c"} .fa-dribbble:before{content:"\f17d"} .fa-skype:before{content:"\f17e"} .fa-foursquare:before{content:"\f180"} .fa-trello:before{content:"\f181"} .fa-female:before{content:"\f182"} .fa-male:before{content:"\f183"} .fa-gittip:before,.fa-gratipay:before{content:"\f184"} .fa-sun-o:before{content:"\f185"} .fa-moon-o:before{content:"\f186"} .fa-archive:before{content:"\f187"} .fa-bug:before{content:"\f188"} .fa-vk:before{content:"\f189"} .fa-weibo:before{content:"\f18a"} .fa-renren:before{content:"\f18b"} .fa-pagelines:before{content:"\f18c"} .fa-stack-exchange:before{content:"\f18d"} .fa-arrow-circle-o-right:before{content:"\f18e"} .fa-arrow-circle-o-left:before{content:"\f190"} .fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"} .fa-dot-circle-o:before{content:"\f192"} .fa-wheelchair:before{content:"\f193"} .fa-vimeo-square:before{content:"\f194"} .fa-turkish-lira:before,.fa-try:before{content:"\f195"} .fa-plus-square-o:before{content:"\f196"} .fa-space-shuttle:before{content:"\f197"} .fa-slack:before{content:"\f198"} .fa-envelope-square:before{content:"\f199"} .fa-wordpress:before{content:"\f19a"} .fa-openid:before{content:"\f19b"} .fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"} .fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"} .fa-yahoo:before{content:"\f19e"} .fa-google:before{content:"\f1a0"} .fa-reddit:before{content:"\f1a1"} .fa-reddit-square:before{content:"\f1a2"} .fa-stumbleupon-circle:before{content:"\f1a3"} .fa-stumbleupon:before{content:"\f1a4"} .fa-delicious:before{content:"\f1a5"} .fa-digg:before{content:"\f1a6"} .fa-pied-piper:before{content:"\f1a7"} .fa-pied-piper-alt:before{content:"\f1a8"} .fa-drupal:before{content:"\f1a9"} .fa-joomla:before{content:"\f1aa"} .fa-language:before{content:"\f1ab"} .fa-fax:before{content:"\f1ac"} .fa-building:before{content:"\f1ad"} .fa-child:before{content:"\f1ae"} .fa-paw:before{content:"\f1b0"} .fa-spoon:before{content:"\f1b1"} .fa-cube:before{content:"\f1b2"} .fa-cubes:before{content:"\f1b3"} .fa-behance:before{content:"\f1b4"} .fa-behance-square:before{content:"\f1b5"} .fa-steam:before{content:"\f1b6"} .fa-steam-square:before{content:"\f1b7"} .fa-recycle:before{content:"\f1b8"} .fa-automobile:before,.fa-car:before{content:"\f1b9"} .fa-cab:before,.fa-taxi:before{content:"\f1ba"} .fa-tree:before{content:"\f1bb"} .fa-spotify:before{content:"\f1bc"} .fa-deviantart:before{content:"\f1bd"} .fa-soundcloud:before{content:"\f1be"} .fa-database:before{content:"\f1c0"} .fa-file-pdf-o:before{content:"\f1c1"} .fa-file-word-o:before{content:"\f1c2"} .fa-file-excel-o:before{content:"\f1c3"} .fa-file-powerpoint-o:before{content:"\f1c4"} .fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"} .fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"} .fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"} .fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"} .fa-file-code-o:before{content:"\f1c9"} .fa-vine:before{content:"\f1ca"} .fa-codepen:before{content:"\f1cb"} .fa-jsfiddle:before{content:"\f1cc"} .fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"} .fa-circle-o-notch:before{content:"\f1ce"} .fa-ra:before,.fa-rebel:before{content:"\f1d0"} .fa-ge:before,.fa-empire:before{content:"\f1d1"} .fa-git-square:before{content:"\f1d2"} .fa-git:before{content:"\f1d3"} .fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"} .fa-tencent-weibo:before{content:"\f1d5"} .fa-qq:before{content:"\f1d6"} .fa-wechat:before,.fa-weixin:before{content:"\f1d7"} .fa-send:before,.fa-paper-plane:before{content:"\f1d8"} .fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"} .fa-history:before{content:"\f1da"} .fa-circle-thin:before{content:"\f1db"} .fa-header:before{content:"\f1dc"} .fa-paragraph:before{content:"\f1dd"} .fa-sliders:before{content:"\f1de"} .fa-share-alt:before{content:"\f1e0"} .fa-share-alt-square:before{content:"\f1e1"} .fa-bomb:before{content:"\f1e2"} .fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"} .fa-tty:before{content:"\f1e4"} .fa-binoculars:before{content:"\f1e5"} .fa-plug:before{content:"\f1e6"} .fa-slideshare:before{content:"\f1e7"} .fa-twitch:before{content:"\f1e8"} .fa-yelp:before{content:"\f1e9"} .fa-newspaper-o:before{content:"\f1ea"} .fa-wifi:before{content:"\f1eb"} .fa-calculator:before{content:"\f1ec"} .fa-paypal:before{content:"\f1ed"} .fa-google-wallet:before{content:"\f1ee"} .fa-cc-visa:before{content:"\f1f0"} .fa-cc-mastercard:before{content:"\f1f1"} .fa-cc-discover:before{content:"\f1f2"} .fa-cc-amex:before{content:"\f1f3"} .fa-cc-paypal:before{content:"\f1f4"} .fa-cc-stripe:before{content:"\f1f5"} .fa-bell-slash:before{content:"\f1f6"} .fa-bell-slash-o:before{content:"\f1f7"} .fa-trash:before{content:"\f1f8"} .fa-copyright:before{content:"\f1f9"} .fa-at:before{content:"\f1fa"} .fa-eyedropper:before{content:"\f1fb"} .fa-paint-brush:before{content:"\f1fc"} .fa-birthday-cake:before{content:"\f1fd"} .fa-area-chart:before{content:"\f1fe"} .fa-pie-chart:before{content:"\f200"} .fa-line-chart:before{content:"\f201"} .fa-lastfm:before{content:"\f202"} .fa-lastfm-square:before{content:"\f203"} .fa-toggle-off:before{content:"\f204"} .fa-toggle-on:before{content:"\f205"} .fa-bicycle:before{content:"\f206"} .fa-bus:before{content:"\f207"} .fa-ioxhost:before{content:"\f208"} .fa-angellist:before{content:"\f209"} .fa-cc:before{content:"\f20a"} .fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"} .fa-meanpath:before{content:"\f20c"} .fa-buysellads:before{content:"\f20d"} .fa-connectdevelop:before{content:"\f20e"} .fa-dashcube:before{content:"\f210"} .fa-forumbee:before{content:"\f211"} .fa-leanpub:before{content:"\f212"} .fa-sellsy:before{content:"\f213"} .fa-shirtsinbulk:before{content:"\f214"} .fa-simplybuilt:before{content:"\f215"} .fa-skyatlas:before{content:"\f216"} .fa-cart-plus:before{content:"\f217"} .fa-cart-arrow-down:before{content:"\f218"} .fa-diamond:before{content:"\f219"} .fa-ship:before{content:"\f21a"} .fa-user-secret:before{content:"\f21b"} .fa-motorcycle:before{content:"\f21c"} .fa-street-view:before{content:"\f21d"} .fa-heartbeat:before{content:"\f21e"} .fa-venus:before{content:"\f221"} .fa-mars:before{content:"\f222"} .fa-mercury:before{content:"\f223"} .fa-intersex:before,.fa-transgender:before{content:"\f224"} .fa-transgender-alt:before{content:"\f225"} .fa-venus-double:before{content:"\f226"} .fa-mars-double:before{content:"\f227"} .fa-venus-mars:before{content:"\f228"} .fa-mars-stroke:before{content:"\f229"} .fa-mars-stroke-v:before{content:"\f22a"} .fa-mars-stroke-h:before{content:"\f22b"} .fa-neuter:before{content:"\f22c"} .fa-genderless:before{content:"\f22d"} .fa-facebook-official:before{content:"\f230"} .fa-pinterest-p:before{content:"\f231"} .fa-whatsapp:before{content:"\f232"} .fa-server:before{content:"\f233"} .fa-user-plus:before{content:"\f234"} .fa-user-times:before{content:"\f235"} .fa-hotel:before,.fa-bed:before{content:"\f236"} .fa-viacoin:before{content:"\f237"} .fa-train:before{content:"\f238"} .fa-subway:before{content:"\f239"} .fa-medium:before{content:"\f23a"} .fa-yc:before,.fa-y-combinator:before{content:"\f23b"} .fa-optin-monster:before{content:"\f23c"} .fa-opencart:before{content:"\f23d"} .fa-expeditedssl:before{content:"\f23e"} .fa-battery-4:before,.fa-battery-full:before{content:"\f240"} .fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"} .fa-battery-2:before,.fa-battery-half:before{content:"\f242"} .fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"} .fa-battery-0:before,.fa-battery-empty:before{content:"\f244"} .fa-mouse-pointer:before{content:"\f245"} .fa-i-cursor:before{content:"\f246"} .fa-object-group:before{content:"\f247"} .fa-object-ungroup:before{content:"\f248"} .fa-sticky-note:before{content:"\f249"} .fa-sticky-note-o:before{content:"\f24a"} .fa-cc-jcb:before{content:"\f24b"} .fa-cc-diners-club:before{content:"\f24c"} .fa-clone:before{content:"\f24d"} .fa-balance-scale:before{content:"\f24e"} .fa-hourglass-o:before{content:"\f250"} .fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"} .fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"} .fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"} .fa-hourglass:before{content:"\f254"} .fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"} .fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"} .fa-hand-scissors-o:before{content:"\f257"} .fa-hand-lizard-o:before{content:"\f258"} .fa-hand-spock-o:before{content:"\f259"} .fa-hand-pointer-o:before{content:"\f25a"} .fa-hand-peace-o:before{content:"\f25b"} .fa-trademark:before{content:"\f25c"} .fa-registered:before{content:"\f25d"} .fa-creative-commons:before{content:"\f25e"} .fa-gg:before{content:"\f260"} .fa-gg-circle:before{content:"\f261"} .fa-tripadvisor:before{content:"\f262"} .fa-odnoklassniki:before{content:"\f263"} .fa-odnoklassniki-square:before{content:"\f264"} .fa-get-pocket:before{content:"\f265"} .fa-wikipedia-w:before{content:"\f266"} .fa-safari:before{content:"\f267"} .fa-chrome:before{content:"\f268"} .fa-firefox:before{content:"\f269"} .fa-opera:before{content:"\f26a"} .fa-internet-explorer:before{content:"\f26b"} .fa-tv:before,.fa-television:before{content:"\f26c"} .fa-contao:before{content:"\f26d"} .fa-500px:before{content:"\f26e"} .fa-amazon:before{content:"\f270"} .fa-calendar-plus-o:before{content:"\f271"} .fa-calendar-minus-o:before{content:"\f272"} .fa-calendar-times-o:before{content:"\f273"} .fa-calendar-check-o:before{content:"\f274"} .fa-industry:before{content:"\f275"} .fa-map-pin:before{content:"\f276"} .fa-map-signs:before{content:"\f277"} .fa-map-o:before{content:"\f278"} .fa-map:before{content:"\f279"} .fa-commenting:before{content:"\f27a"} .fa-commenting-o:before{content:"\f27b"} .fa-houzz:before{content:"\f27c"} .fa-vimeo:before{content:"\f27d"} .fa-black-tie:before{content:"\f27e"} .fa-fonticons:before{content:"\f280"} .fa-reddit-alien:before{content:"\f281"} .fa-edge:before{content:"\f282"} .fa-credit-card-alt:before{content:"\f283"} .fa-codiepie:before{content:"\f284"} .fa-modx:before{content:"\f285"} .fa-fort-awesome:before{content:"\f286"} .fa-usb:before{content:"\f287"} .fa-product-hunt:before{content:"\f288"} .fa-mixcloud:before{content:"\f289"} .fa-scribd:before{content:"\f28a"} .fa-pause-circle:before{content:"\f28b"} .fa-pause-circle-o:before{content:"\f28c"} .fa-stop-circle:before{content:"\f28d"} .fa-stop-circle-o:before{content:"\f28e"} .fa-shopping-bag:before{content:"\f290"} .fa-shopping-basket:before{content:"\f291"} .fa-hashtag:before{content:"\f292"} .fa-bluetooth:before{content:"\f293"} .fa-bluetooth-b:before{content:"\f294"} .fa-percent:before{content:"\f295"} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/darkula.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/darkula.css deleted file mode 100644 index 1c6853b4e8c0..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/darkula.css +++ /dev/null @@ -1,152 +0,0 @@ -/* - -Darkula color scheme from the JetBrains family of IDEs - -*/ - - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #2b2b2b; - -webkit-text-size-adjust: none; -} - -.hljs, -.hljs-tag, -.hljs-title, -.css .hljs-rule, -.css .hljs-value, -.aspectj .hljs-function, -.css .hljs-function .hljs-preprocessor, -.hljs-pragma { - color: #bababa; -} - -.hljs-strongemphasis, -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-blockquote, -.hljs-horizontal_rule, -.hljs-number, -.hljs-regexp, -.alias .hljs-keyword, -.hljs-literal, -.hljs-hexcolor { - color: #6896ba; -} - -.hljs-tag .hljs-value, -.hljs-code, -.css .hljs-class, -.hljs-class .hljs-title:last-child { - color: #a6e22e; -} - -.hljs-link_url { - font-size: 80%; -} - -.hljs-emphasis, -.hljs-strongemphasis, -.hljs-class .hljs-title:last-child, -.hljs-typename { - font-style: italic; -} - -.hljs-keyword, -.ruby .hljs-class .hljs-keyword:first-child, -.ruby .hljs-function .hljs-keyword, -.hljs-function, -.hljs-change, -.hljs-winutils, -.hljs-flow, -.nginx .hljs-title, -.tex .hljs-special, -.hljs-header, -.hljs-attribute, -.hljs-symbol, -.hljs-symbol .hljs-string, -.hljs-tag .hljs-title, -.hljs-value, -.alias .hljs-keyword:first-child, -.css .hljs-tag, -.css .unit, -.css .hljs-important { - color: #cb7832; -} - -.hljs-function .hljs-keyword, -.hljs-class .hljs-keyword:first-child, -.hljs-aspect .hljs-keyword:first-child, -.hljs-constant, -.hljs-typename, -.css .hljs-attribute { - color: #cb7832; -} - -.hljs-variable, -.hljs-params, -.hljs-class .hljs-title, -.hljs-aspect .hljs-title { - color: #b9b9b9; -} - -.hljs-string, -.css .hljs-id, -.hljs-subst, -.hljs-type, -.ruby .hljs-class .hljs-parent, -.hljs-built_in, -.django .hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.django .hljs-filter .hljs-argument, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.hljs-attr_selector, -.hljs-pseudo, -.hljs-addition, -.hljs-stream, -.hljs-envvar, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.hljs-prompt, -.hljs-link_label, -.hljs-link_url, -.hljs-name { - color: #e0c46c; -} - -.hljs-comment, -.hljs-annotation, -.hljs-pi, -.hljs-doctype, -.hljs-deletion, -.hljs-shebang, -.apache .hljs-sqbracket, -.tex .hljs-formula { - color: #7f7f7f; -} - -.hljs-decorator { - color: #bab429; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata, -.xml .php, -.php .xml { - opacity: 0.5; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/default.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/default.css deleted file mode 100644 index b0ac8b8aac9b..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/default.css +++ /dev/null @@ -1,155 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #f0f0f0; - -webkit-text-size-adjust: none; -} - -.hljs, -.hljs-subst, -.hljs-tag .hljs-title, -.nginx .hljs-title { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-constant, -.hljs-parent, -.hljs-tag .hljs-value, -.hljs-rule .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.hljs-name, -.haml .hljs-symbol, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-template_tag, -.django .hljs-variable, -.smalltalk .hljs-class, -.hljs-addition, -.hljs-flow, -.hljs-stream, -.bash .hljs-variable, -.pf .hljs-variable, -.apache .hljs-tag, -.apache .hljs-cbracket, -.tex .hljs-command, -.tex .hljs-special, -.erlang_repl .hljs-function_or_atom, -.asciidoc .hljs-header, -.markdown .hljs-header, -.coffeescript .hljs-attribute, -.tp .hljs-variable { - color: #800; -} - -.smartquote, -.hljs-comment, -.hljs-annotation, -.diff .hljs-header, -.hljs-chunk, -.asciidoc .hljs-blockquote, -.markdown .hljs-blockquote { - color: #888; -} - -.hljs-number, -.hljs-date, -.hljs-regexp, -.hljs-literal, -.hljs-hexcolor, -.smalltalk .hljs-symbol, -.smalltalk .hljs-char, -.go .hljs-constant, -.hljs-change, -.lasso .hljs-variable, -.makefile .hljs-variable, -.asciidoc .hljs-bullet, -.markdown .hljs-bullet, -.asciidoc .hljs-link_url, -.markdown .hljs-link_url { - color: #080; -} - -.hljs-label, -.ruby .hljs-string, -.hljs-decorator, -.hljs-filter .hljs-argument, -.hljs-localvars, -.hljs-array, -.hljs-attr_selector, -.hljs-important, -.hljs-pseudo, -.hljs-pi, -.haml .hljs-bullet, -.hljs-doctype, -.hljs-deletion, -.hljs-envvar, -.hljs-shebang, -.apache .hljs-sqbracket, -.nginx .hljs-built_in, -.tex .hljs-formula, -.erlang_repl .hljs-reserved, -.hljs-prompt, -.asciidoc .hljs-link_label, -.markdown .hljs-link_label, -.vhdl .hljs-attribute, -.clojure .hljs-attribute, -.asciidoc .hljs-attribute, -.lasso .hljs-attribute, -.coffeescript .hljs-property, -.hljs-phony { - color: #88f; -} - -.hljs-keyword, -.hljs-id, -.hljs-title, -.hljs-built_in, -.css .hljs-tag, -.hljs-doctag, -.smalltalk .hljs-class, -.hljs-winutils, -.bash .hljs-variable, -.pf .hljs-variable, -.apache .hljs-tag, -.hljs-type, -.hljs-typename, -.tex .hljs-command, -.asciidoc .hljs-strong, -.markdown .hljs-strong, -.hljs-request, -.hljs-status, -.tp .hljs-data, -.tp .hljs-io { - font-weight: bold; -} - -.asciidoc .hljs-emphasis, -.markdown .hljs-emphasis, -.tp .hljs-units { - font-style: italic; -} - -.nginx .hljs-built_in { - font-weight: normal; -} - -.coffeescript .javascript, -.javascript .xml, -.lasso .markup, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/foundation.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/foundation.css deleted file mode 100644 index 09c2ff274a13..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/foundation.css +++ /dev/null @@ -1,135 +0,0 @@ -/* -Description: Foundation 4 docs style for highlight.js -Author: Dan Allen -Website: http://foundation.zurb.com/docs/ -Version: 1.0 -Date: 2013-04-02 -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #eee; - -webkit-text-size-adjust: none; -} - -.hljs-header, -.hljs-decorator, -.hljs-annotation { - color: #000077; -} - -.hljs-horizontal_rule, -.hljs-link_url, -.hljs-emphasis, -.hljs-attribute { - color: #070; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-link_label, -.hljs-strong, -.hljs-value, -.hljs-string, -.scss .hljs-value .hljs-string { - color: #d14; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-blockquote, -.hljs-comment { - color: #998; - font-style: italic; -} - -.asciidoc .hljs-title, -.hljs-function .hljs-title { - color: #900; -} - -.hljs-class { - color: #458; -} - -.hljs-id, -.hljs-pseudo, -.hljs-constant, -.hljs-hexcolor { - color: teal; -} - -.hljs-variable { - color: #336699; -} - -.hljs-bullet { - color: #997700; -} - -.hljs-pi, -.hljs-doctype { - color: #3344bb; -} - -.hljs-code, -.hljs-number { - color: #099; -} - -.hljs-important { - color: #f00; -} - -.smartquote, -.hljs-label { - color: #970; -} - -.hljs-preprocessor, -.hljs-pragma { - color: #579; -} - -.hljs-reserved, -.hljs-keyword, -.scss .hljs-value { - color: #000; -} - -.hljs-regexp { - background-color: #fff0ff; - color: #880088; -} - -.hljs-symbol { - color: #990073; -} - -.hljs-symbol .hljs-string { - color: #a60; -} - -.hljs-tag { - color: #007700; -} - -.hljs-at_rule, -.hljs-at_rule .hljs-keyword { - color: #088; -} - -.hljs-at_rule .hljs-preprocessor { - color: #808; -} - -.scss .hljs-tag, -.scss .hljs-attribute { - color: #339; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/github.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/github.css deleted file mode 100644 index 791537e41da0..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/github.css +++ /dev/null @@ -1,123 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.diff .hljs-header { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #008080; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-doctag, -.tex .hljs-formula { - color: #d14; -} - -.hljs-title, -.hljs-id, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.hljs-list .hljs-keyword, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rule .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body, -.hljs-name { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.clojure .hljs-keyword, -.scheme .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/googlecode.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/googlecode.css deleted file mode 100644 index dad5bb083b66..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/googlecode.css +++ /dev/null @@ -1,144 +0,0 @@ -/* - -Google Code style (c) Aahan Krish - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: white; - color: black; - -webkit-text-size-adjust: none; -} - -.hljs-comment { - color: #800; -} - -.hljs-keyword, -.method, -.hljs-list .hljs-keyword, -.nginx .hljs-title, -.hljs-tag .hljs-title, -.setting .hljs-value, -.hljs-winutils, -.tex .hljs-command, -.http .hljs-title, -.hljs-request, -.hljs-status { - color: #008; -} - -.hljs-envvar, -.tex .hljs-special { - color: #660; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-cdata, -.hljs-filter .hljs-argument, -.hljs-attr_selector, -.apache .hljs-cbracket, -.hljs-date, -.hljs-regexp, -.coffeescript .hljs-attribute { - color: #080; -} - -.hljs-sub .hljs-identifier, -.hljs-pi, -.hljs-tag, -.hljs-tag .hljs-keyword, -.hljs-decorator, -.ini .hljs-title, -.hljs-shebang, -.hljs-prompt, -.hljs-hexcolor, -.hljs-rule .hljs-value, -.hljs-literal, -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.hljs-number, -.css .hljs-function, -.clojure .hljs-attribute { - color: #066; -} - -.hljs-class .hljs-title, -.smalltalk .hljs-class, -.hljs-doctag, -.hljs-type, -.hljs-typename, -.hljs-tag .hljs-attribute, -.hljs-doctype, -.hljs-class .hljs-id, -.hljs-built_in, -.setting, -.hljs-params, -.hljs-variable, -.hljs-name { - color: #606; -} - -.css .hljs-tag, -.hljs-rule .hljs-property, -.hljs-pseudo, -.hljs-subst { - color: #000; -} - -.css .hljs-class, -.css .hljs-id { - color: #9b703f; -} - -.hljs-value .hljs-important { - color: #ff7700; - font-weight: bold; -} - -.hljs-rule .hljs-keyword { - color: #c5af75; -} - -.hljs-annotation, -.apache .hljs-sqbracket, -.nginx .hljs-built_in { - color: #9b859d; -} - -.hljs-preprocessor, -.hljs-preprocessor *, -.hljs-pragma { - color: #444; -} - -.tex .hljs-formula { - background-color: #eee; - font-style: italic; -} - -.diff .hljs-header, -.hljs-chunk { - color: #808080; - font-weight: bold; -} - -.diff .hljs-change { - background-color: #bccff9; -} - -.hljs-addition { - background-color: #baeeba; -} - -.hljs-deletion { - background-color: #ffc8bd; -} - -.hljs-comment .hljs-doctag { - font-weight: bold; -} diff --git a/jetty-documentation/src/main/docbkx-resources/css/highlighter/zenburn.css b/jetty-documentation/src/main/docbkx-resources/css/highlighter/zenburn.css deleted file mode 100644 index c7f5bc5a22a1..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/css/highlighter/zenburn.css +++ /dev/null @@ -1,118 +0,0 @@ -/* - -Zenburn style from voldmar.ru (c) Vladimir Epifanov -based on dark.css by Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #3f3f3f; - color: #dcdcdc; - -webkit-text-size-adjust: none; -} - -.hljs-keyword, -.hljs-tag, -.css .hljs-class, -.css .hljs-id, -.lisp .hljs-title, -.nginx .hljs-title, -.hljs-request, -.hljs-status, -.clojure .hljs-attribute { - color: #e3ceab; -} - -.django .hljs-template_tag, -.django .hljs-variable, -.django .hljs-filter .hljs-argument { - color: #dcdcdc; -} - -.hljs-number, -.hljs-date { - color: #8cd0d3; -} - -.dos .hljs-envvar, -.dos .hljs-stream, -.hljs-variable, -.apache .hljs-sqbracket, -.hljs-name { - color: #efdcbc; -} - -.dos .hljs-flow, -.diff .hljs-change, -.python .exception, -.python .hljs-built_in, -.hljs-literal, -.tex .hljs-special { - color: #efefaf; -} - -.diff .hljs-chunk, -.hljs-subst { - color: #8f8f8f; -} - -.dos .hljs-keyword, -.hljs-decorator, -.hljs-title, -.hljs-type, -.diff .hljs-header, -.ruby .hljs-class .hljs-parent, -.apache .hljs-tag, -.nginx .hljs-built_in, -.tex .hljs-command, -.hljs-prompt { - color: #efef8f; -} - -.dos .hljs-winutils, -.ruby .hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-string { - color: #dca3a3; -} - -.diff .hljs-deletion, -.hljs-string, -.hljs-tag .hljs-value, -.hljs-preprocessor, -.hljs-pragma, -.hljs-built_in, -.smalltalk .hljs-class, -.smalltalk .hljs-localvars, -.smalltalk .hljs-array, -.css .hljs-rule .hljs-value, -.hljs-attr_selector, -.hljs-pseudo, -.apache .hljs-cbracket, -.tex .hljs-formula, -.coffeescript .hljs-attribute { - color: #cc9393; -} - -.hljs-shebang, -.diff .hljs-addition, -.hljs-comment, -.hljs-annotation, -.hljs-pi, -.hljs-doctype { - color: #7f9f7f; -} - -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} - diff --git a/jetty-documentation/src/main/docbkx-resources/fonts/FontAwesome.otf b/jetty-documentation/src/main/docbkx-resources/fonts/FontAwesome.otf deleted file mode 100755 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 diff --git a/jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.svg b/jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.svg deleted file mode 100755 index d05688e9e28e..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.ttf b/jetty-documentation/src/main/docbkx-resources/fonts/fontawesome-webfont.ttf deleted file mode 100755 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 diff --git a/jetty-documentation/src/main/docbkx-resources/images/caution.svg b/jetty-documentation/src/main/docbkx-resources/images/caution.svg deleted file mode 100644 index dd84f3fe3654..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/caution.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/draft-ribbon.png b/jetty-documentation/src/main/docbkx-resources/images/draft-ribbon.png deleted file mode 100644 index 98d5640a807b4c3a808b9019dc2396b2ba27ac6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9413 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 diff --git a/jetty-documentation/src/main/docbkx-resources/images/important.png b/jetty-documentation/src/main/docbkx-resources/images/important.png deleted file mode 100644 index 12c90f607a1b27ddde0a7d922ae255e8c90e883e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)Gdz_qOoSb{LwMwNgp7=gl$4aErG%}mjHRWNrKOy`y@b8JoTa6ut*xc4t*y1SwY|N)#>U3Z&d%1> z*52OU=jZ3|@9+2b_y7O@tTMkk%M`~Kg@u8&dg_P^_0l3yQb639!jLZt^Lx<-O17UeeJ z-|=!77W(jGx&e#?FOku-gKofoU0$~4M+dhLFueEauP`}l7LV=;lsOdn%WHure=x;k`m0(bF&MU#) z-qv#^n8(MjB|ykioqII#+`g4no-MU=BK|Sahu_3M_-d*=7hq=~t?^}A)G7 zbairN0An*{V`DL9V>K}|HDobmIW;*pIW=W9HaTQ6F*7kTGI9=S@Bjb+07*qoM6N<$ Ef=i}M4FCWD diff --git a/jetty-documentation/src/main/docbkx-resources/images/important.svg b/jetty-documentation/src/main/docbkx-resources/images/important.svg deleted file mode 100644 index dd84f3fe3654..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/important.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty-avatar.svg b/jetty-documentation/src/main/docbkx-resources/images/jetty-avatar.svg deleted file mode 100644 index eef377ed7c6f..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/jetty-avatar.svg +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty-header-logo.png b/jetty-documentation/src/main/docbkx-resources/images/jetty-header-logo.png deleted file mode 100644 index 5f1b1e0b33b3a1f93c7262f477d8686c62645f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5822 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 IM6N<$f`6s->i_@% diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.png b/jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.png deleted file mode 100644 index c61f70b1f128538494609eaf3c3759deb642192a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37553 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
-
- Contact the core Jetty developers at - www.webtide.com - -
-

- private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... - scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development -

-
- - -
-
DRAFT
-

- This page has content that is not yet available in a released version of Jetty. Watch for notification of a new release on our Twitter feed. -

-
-
- - -
-
DRAFT
-

- This page contains content that we have migrated from Jetty 7 or Jetty 8 documentation into the correct format, but we have not yet audited it for technical accuracy in Jetty 9. Be aware that examples or information contained on this page may be incorrect. Please check back soon as we continue improving the documentation, or submit corrections yourself to this page through Github. Thank you. -

-
-
- - - - - - - - text/javascript - SyntaxHighlighter.all() - - - - - - -

-

- See an error or something missing? - - Contribute to this documentation at - Github! - - - - (Generated: ) - -
-

-
- - - - - - - screenexample - - screen - - - - - -
-          
-            
-          
-        
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - fa fa-asterisk - fa fa-exclamation-triangle - fa fa-exclamation - fa fa-lightbulb-o - fa fa-plus - fa fa-asterisk - - - -
- - - - - - - - -

- - - - - - true - - - -

-
- - -
-
- - - - - - - - fa fa-chevron-left - true - - Previous - - - Next - - fa fa-chevron-right - true - - - - - fa fa-chevron-up - true - - Top - - - - fa fa-home - true - - Home - - - xxx - - - - - - - - - - - - - - - - - - - - - - - From e543191728b0d154704424c069af54859d36e725 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Mon, 16 Nov 2020 12:04:50 -0600 Subject: [PATCH 05/14] Moving asciidoc config to main pom, removing sub-order references --- jetty-documentation/pom.xml | 39 -------- .../asciidoc/administration/alpn/alpn.adoc | 16 ++-- .../annotations/quick-annotations-setup.adoc | 2 +- .../using-annotations-embedded.adoc | 4 +- .../annotations/using-annotations.adoc | 4 +- .../extras/cross-origin-filter.adoc | 2 +- .../administration/extras/debug-handler.adoc | 2 +- .../extras/default-handler.adoc | 2 +- .../administration/extras/dos-filter.adoc | 2 +- .../administration/extras/header-filter.adoc | 2 +- .../extras/moved-context-handler.adoc | 2 +- .../administration/extras/qos-filter.adoc | 6 +- .../extras/resource-handler.adoc | 2 +- .../extras/rewrite-handler.adoc | 8 +- .../extras/shutdown-handler.adoc | 4 +- .../extras/statistics-handler.adoc | 8 +- .../fastcgi/configuring-fastcgi.adoc | 10 +- .../http2/configuring-haproxy.adoc | 16 ++-- .../http2/configuring-http2.adoc | 2 +- .../http2/configuring-push.adoc | 2 +- .../administration/http2/enabling-http2.adoc | 6 +- .../administration/jmx/jetty-jconsole.adoc | 4 +- .../jmx/jetty-jmx-annotations.adoc | 2 +- .../administration/jmx/using-jmx.adoc | 28 +++--- .../jndi/jndi-configuration.adoc | 28 +++--- .../administration/jndi/jndi-datasources.adoc | 28 +++--- .../administration/jndi/jndi-embedded.adoc | 2 +- .../administration/jndi/quick-jndi-setup.adoc | 4 +- .../administration/jndi/using-jndi.adoc | 10 +- .../configuring-jetty-request-logs.adoc | 6 +- .../logging/configuring-logging-modules.adoc | 20 ++-- .../default-logging-with-stderrlog.adoc | 10 +- .../logging/example-apache-log4j.adoc | 2 +- .../example-java-util-logging-native.adoc | 2 +- .../logging/example-java-util-logging.adoc | 2 +- .../example-logback-centralized-logging.adoc | 2 +- .../logging/example-logback.adoc | 2 +- .../example-slf4j-multiple-loggers.adoc | 2 +- .../main/asciidoc/administration/part.adoc | 2 +- .../administration/runner/jetty-runner.adoc | 44 ++++----- .../session-clustering-gcloud-datastore.adoc | 10 +- .../legacy/session-clustering-infinispan.adoc | 6 +- .../legacy/session-clustering-jdbc.adoc | 16 ++-- .../legacy/session-clustering-mongodb.adoc | 14 +-- .../setting-session-characteristics.adoc | 18 ++-- .../legacy/using-persistent-sessions.adoc | 6 +- .../session-configuration-file-system.adoc | 4 +- .../session-configuration-gcloud.adoc | 6 +- .../session-configuration-hazelcast.adoc | 8 +- .../session-configuration-infinispan.adoc | 16 ++-- .../sessions/session-configuration-jdbc.adoc | 4 +- ...nfiguration-memcachedsessiondatastore.adoc | 2 +- .../session-configuration-mongodb.adoc | 4 +- .../session-configuration-sessioncache.adoc | 2 +- .../sessions/sessions-usecases.adoc | 2 +- .../startup/screen-empty-base-listconfig.adoc | 2 +- .../startup/screen-empty-base.adoc | 2 +- .../screen-http-webapp-deploy-listconfig.adoc | 2 +- .../startup/screen-http-webapp-deploy.adoc | 2 +- .../startup/screen-list-logging-modules.adoc | 2 +- .../startup/screen-list-modules.adoc | 2 +- .../administration/startup/start-jar.adoc | 14 +-- .../startup/startup-base-vs-home.adoc | 12 +-- .../startup/startup-classpath.adoc | 2 +- .../administration/startup/startup-jpms.adoc | 18 ++-- .../startup/startup-modules.adoc | 6 +- .../startup/startup-overview.adoc | 14 +-- .../startup/startup-unix-service.adoc | 26 ++--- .../startup/startup-windows-service.adoc | 12 +-- .../tuning/garbage-collection.adoc | 6 +- .../administration/tuning/high-load.adoc | 12 +-- .../administration/tuning/limit-load.adoc | 2 +- .../connectors/configuring-connectors.adoc | 28 +++--- .../configuring-ssl-distribution.adoc | 6 +- .../connectors/configuring-ssl.adoc | 46 ++++----- .../contexts/configuring-virtual-hosts.adoc | 10 +- .../contexts/custom-error-pages.adoc | 12 +-- .../serving-webapp-from-particular-port.adoc | 8 +- .../contexts/setting-context-path.adoc | 2 +- .../contexts/setting-form-size.adoc | 6 +- .../contexts/temporary-directories.adoc | 16 ++-- ...onfiguring-specific-webapp-deployment.adoc | 12 +-- .../deploying/deployment-architecture.adoc | 4 +- .../deployment-processing-webapps.adoc | 10 +- .../configuring/deploying/hot-deployment.adoc | 2 +- .../deploying/quickstart-webapp.adoc | 14 +-- .../deploying/static-content-deployment.adoc | 2 +- .../configuring/jsp/configuring-jsp.adoc | 16 ++-- .../src/main/asciidoc/configuring/part.adoc | 2 +- .../configuring/security/authentication.adoc | 32 +++---- .../security/configuring-form-size.adoc | 8 +- .../configuring/security/jaas-support.adoc | 14 +-- .../security/jetty-home-and-jetty-base.adoc | 26 ++--- .../configuring/security/openid-support.adoc | 16 ++-- .../security/secure-passwords.adoc | 10 +- .../security/serving-aliased-files.adoc | 2 +- ...tting-port80-access-for-non-root-user.adoc | 14 +-- .../configuring/security/spnego-support.adoc | 14 +-- .../asciidoc/development/ant/jetty-ant.adoc | 48 +++++----- .../clients/http/http-client-api.adoc | 40 ++++---- .../http/http-client-authentication.adoc | 8 +- .../clients/http/http-client-cookie.adoc | 18 ++-- .../clients/http/http-client-intro.adoc | 6 +- .../clients/http/http-client-proxy.adoc | 4 +- .../clients/http/http-client-transport.adoc | 12 +-- .../continuations/continuations-patterns.adoc | 4 +- .../continuations/continuations-using.adoc | 8 +- .../embedding/embedded-examples.adoc | 4 +- .../embedding/embedding-jetty.adoc | 18 ++-- .../examples/embedded-file-server.adoc | 4 +- .../examples/embedded-many-connectors.adoc | 4 +- .../examples/embedded-minimal-servlet.adoc | 4 +- .../examples/embedded-one-webapp.adoc | 4 +- .../embedded-secured-hello-handler.adoc | 4 +- .../examples/embedded-split-file-server.adoc | 4 +- .../embedding/jetty-helloworld.adoc | 8 +- .../development/frameworks/metro.adoc | 4 +- .../asciidoc/development/frameworks/osgi.adoc | 60 ++++++------ .../development/frameworks/spring-usage.adoc | 4 +- .../asciidoc/development/frameworks/weld.adoc | 6 +- .../handlers/writing-custom-handlers.adoc | 10 +- .../maven/jetty-jspc-maven-plugin.adoc | 12 +-- .../maven/jetty-maven-helloworld.adoc | 22 ++--- .../development/maven/jetty-maven-plugin.adoc | 68 ++++++------- .../src/main/asciidoc/development/part.adoc | 2 +- .../development/websockets/intro/chapter.adoc | 2 +- .../jetty/jetty-websocket-api-adapter.adoc | 2 +- .../jetty-websocket-api-annotations.adoc | 2 +- .../jetty/jetty-websocket-api-listener.adoc | 2 +- .../jetty-websocket-api-send-message.adoc | 24 ++--- .../jetty/jetty-websocket-api-session.adoc | 10 +- .../jetty/jetty-websocket-client-api.adoc | 6 +- .../jetty/jetty-websocket-server-api.adoc | 6 +- .../configuring/how-to-configure.adoc | 12 +-- .../configuring/what-to-configure.adoc | 12 +-- .../jetty-common-configuration.adoc | 12 +-- .../getting-started/jetty-running.adoc | 6 +- .../introduction/jetty-coordinates.adoc | 4 +- .../src/main/asciidoc/quick-start/part.adoc | 2 +- .../architecture/basic-architecture.adoc | 2 +- .../architecture/jetty-classloading.adoc | 8 +- .../server-side-architecture.adoc | 2 +- .../contributing/coding-standards.adoc | 2 +- .../reference/contributing/documentation.adoc | 12 +-- .../contributing/release-testing.adoc | 20 ++-- .../contributing/releasing-jetty.adoc | 24 ++--- .../reference/contributing/source-build.adoc | 2 +- .../debugging/enable-remote-debugging.adoc | 6 +- .../reference/jetty-xml/jetty-env-xml.adoc | 4 +- .../jetty-xml/jetty-web-xml-config.adoc | 2 +- .../reference/jetty-xml/jetty-xml-config.adoc | 2 +- .../reference/jetty-xml/jetty-xml-syntax.adoc | 96 +++++++++---------- .../reference/jetty-xml/jetty-xml-usage.adoc | 8 +- .../reference/jetty-xml/override-web-xml.adoc | 6 +- .../reference/jetty-xml/webdefault-xml.adoc | 8 +- .../src/main/asciidoc/reference/part.adoc | 2 +- .../reference/platforms/cloudfoundry.adoc | 6 +- .../preventing-memory-leaks.adoc | 4 +- .../troubleshooting-locked-files.adoc | 8 +- .../upgrading/upgrading-9.3-to-9.4.adoc | 4 +- pom.xml | 38 ++++++++ 161 files changed, 842 insertions(+), 843 deletions(-) diff --git a/jetty-documentation/pom.xml b/jetty-documentation/pom.xml index f811d8af9669..5fb64aae8bb4 100644 --- a/jetty-documentation/pom.xml +++ b/jetty-documentation/pom.xml @@ -16,45 +16,6 @@ org.asciidoctor asciidoctor-maven-plugin - 1.5.7.1 - - - org.asciidoctor - asciidoctorj-diagram - 2.0.5 - - - - html5 - - asciidoctor-diagram - - - http://www.eclipse.org/jetty/javadoc/${project.version} - http://download.eclipse.org/jetty/stable-9/xref - ${basedir}/.. - https://github.com/eclipse/jetty.project/tree/jetty-9.4.x - https://github.com/eclipse/jetty.project/tree/jetty-10.0.x-doc-refactor/jetty-documentation/src/main/asciidoc - http://central.maven.org/maven2 - ${project.version} - ${maven.build.timestamp} - left - - - - - index - generate-resources - - process-asciidoc - - - src/main/asciidoc - index.adoc - ${project.build.directory}/html - - - maven-assembly-plugin diff --git a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc index dc85090c54f0..f55d30129136 100644 --- a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc @@ -90,7 +90,7 @@ or alternatively you need the link:#alpn-openjdk8-agent[Jetty ALPN agent]. In the case of the Jetty ALPN boot library, start the JVM as follows: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- java -Xbootclasspath/p: ... ---- @@ -121,7 +121,7 @@ transforms, if necessary, the relevant OpenJDK classes to provide the ALPN suppo To use the Jetty ALPN agent, start the JVM as follows: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- java -javaagent: ... ---- @@ -178,7 +178,7 @@ ____ When starting the Jetty server, especially when using Jetty embedded, it may be possible that you see an error similar to this: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- IllegalStateException: no ALPN processor ---- @@ -217,7 +217,7 @@ Refer to `ALPN` Javadocs and to the examples below for further details about cli [[alpn-openjdk8-client-example]] ==== Client Example -[source, java, subs="{sub-order}"] +[source, java, ] ---- SSLContext sslContext = ...; SSLSocket sslSocket = (SSLSocket)context.getSocketFactory().createSocket("localhost", server.getLocalPort()); @@ -257,7 +257,7 @@ The ALPN implementation calls `ALPN.ClientProvider` methods `protocols()`, `unsu The example for `SSLEngine` is identical, and you just need to replace the `SSLSocket` instance with an `SSLEngine` instance. -[source, java, subs="{sub-order}"] +[source, java, ] ---- SSLEngine sslEngine = ...; ALPN.put(sslEngine, new ALPN.ServerProvider() @@ -294,7 +294,7 @@ Failing to do so will cause a memory leak. You can write and run unit tests that use the ALPN implementation. The solution that we use with Maven is to specify an additional command line argument to the Surefire plugin: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -427,7 +427,7 @@ This section is for Jetty developers that need to update the ALPN implementation Clone the OpenJDK repository with the following command: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ hg clone https://hg.openjdk.java.net/jdk8u/jdk8u jdk8u $ cd !$ @@ -436,7 +436,7 @@ $ ./get_source.sh To update the source to a specific tag, use the following command: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ ./make/scripts/hgforest.sh update diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc index 5f848f838300..26f3767fd385 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc @@ -39,7 +39,7 @@ Below is an example application that sets up the standard `test-spec.war` webapp It can also be found in the Jetty GitHub repository on the examples/embedded page as link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedded[`ServerWithAnnotations.java`.] Note that the `test-spec.war` uses not only annotations, but also link:#jndi[JNDI], so this example also enables their processing (via the link:#jndi-configuration-classes[org.eclipse.jetty.plus.webapp.EnvConfiguration], link:#jndi-configuration-classes[org.eclipse.jetty.plus.webapp.PlusConfiguration] and their related jars). -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc index 5aaabebb45b8..61f326343ee5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc @@ -39,7 +39,7 @@ The example also adds in the configuration classes that are responsible for JNDI The code is as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import org.eclipse.jetty.security.HashLoginService; import org.eclipse.jetty.server.Server; @@ -101,7 +101,7 @@ On lines 30, 33 and 37 JNDI resources that we will be able to reference with @Re With the setup above, a servlet that uses annotations and Jetty will honour the annotations when the webapp is deployed can be created: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import javax.annotation.security.DeclareRoles; import javax.annotation.security.RunAs; diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc index 3d26ce6f9799..5c4673b028a5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc @@ -135,7 +135,7 @@ It will match all `ServletContainerInitializer` classed not explicitly named in Here is an example, setting the context attribute in code (although you can also do the link:#intro-jetty-configuration-webapps[same in xml]): -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerOrder", @@ -154,7 +154,7 @@ In this case, you can define the `org.eclipse.jetty.containerInitializerExclusio This is a regular expression that defines http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html[patterns] of classnames that you want to exclude. Here's an example, setting the context attribute in code, although you may do exactly the link:#intro-jetty-configuration-webapps[same in xml]: -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerExclusionPattern", diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc index 25f4c665cb94..1435ee7263bb 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc @@ -79,7 +79,7 @@ Default value is the empty list. A typical configuration could be: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc index b0b330beae6d..3c4ac08f423f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc @@ -38,7 +38,7 @@ The debug handler can be added to Jetty by activating the debug module. ==== Embedded usage -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(8080); RolloverFileOutputStream outputStream = new RolloverFileOutputStream("MeinLogPfad/yyyy_mm_dd.request.log", true,10); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc index 2d313f72a26c..569a8f4f5d40 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc @@ -39,7 +39,7 @@ _____ The `DefaultHandler` will also handle serving out the `flav.ico` file should a request make it through all of the other handlers without being resolved. _____ -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(8080); HandlerList handlers = new HandlerList(); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc index d0acb63763e2..58938b5a66cc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc @@ -55,7 +55,7 @@ Place the configuration in a webapp's `web.xml` or `jetty-web.xml`. The default configuration allows 25 requests per connection at a time, servicing more important requests first, and queuing up the rest. This example allow 30 requests at a time: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- DoSFilter diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc index 41d54dedbdd9..74ce723b3320 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc @@ -55,7 +55,7 @@ ____ Each action must be separated by a comma. ____ -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- HeaderFilter diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc index 8de56752ccfc..7c870366b6a5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc @@ -45,7 +45,7 @@ You create a new xref:configuring-contexts[context xml] file in `{$jetty/.base}/ Below is an example. This is a permanent redirection, which also preserves `pathinfo` and query strings on the redirect: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc index d2c407daf834..18586a86a589 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc @@ -83,7 +83,7 @@ Place the configuration in a webapp's `web.xml` or `jetty-web.xml`. The default configuration processes ten requests at a time, servicing more important requests first and queuing up the rest. This example processes fifty requests at a time: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- QoSFilter @@ -126,7 +126,7 @@ This allows a context external mechanism (for example, JMX via `ContextHandler.M You can use the `` syntax to map the QoSFilter to a servlet, either by using the servlet name, or by using a URL pattern. In this example, a URL pattern applies the QoSFilter to every request within the web application context: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- QoSFilter @@ -147,7 +147,7 @@ To customize the priority, subclass QoSFilter and then override the `getPriority You can then use this subclass as your QoS filter. Here's an example: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public class ParsePriorityQoSFilter extends QoSFilter { diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc index 71831a46e248..e3fe4822a34f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc @@ -51,7 +51,7 @@ The default css is called `jetty-dir.css` and is located in the `jetty-util` pac The following is an example of a split fileserver, able to serve static content from multiple directory locations. Since this handler does not return 404's on content you are able to iteratively try multiple resource handlers to resolve content. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index 6f914607562b..005b4e226308 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -31,7 +31,7 @@ The most common use is to rewrite request URIs, but it is capable of much more: The standard Jetty distribution bundle contains the `jetty-rewrite` link:#startup-modules[module], so all you need to do is to enable it using one of the link:#start-jar[module commands], eg: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar start.jar --add-to-start=rewrite .... @@ -45,7 +45,7 @@ _____ The rewrite module enables the following Jetty xml config file on the execution path: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[] ---- @@ -54,7 +54,7 @@ As the commented out code shows, you configure the `RewriteHandler` by adding va There is an example of link:#rewrite-rules[rules] configuration in the standard distribution in the `demo-base/etc/demo-rewrite-rules.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/demo-rewrite-rules.xml[] ---- @@ -63,7 +63,7 @@ include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base This is an example for embedded Jetty, which does something similar to the configuration file example above: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc index e3f4bb876aae..2d384ac8e303 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc @@ -36,7 +36,7 @@ If `_exitJvm` is set to true a hard `System.exit()` call is being made. This is an example of how you can setup this handler directly with the Server. It can also be added as a part of handler chain or collection. -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(8080); HandlerList handlers = new HandlerList(); @@ -48,7 +48,7 @@ It can also be added as a part of handler chain or collection. This is an example that you can use to call the shutdown handler from within java. -[source, java, subs="{sub-order}"] +[source, java, ] ---- public static void attemptShutdown(int port, String shutdownCookie) { try { diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc index 39a06d1b5738..01cd2d3b6c9d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc @@ -35,7 +35,7 @@ Jetty currently has two main statistics collection mechanisms: * The `StatisticsHandler` class may be used to collect statistics for HTTP requests. The `StatisticsHandler` and `ConnectionStatistics` are not included in the default Jetty configuration, these need to be configured manually or enabled using the Jetty `stats` module on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar {$jetty.home}/start.jar --add-to-start=stats .... @@ -58,7 +58,7 @@ You can enable the `StatisticsHandler` by activating the `stats` modules on the Alternately, if you are making multiple changes to the Jetty configuration, you could include statistics handler configuration into your own Jetty xml configuration. The following fragment shows how to configure a top level statistics handler: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -77,7 +77,7 @@ The current and maximum number of connections are the only "live" statistics. The following example shows how to turn on connection statistics in the Jetty XML format. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -91,7 +91,7 @@ The following example shows how to turn on connection statistics in the Jetty XM A special variant of `ConnectionStatistics` called `IncludeExcludeConnectionStatistics` allows you to refine which types of connection you want to collect statistics for. The following example shows how this can be used to record statistics only for WebSocket connections. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc index aeace6bc3703..e36ef466ec07 100644 --- a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc @@ -31,7 +31,7 @@ Refer to xref:jetty-downloading[] for more information about how to install Jett The fourth step is to create a Jetty base directory (see xref:startup-base-and-home[]), called in the following `$JETTY_BASE`, where you setup the configuration needed to support FastCGI in Jetty, and configure the `fcgi`, `http` and `deploy` modules, so that Jetty will be able to accept HTTP requests from browsers, convert them in FastCGI, and proxy them to `php-fpm`: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mkdir -p /usr/jetty/wordpress $ cd /usr/jetty/wordpress @@ -46,7 +46,7 @@ For FastCGI there is no web application that needs developed - all the work has As such you only need to deploy a Jetty context XML file that configures the web application directly. Copy and paste the following content as `$JETTY_BASE/webapps/jetty-wordpress.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -138,7 +138,7 @@ Refer to the link:{JDURL}/org/eclipse/jetty/fcgi/server/proxy/FastCGIProxyServle The last step is to start Jetty (see xref:startup[]) and navigate to `http://localhost:8080` with your browser and enjoy WordPress: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd $JETTY_BASE $ java -jar /opt/jetty/start.jar @@ -151,7 +151,7 @@ In order to configure Jetty to listen for HTTP/2 requests from clients that are Enabling the `http2` is easy; in additions to the modules you have enabled above, add the `http2` module: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http2 @@ -171,7 +171,7 @@ These will setup a clear text connector on port 8080 for HTTP/1.1 and a TLS conn At this point, you can start Jetty (see xref:startup[]), hit `http://localhost:8080` with your browser and enjoy WordPress via HTTP/2 using a HTTP/2 enabled browser: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index c82ab8f63a56..607d8f56970a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -34,7 +34,7 @@ The instructions that follow are for Linux. You will need HAProxy 1.5 or later, because it provides support for SSL and ALPN, both required by HTTP/2. Most Linux distributions have the HAProxy package available to be installed out of the box. For example on Ubuntu 15.04: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ sudo apt-get install haproxy .... @@ -62,7 +62,7 @@ HAProxy will need a single file containing the X509 certificates and the private Let's use `keytool` to generate a self signed certificate: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ keytool -genkeypair -keyalg RSA -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -ext SAN=DNS:domain.com What is your first and last name? @@ -86,21 +86,21 @@ We need to extract the certificate and the private key in PEM format. To extract the certificate into `certificate.pem`: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ keytool -exportcert -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -rfc -file certificate.pem .... To export the private key into `private_key.pem`: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ openssl pkcs12 -in keystore.p12 -nodes -nocerts -out private_key.pem -passin pass:storepwd .... At this point you just need to concatenate the two files into one, in the correct order: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ cat certificate.pem private_key.pem > domain.pem .... @@ -113,7 +113,7 @@ The `domain.pem` file will be used later by HAProxy. Now we can setup `haproxy.cfg` to configure HAProxy. This is a minimal configuration: -[source, ,subs="{sub-order}"] +[source, ,] .... global tune.ssl.default-dh-param 1024 @@ -157,7 +157,7 @@ Since the `http2c` module depends on the `http` module, the `http` module will b Additionally, you will also enable the `deploy` module to be able to deploy a sample web application: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ JETTY_BASE=haproxy-jetty-http2 $ mkdir $JETTY_BASE @@ -167,7 +167,7 @@ $ java -jar $JETTY_HOME/start.jar --add-to-start=http2c,deploy Now let's deploy a demo web application and start Jetty: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ cd $JETTY_BASE $ cp $JETTY_HOME/demo-base/webapps/async-rest.war $JETTY_BASE/webapps/ diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 2ac2b6f7dd6a..7e510ac809cb 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -24,7 +24,7 @@ existing connector. Thus configuring HTTP/2 is a combination of configuring common properties on the connector and HTTP/2 specific properties on the connection factory. The modules and XML files involved can be seen with the following commands: -[source,screen, subs="{sub-order}"] +[source,screen, ] .... $ java -jar $JETTY_HOME/start.jar --list-modules ... diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc index b3a35d00637a..a6cac02ecaa6 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc @@ -24,7 +24,7 @@ This will reduce the amount of round-trips necessary to retrieve all the resourc HTTP/2 Push can be automated in your application by configuring a link:{JDURL}/org/eclipse/jetty/servlets/PushCacheFilter.html[`PushCacheFilter`] in the `web.xml`, in this way: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ` element to the `` element of the Jetty Maven Plugin: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -124,14 +124,14 @@ Connecting to the remote JVM is a two step process: The configuration for the RMI registry and the RMI server is specified by a `JMXServiceURL`. The string format of an RMI `JMXServiceURL` is: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- service:jmx:rmi://:/jndi/rmi://:/jmxrmi ---- Default values are: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- rmi_server_host = localhost rmi_server_port = 1099 @@ -149,7 +149,7 @@ If you need to allow JMX remote access through a firewall, you must open both th Examples: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- service:jmx:rmi:///jndi/rmi:///jmxrmi rmi_server_host = local host address @@ -183,7 +183,7 @@ This is especially important when binding the RMI server host to the loopback ad Similarly to link:#jmx-standalone-jetty[enabling JMX in a standalone Jetty server], you enable the `jmx-remote` module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cd ${jetty.base} $ java -jar {$jetty.home}/start.jar --add-to-start=jmx-remote @@ -193,7 +193,7 @@ $ java -jar {$jetty.home}/start.jar --add-to-start=jmx-remote When running Jetty embedded into an application, create and configure a `ConnectorServer`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(); @@ -217,7 +217,7 @@ For a complete guide to controlling authentication and authorization in JMX, see To authorize access to the `JMXConnectorServer` you can use this configuration, where the `jmx.password` and `jmx.access` files have the format specified in the blog entry above: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -251,7 +251,7 @@ To authorize access to the `JMXConnectorServer` you can use this configuration, Similarly, in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- JMXServiceURL jmxURL = new JMXServiceURL("rmi", null, 1099, "/jndi/rmi:///jmxrmi"); Map env = new HashMap<>(); @@ -269,7 +269,7 @@ The JMX communication via RMI happens by default in clear-text. It is possible to configure the `ConnectorServer` with a `SslContextFactory` so that the JMX communication via RMI is encrypted: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -288,7 +288,7 @@ It is possible to configure the `ConnectorServer` with a `SslContextFactory` so Similarly, in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStorePath("/path/to/keystore"); @@ -313,7 +313,7 @@ If that is not the case (for example the certificate is self-signed), then you n For example, trying to connect using the JDK standard `JMXConnector` with both the RMI server and the RMI registry to `domain.com`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- // System properties necessary for an RMI client to trust a self-signed certificate. System.setProperty("javax.net.ssl.trustStore", "/path/to/trustStore"); @@ -331,7 +331,7 @@ try (JMXConnector client = JMXConnectorFactory.connect(jmxURL, clientEnv)) Similarly, to launch JMC: -[source, java, subs="{sub-order}"] +[source, java, ] ---- $ jmc -vmargs -Djavax.net.ssl.trustStore=/path/to/trustStore -Djavax.net.ssl.trustStorePassword=secret ---- @@ -347,7 +347,7 @@ In this case you want to configure the `ConnectorServer` with a `JMXServiceURL` Then you setup the local port forwarding with the SSH tunnel: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ ssh -L 1099:localhost:1099 @ ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc index c2e9217977c7..6c481bc57112 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc @@ -25,7 +25,7 @@ Sometimes it is useful to pass configuration information to a webapp at runtime that you either cannot or cannot conveniently code into a `web.xml` env-entry. In such cases, you can use the `org.eclipse.jetty.plus.jndi.EnvEntry` class, and even override an entry of the same name in `web.xml`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -57,7 +57,7 @@ Be aware that if you take advantage of this feature, your web application is __n To use the `env-entry` configured above, use code in your `servlet/filter/etc.`, such as: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import javax.naming.InitialContext; @@ -103,7 +103,7 @@ Jetty can use any DataSource implementation available on its classpath. In this example, the DataSource is from the http://db.apache.org/derby[Derby] relational database, but you can use any implementation of a `javax.sql.DataSource`. This example configures it as scoped to a web app with the id of __wac__: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -124,7 +124,7 @@ If you do not have the appropriate `resource-ref` set up in your `web.xml`, it i Here's an example `web.xml` declaration for the datasource above: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jdbc/myds @@ -135,7 +135,7 @@ Here's an example `web.xml` declaration for the datasource above: To look up your DataSource in your `servlet/filter/etc.`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import javax.naming.InitialContext; import javax.sql.DataSource; @@ -167,7 +167,7 @@ Jetty can bind any implementation of the JMS destinations and connection factori You just need to ensure the implementation Jars are available on Jetty's classpath. Here is an example of binding an http://activemq.apache.org[ActiveMQ] in-JVM connection factory: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -184,7 +184,7 @@ Here is an example of binding an http://activemq.apache.org[ActiveMQ] in-JVM con The entry in `web.xml` would be: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jms/connectionFactory @@ -200,7 +200,7 @@ TODO: put in an example of a QUEUE from progress demo Jetty also provides infrastructure for access to `javax.mail.Sessions` from within an application: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -240,7 +240,7 @@ Jetty does not ship with one as standard, but you can plug in the one you prefer You can configure a transaction manager using the link:{JDURL}/org/eclipse/jetty/plus/jndi/Transaction.html[JNDI Transaction] object in a Jetty config file. The following example configures the http://www.atomikos.com/[Atomikos] transaction manager: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -257,7 +257,7 @@ For example: In a context xml file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -275,7 +275,7 @@ In a context xml file: In a `web.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jdbc/mydatasource @@ -293,7 +293,7 @@ For the example above, you can refer to the `jdbc/mydatasource` resource as `jdb In a context xml file declare `jdbc/mydatasource`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -312,7 +312,7 @@ In a context xml file declare `jdbc/mydatasource`: Then in a `WEB-INF/jetty-env.xml` file, link the name `jdbc/mydatasource` to the name you want to reference it as in `web.xml`, which in this case is `jdbc/mydatasource1`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -323,7 +323,7 @@ Then in a `WEB-INF/jetty-env.xml` file, link the name `jdbc/mydatasource` to the Now you can refer to `jdbc/mydatasource1` in the `web.xml` like this: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jdbc/mydatasource1 diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc index 0ac814b4e090..487e84d06e61 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc @@ -28,7 +28,7 @@ ____ All of these examples correspond to a `resource-ref` in `web.xml`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- My DataSource Reference @@ -71,7 +71,7 @@ The following is a list of the pooled datasource examples we have worked with in Connection pooling, available at http://search.maven.org/remotecontent?filepath=com/zaxxer/HikariCP/1.4.0/HikariCP-1.4.0.jar[HikariCP Download]. All configuration options for HikariCP are described here: https://github.com/brettwooldridge/HikariCP[HikariCP documentation]. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -102,7 +102,7 @@ All configuration options for HikariCP are described here: https://github.com/br Connection pooling, available at http://jolbox.com/index.html?page=http://jolbox.com/download.html[BoneCP Download]. All configuration options for BoneCP are described here: http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCPDataSource.html[BoneCP API]. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -128,7 +128,7 @@ All configuration options for BoneCP are described here: http://jolbox.com/bonec Connection pooling, available at https://repo1.maven.org/maven2/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar[c3p0 Jar]. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -149,7 +149,7 @@ Connection pooling, available at https://repo1.maven.org/maven2/c3p0/c3p0/0.9.1. Connection pooling, available at https://repo1.maven.org/maven2/commons-dbcp/commons-dbcp/1.2/commons-dbcp-1.2.jar[dbcp Jar]. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -171,7 +171,7 @@ Connection pooling, available at https://repo1.maven.org/maven2/commons-dbcp/com Connection pooling + XA transactions. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -206,7 +206,7 @@ Connection pooling + XA transactions. Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -226,7 +226,7 @@ Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.ConnectionPoolDataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -252,7 +252,7 @@ Implements `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.ConnectionPoolDataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -288,7 +288,7 @@ The following is a list of the non-pooled datasource examples: Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -310,7 +310,7 @@ Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -343,7 +343,7 @@ For more information, refer to: http://docs.oracle.com/cd/B14117_01/java.101/b10 Implements `javax.sql.DataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -365,7 +365,7 @@ Implements `javax.sql.DataSource`. Implements `javax.sql.DataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -387,7 +387,7 @@ Implements `javax.sql.DataSource`. Implements `javax.sql.DataSource`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc index 2f3c24b311b0..2b499cd55b0e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc @@ -39,7 +39,7 @@ Note that this jar also requires the `javax.activation` classes, which is availa Here is an example class that sets up some JNDI entries and deploys a webapp that references these JNDI entries in code. We'll use some mocked up classes for the transaction manager and the DataSource in this example for simplicity: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import java.util.Properties; import org.eclipse.jetty.server.Server; diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc index 37739a27ac3d..0737a8e09e4e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc @@ -23,7 +23,7 @@ If you are using the standard distribution of Jetty, you must enable the _JNDI_ As the _plus_ module depends on the _JNDI_ module, you only need to enable the _plus_ module to enable both. Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd /opt/jetty cd my-base @@ -37,7 +37,7 @@ If you have extra jars associated with your JNDI resources, for example a databa You will then need to enable the _ext_ module to ensure the jars in the `ext/` directory are on the classpath. Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd /opt/jetty cd my-base diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc index ef04e55fb3ea..d76c7dcfbae8 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc @@ -24,7 +24,7 @@ You can configure naming resources to reference in a `web.xml` file and access from within the `java:comp/env` naming environment of the webapp during execution. Specifically, you can configure support for the following `web.xml` elements: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -52,7 +52,7 @@ For the link between a `web.xml` resource name and a naming entry Declarations of each of these types follow the same general pattern: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -91,7 +91,7 @@ The name is unique across the JVM instance, and is visible to all application co You represent this scope by a `null` first parameter to the resource declaration. For example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -109,7 +109,7 @@ The name is unique to a Server instance, and is only visible to code associated You represent this scope by referencing the Server instance as the first parameter to the resource declaration. For example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -128,7 +128,7 @@ The name is unique to the WebAppContext instance, and is only visible to code as You represent this scope by referencing the `WebAppContext` instance as the first parameter to the resource declaration. For example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc index 92bcd622b673..5a01ee346671 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc @@ -49,7 +49,7 @@ If neither of these options meets your needs, you can implement a custom request To enable the Request Log module for the entire server via the Jetty distribution, it first needs to be enabled on the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --add-to-start=requestlog @@ -68,7 +68,7 @@ ____ The equivalent code for embedded usages of Jetty is: -[source, java, subs="{sub-order}"] +[source, java, ] ---- NCSARequestLog requestLog = new NCSARequestLog("/var/logs/jetty/jetty-yyyy_mm_dd.request.log"); requestLog.setAppend(true); @@ -120,7 +120,7 @@ Both timezones are set to GMT by default. To configure a separate request log for specific a web application, add the following to the context XML file. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc index 42cd6830f5cf..eeb55c6cf96e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc @@ -26,7 +26,7 @@ Please note that enabling these modules provides typical and basic functionality Enabling these frameworks in the Jetty distribution is as easy as activating any other module, by adding `--add-to-start=` to the start command for your server, such as: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini @@ -83,7 +83,7 @@ Jetty uses the SLF4J api as a binding to provide logging information to addition It can also be used on it's own to provide simple server logging. To enable the SLF4J framework, you need to activate the `logging-slf4j` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-slf4j @@ -132,7 +132,7 @@ As you probably noticed, the system gives an `ERROR` when trying to enable the ` The `logging-slf4j` module itself provides the SLF4J api, but as SLF4J is often used as a binding for other logging frameworks does not by default provide an implementation. To enable the simple SLF4J implementation, we will also need to activate the `slf4j-simple-impl` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini @@ -165,7 +165,7 @@ It is possible to have the Jetty Server logging configured so that Log4j or Log4 This is accomplished by configuring Jetty for logging to http://logging.apache.org/log4j/[Apache Log4j] via http://slf4j.org/manual.html[Slf4j] and the http://slf4j.org/manual.html#swapping[Slf4j binding layer for Log4j]. Implementation of Log4j can be done by enabling the `logging-log4j` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j @@ -234,7 +234,7 @@ A standard Log4j configuration file is located in `${jetty.base}/resources/log4j Or, to set up Log4j2, enable the `logging-log4j2` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j2 @@ -311,7 +311,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h To set up Jetty logging via Logback, enable the `logging-logback` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-logback @@ -394,7 +394,7 @@ It is possible to have the Jetty Server logging configured so that `java.util.lo This example demonstrates how to configuring Jetty for logging to `java.util.logging` via http://slf4j.org/manual.html[SLF4J] as a binding layer. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jul @@ -459,7 +459,7 @@ By default, enabling the above modules will output log information to the consol Included in the distribution is the `console-capture` module, which can be used in lieu of additional configuration to the selected logging module to capture this output to a `logs` directory in your `${jetty.base}`. To enable this functionality, activate the `console-capture` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini @@ -475,7 +475,7 @@ INFO : Base directory was modified As an example, here is the output from Logback before using the `console-capture` module: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar 419 [main] INFO org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog @@ -486,7 +486,7 @@ As an example, here is the output from Logback before using the `console-capture After enabling `console-capture`, the output is as follows, which displays the location the log is being saved to: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar 151 [main] INFO org.eclipse.jetty.util.log - Logging initialized @238ms to org.eclipse.jetty.util.log.Slf4jLog diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index 7e2530285393..2afdaf468c76 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -31,7 +31,7 @@ Included in the Jetty distribution is a logging module named `console-capture` t To enable this feature, simply activate the `console-capture` module on the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini @@ -58,7 +58,7 @@ Just enabling the `console-capture` will simply output the values of STDERR and To customize the log further, a module named `logging-jetty` is available to provides a default properties file to configure. As with `console-capture`, you activate the `logging-jetty` on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini @@ -81,7 +81,7 @@ Once activated, you can find the properties file at `${jetty.base}/resources/jet By default, the following parameters are defined. To change them, un-comment the line and substitute your naming scheme and configuration choices. -[source, properties, subs="{sub-order}"] +[source, properties, ] .... ## Force jetty logging implementation #org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog @@ -125,7 +125,7 @@ There are a number of properties that can be defined in the configuration that w + * Example when set to false: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... 2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-9.4.0-SNAPSHOT @@ -135,7 +135,7 @@ There are a number of properties that can be defined in the configuration that w + * Example when set to true: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... 2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-9.4.0-SNAPSHOT diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc index 5901c80c591b..1fb2d2212a5a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc @@ -23,7 +23,7 @@ This is accomplished by configuring Jetty for logging to http://logging.apache.o A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with log4j. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc index 0169b30736b3..0a0b588f6bce 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc @@ -33,7 +33,7 @@ ____ A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc index d11e6d720773..c647581c2875 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc @@ -25,7 +25,7 @@ If you want to use the built-in native `JavaUtilLog` implementation, see #exampl A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc index ef5e328d00ba..93a04e50fc62 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc @@ -38,7 +38,7 @@ See https://github.com/jetty-project/jetty-webapp-logging/blob/master/jetty-weba A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by Logback. -[source,screen,subs="{sub-order}"] +[source,screen,] .... [mybase]$ curl -O https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-webapp-logging/9.4.27/jetty-webapp-logging-9.4.27-config.jar % Total % Received % Xferd Average Speed Time Time Time Current diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc index f570ab496fc0..6fa8aba7f7f0 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc @@ -23,7 +23,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for logging with logback. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc index b657d63ec748..0141577126c4 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc @@ -88,7 +88,7 @@ It also requires including the other Slf4j binding JARs in the classpath, along A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by logback. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/part.adoc b/jetty-documentation/src/main/asciidoc/administration/part.adoc index fa22eaeb091e..a47edce2f1d9 100644 --- a/jetty-documentation/src/main/asciidoc/administration/part.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/part.adoc @@ -18,7 +18,7 @@ [[jetty-admin-guide]] -= Jetty Administration Guide +== Jetty Administration Guide include::startup/chapter.adoc[] include::sessions/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc index 0cab866c2708..880f4a4365e5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc @@ -34,7 +34,7 @@ You will need the `jetty-runner` jar: Let's assume we have a very simple webapp that does not need any resources from its environment, nor any configuration apart from the defaults. Starting it is as simple as performing the following: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar simple.war .... @@ -43,14 +43,14 @@ This will start Jetty on port 8080, and deploy the webapp to `/`. Your webapp does not have to be packed into a war, you can deploy a webapp that is a directory instead in the same way: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar simple .... In fact, the webapp does not have to be a war or even a directory, it can simply be a Jetty link:#using-context-provider[context xml] file that describes your webapp: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar simple-context.xml .... @@ -82,7 +82,7 @@ If you have more than one webapp that must be deployed, simply provide them all You can control the context paths for them using the `--path` parameter. Here's an example of deploying 2 wars (although either or both of them could be unpacked directories instead): -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --path /one my1.war --path /two my2.war .... @@ -90,7 +90,7 @@ Here's an example of deploying 2 wars (although either or both of them could be If you have context xml files that describe your webapps, you can fully configure your webapps in them and hence you won't need to use the command line switches. Just provide the list of context files like so: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar my-first-context.xml my-second-context.xml my-third-context.xml .... @@ -108,7 +108,7 @@ By default the `jetty-runner` will listen on port 8080. You can easily change this on the command line using the `--port` command. Here's an example that runs our simple.war on port 9090: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --port 9090 simple.war .... @@ -118,7 +118,7 @@ Here's an example that runs our simple.war on port 9090: Instead of, or in addition to, using command line switches, you can use one or more `jetty.xml` files to configure the environment for your webapps. Here's an example where we apply two different `jetty.xml` files: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --config jetty.xml --config jetty-https.xml simple.war .... @@ -128,14 +128,14 @@ Here's an example where we apply two different `jetty.xml` files: You can see the fill set of configuration options using the `--help` switch: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --help .... Here's what the output will look like: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Usage: java [-Djetty.home=dir] -jar jetty-runner.jar [--help|--version] [ server opts] [[ context opts] context ...] @@ -159,7 +159,7 @@ Context opts: ===== Printing the Version Print out the version of Jetty and then exit immediately. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --version .... @@ -169,7 +169,7 @@ Cause Jetty to write a request log with the given name. If the file is prefixed with `yyyy_mm_dd` then the file will be automatically rolled over. Note that for finer grained configuration of the link:{JDURL}/org/eclipse/jetty/server/NCSARequestLog.html[request log], you will need to use a Jetty xml file instead. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --log yyyy_mm_dd-requests.log my.war .... @@ -178,7 +178,7 @@ Note that for finer grained configuration of the link:{JDURL}/org/eclipse/jetty/ Redirect the output of jetty logging to the named file. If the file is prefixed with `yyyy_mm_dd` then the file will be automatically rolled over. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --out yyyy_mm_dd-output.log my.war .... @@ -187,7 +187,7 @@ If the file is prefixed with `yyyy_mm_dd` then the file will be automatically ro Like Jetty standalone, the default is for the connectors to listen on all interfaces on a machine. You can control that by specifying the name or ip address of the particular interface you wish to use with the `--host` argument: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --host 192.168.22.19 my.war .... @@ -196,7 +196,7 @@ You can control that by specifying the name or ip address of the particular inte The default port number is 8080. To link:#how-to-configure-connectors[configure a https connector], use a Jetty xml config file instead. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --port 9090 my.war .... @@ -206,7 +206,7 @@ You can configure a port number for Jetty to listen on for a stop command, so yo This requires the use of a "secret" key, to prevent malicious or accidental termination. Use the `--stop-port` and `--stop-key` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively) parameters as arguments to the `jetty-runner`: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --stop-port 8181 --stop-key abc123 .... @@ -215,7 +215,7 @@ Then, to stop Jetty from a different terminal, you need to supply the same port For this you'll either need a local installation of Jetty, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class. Here's how to use a Jetty installation to perform a stop: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar start.jar -DSTOP.PORT=8181 -DSTOP.KEY=abc123 --stop .... @@ -228,7 +228,7 @@ With the `jetty-runner`, you can use the `--lib`, `--jar` and `--classes` argume You can add 1 or more. Here's an example of configuring 2 directories: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --lib /usr/local/external/lib --lib $HOME/external-other/lib my.war .... @@ -237,7 +237,7 @@ Here's an example of configuring 2 directories: You can add 1 or more. Here's an example of configuring 3 extra jars: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --jar /opt/stuff/jars/jar1.jar --jar $HOME/jars/jar2.jar --jar /usr/local/proj/jars/jar3.jar my.war .... @@ -246,7 +246,7 @@ Here's an example of configuring 3 extra jars: You can add 1 or more. Here's an example of configuring a single extra classes dir: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --classes /opt/stuff/classes my.war .... @@ -264,7 +264,7 @@ If statistics gathering is enabled, then they are viewable by surfing to the con You may optionally protect access to that context with a password. Here's an example of enabling statistics, with no password protection: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --stats unsecure my.war .... @@ -272,7 +272,7 @@ Here's an example of enabling statistics, with no password protection: If we wished to protect access to the `/stats` context, we would provide the location of a Jetty realm configuration file containing authentication and authorization information. For example, we could use the following example realm file from the Jetty distribution: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... jetty: MD5:164c88b302622e17050af52c89945d44,user admin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,admin @@ -285,7 +285,7 @@ digest: MD5:6e120743ad67abfbc385bc2bb754e297,user Assuming we've copied it into the local directory, we would apply it like so -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar jetty-runner.jar --stats realm.properties my.war .... diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc index 9f45385ed7ee..ea175d9ff521 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc @@ -50,7 +50,7 @@ To do that, you can use `--skip-file-validation=glcoud-sessions` argument to sta The gcloud-sessions module will have installed file called `${jetty.home}/etc/jetty-gcloud-sessions.xml`. This file configures an instance of the `GCloudSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/etc/jetty-gcloud-sessions.xml[] ---- @@ -105,7 +105,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -129,7 +129,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -202,7 +202,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -229,7 +229,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc index d7b5f09e35fa..0326b2d2ad95 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc @@ -65,7 +65,7 @@ The Infinispan module will have installed file called `$\{jetty.home}/etc/jetty- This file configures an instance of the `InfinispanSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-infinispan/src/main/config/etc/jetty-infinispan.xml[] ---- @@ -91,7 +91,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -132,7 +132,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc index faf912e2bc0b..aec17c371355 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc @@ -46,7 +46,7 @@ When using the jetty distribution, to enable jdbc session persistence, you will You will also find the following properties, either in your base's start.d/jdbc-session.ini file or appended to your start.ini, depending on how you enabled the module: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ## Unique identifier for this node in the cluster jetty.jdbcSession.workerName=node1 @@ -80,7 +80,7 @@ The jdbc-session module will have installed file called `$\{jetty.home}/etc/jett This file configures an instance of the `JDBCSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-jdbc-sessions.xml[] ---- @@ -89,7 +89,7 @@ As well as uncommenting and setting up appropriate values for the properties dis As Jetty configuration files are direct mappings of XML to Java, it is straight forward to do this in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(); ... @@ -129,7 +129,7 @@ These classes have getter/setter methods for the table name and all columns. Here's an example of changing the name of `JettySessionsId` table and its single column. This example will use java code, but as explained above, you may also do this via a Jetty xml configuration file: -[source, java, subs="{sub-order}"] +[source, java, ] ---- JDBCSessionIdManager idManager = new JDBCSessionIdManager(server); @@ -142,7 +142,7 @@ idManager.setSessionIdTableSchema(idTableSchema); In a similar fashion, you can change the names of the table and columns for the `JettySessions` table. *Note* that both the `SessionIdTableSchema` and the `SessionTableSchema` instances are set on the `JDBCSessionIdManager` class. -[source, java, subs="{sub-order}"] +[source, java, ] ---- JDBCSessionIdManager idManager = new JDBCSessionIdManager(server); @@ -172,7 +172,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -192,7 +192,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -213,7 +213,7 @@ From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance direc If you're embedding this in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- //assuming you have already set up the JDBCSessionIdManager as shown earlier diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc index 658a55f484f6..cccdb0b55082 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc @@ -53,7 +53,7 @@ To do that, you can use `--skip-file-validation=nosql` argument to start.jar on You will also find the following properties, either in your base's `start.d/nosql.ini` file or appended to your `start.ini`, depending on how you enabled the module: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ## Unique identifier for this node in the cluster jetty.nosqlSession.workerName=node1 @@ -77,7 +77,7 @@ The nosql module will have installed file called `$\{jetty.home}/etc/jetty-nosql This file configures an instance of the `MongoSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-nosql/src/main/config/etc/jetty-nosql.xml[] ---- @@ -86,7 +86,7 @@ The `MongoSessionIdManager` needs access to a MongoDB cluster, and the `jetty-no If you need to configure something else, you will need to edit this file. Here's an example of a more complex setup to use a remote MongoDB instance: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -130,7 +130,7 @@ Here's an example of a more complex setup to use a remote MongoDB instance: As Jetty configuration files are direct mappings of XML to Java, it is straight forward to do this in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(); @@ -186,7 +186,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -207,7 +207,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -227,7 +227,7 @@ From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance direc If you're embedding this in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- //assuming you have already set up the MongoSessionIdManager as shown earlier //and have a reference to the Server instance: diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc index 095ee8db5851..7232ba2da4a1 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc @@ -74,7 +74,7 @@ The following sections provide examples of how to apply the init parameters. You can set these parameters as context parameters in a web application's `WEB-INF/web.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -103,7 +103,7 @@ You can set these parameters as context parameters in a web application's `WEB-I You can configure init parameters on a web application, either in code, or in a Jetty context xml file equivalent: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -130,7 +130,7 @@ You can configure init parameters on a web application, either in code, or in a You can configure init parameters directly on a `SessionManager` instance, either in code or the equivalent in xml: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -165,7 +165,7 @@ For full details, consult the http://docs.oracle.com/javaee/6/api/javax/servlet/ Below is an example of this implementation: a `ServletContextListener` retrieves the `SessionCookieConfig` and sets up some new values when the context is being initialized: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import javax.servlet.SessionCookieConfig; import javax.servlet.ServletContextEvent; @@ -205,7 +205,7 @@ public class TestListener implements ServletContextListener You can also use `web.xml` to configure the session handling characteristics instead: here's an example doing exactly the same as above instead of using code: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ); ---- You may also set the tracking mode in `web.xml`, e.g.: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -75,7 +75,7 @@ For example, the Wicket web framework requires the servlet environment to be ava Using `SessionManager.setLazyLoad(true)`, Jetty loads sessions lazily either when it receives the first request for a session, or the session scavenger runs for the first time, whichever happens first. Here's how the configuration looks in XML: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -93,7 +93,7 @@ Here's how the configuration looks in XML: To enable session persistence for the Jetty Maven plugin, set up the `HashSessionManager` in the configuration section like so: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc index 3b5eea4c2154..ef0b7a2d48c2 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc @@ -26,7 +26,7 @@ Note: Persisting sessions to the local file system should *not* be used in a clu When using the Jetty distribution, you will first need to enable the `session-store-file` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -58,7 +58,7 @@ ____ Opening `start.d/session-store-file.ini` will show a list of all the configurable options for the file system session module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-file diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc index ede40efe8752..6adbe23df803 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc @@ -66,7 +66,7 @@ To enable communication using the GCloud Emulator: When using the Jetty distribution, you will first need to enable the `session-store-gcloud` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -191,7 +191,7 @@ It does *not*, however, configure a SLF4J implementation for the users. As such, you will also need to enable one of the SLF4J implementation modules listed. In this example, we will enable the `slf4j-simple-impl` module to provide a SLF4J implementation. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini @@ -215,7 +215,7 @@ ____ Opening the `start.d/session-store-gcloud.ini` will display a list of all the configurable properties for the Google Cloud DataStore module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-gcloud diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc index ce252b048335..a8e467a6c1e5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-hazelcast-remote` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -73,7 +73,7 @@ ____ Opening the `start.d/session-store-hazelcast-remote.ini` will show a list of all the configurable options for the Hazelcast module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-hazelcast-remote @@ -118,7 +118,7 @@ ____ During testing, it can be helpful to run an in-process instance of Hazelcast. To enable this you will first need to enable the `session-store-hazelcast-embedded` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -160,7 +160,7 @@ In addition to adding these modules to the classpath of the server it also added Opening the `start.d/start.d/session-store-hazelcast-embedded.ini` will show a list of all the configurable options for the Hazelcast module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-hazelcast-embedded diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc index 1070b6db70de..0b99fe38ce65 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc @@ -25,7 +25,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-infinispan-remote` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -72,7 +72,7 @@ ____ Opening the `start.d/session-store-infinispan-remote.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-infinispan-remote @@ -113,7 +113,7 @@ ____ Enabling this module allows jetty to search infinispan for expired sessions that are no longer being referenced by any jetty node. Note that this is an *additional* module, to be used in conjuction with the `session-store-infinispan-remote` module. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar ../start.jar --add-to-start=infinispan-remote-query ---- @@ -131,7 +131,7 @@ ____ If you are running Jetty with JDK 9 or greater, enable `session-store-infinispan-embedded-910.mod` instead. ____ -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar ../start.jar --add-to-start=session-store-infinispan-embedded @@ -167,7 +167,7 @@ In addition to adding these modules to the classpath of the server it also added Opening the `start.d/session-store-infinispan-remote.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-infinispan-embedded @@ -198,7 +198,7 @@ ____ Similarly to the `session-store-infinispan-remote` module, the `session-store-infinispan-embedded` module has an adjunct module `infinispan-embedded-query`, which when enabled, will allow jetty to detect and properly scavenge defunct sessions stranded in infinispan. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar ../start.jar --add-to-start=infinispan-embedded-query ---- @@ -220,7 +220,7 @@ ____ How to use the converter: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:[other classpath] org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter @@ -240,7 +240,7 @@ When used with no arguments the usage message is printed. When used with the `ca To perform the conversion, run the InfinispanSessionLegacyConverter with just the `cache-name`, and optionally the `host` system property. The following command will attempt to convert all sessions in the cached named `my-remote-cache` on the machine `myhost`, ensuring that application classes in the `/my/custom/classes` directory are on the classpath: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:/my/custom/classes org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter -Dhost=myhost my-remote-cache ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc index 533cc88e0611..126534710180 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-jdbc` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -48,7 +48,7 @@ In addition to adding these modules to the classpath of the server, several ini Opening the `start.d/session-store-jdbc.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-jdbc diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc index dd4750fc7454..c5c33535cdce 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc @@ -31,7 +31,7 @@ To enable it with the Jetty distribution, enable the `session-store-cache` link: After enabling, the `$jetty.base/start.d/session-store-cache.ini` file will be generated: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- --module=session-store-cache diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc index bc56d0818688..9f2ca8efe03f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-mongo` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -70,7 +70,7 @@ ____ Opening the `start.d/session-store-mongo.ini` will show a list of all the configurable options for the MongoDB module: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- # Module: session-store-mongo diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc index d0bde26df2ec..acd3bee973b5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc @@ -26,7 +26,7 @@ If you wish to change any of the default values, you need to enable the `session Once the `session-cache-hash` module has been enabled, you can view a list of all the configurable values by opening `start.d/session-cache-hash.ini`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- --module=session-cache-hash diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc index 81c45b7c4042..37ef56e88f72 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc @@ -68,7 +68,7 @@ That said, if a user wishes to configure sessions this way, it is possible using Below is an example of how you could configure a the link:#configuring-sessions-file-system[`FileSessionDataStore`], but the same concept would apply to any of the *SessionDataStores discussed in this chapter: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc index 4df04dc82641..6174b07be99b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-config diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc index f0b78c238905..9ded46ccf17d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty]$ mkdir mybase [jetty]$ cd mybase diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc index c932f2d31b81..6414371070a5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-config diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc index aaa55d8faf43..4256f47d05c9 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar $JETTY_HOME/start.jar --add-to-start=http,webapp,deploy INFO : webapp initialized in ${jetty.base}/start.ini diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc index edca90e5f804..d9e405519d0b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=logging,-internal diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc index 4f74ea73041b..69367c595621 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar ../start.jar --list-modules diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index 12b2651eeab0..abfa4129cc09 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -21,7 +21,7 @@ The most basic way of starting the Jetty standalone server is to execute the `start.jar`, which is a bootstrap for starting Jetty with the configuration you want. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ java -jar start.jar 2013-09-23 11:27:06.654:INFO:oejs.Server:main: jetty-{VERSION} @@ -163,7 +163,7 @@ Note: Transitive modules are also appended. If a module contains an .ini template with properties, you can also edit these properties when activating the module. To do this, simply list the property and its value after the `-add-to-start` command, such as in the following example: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar start.jar --add-to-start=http jetty.http.port=8379 jetty.http.host=1.2.3.4 .... @@ -173,7 +173,7 @@ Doing this will uncomment the property in the associated .ini file and set it to Used to update a specified property or properties that exist in an existing .ini file. Jetty scans the command line, `${jetty.base}` and `${jetty.home}` for .ini files that have the specified property and update it accordingly. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar ../start.jar --update-ini jetty.http.port=8417 ConfigSource @@ -197,7 +197,7 @@ Please see link:#start-vs-startd[Start.ini vs. Start.d] for more information. --write-module-graph=:: Advanced feature: Creates a graphviz http://graphviz.org/content/dot-language[dot file] of the module graph as it exists for the active `${jetty.base}`. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # generate module.dot $ java -jar start.jar --module=websocket --write-module-graph=modules.dot @@ -252,7 +252,7 @@ You can configure a port number for Jetty to listen on for a stop command, so yo This requires the use of a "secret" key, to prevent malicious or accidental termination. Use the `STOP.PORT` and `STOP.KEY` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively, which will set these as system parameters) parameters as arguments to the `start.jar`: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar ${JETTY_HOME}/start.jar STOP.PORT=1234 STOP.KEY=secretpassword .... @@ -261,7 +261,7 @@ Then, to stop Jetty from a different terminal, you need to supply this port and You can either use a copy of the Jetty distribution, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class to accomplish this. Here's how to use the Jetty distribution, leveraging `start.jar`, to perform a stop: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -jar start.jar STOP.PORT=8181 STOP.KEY=abc123 --stop .... @@ -293,7 +293,7 @@ Default is https://repo1.maven.org/maven2/. ==== Shaded Start.jar If you have a need for a shaded version of `start.jar` (such as for Gradle), you can achieve this via a Maven dependency. -[source, xml, subs="{sub-order}"] +[source, xml, ] .... org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc index 469f1bf74c9f..0d1f2b839c57 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc @@ -55,7 +55,7 @@ For more details on how startup with start.jar works, see link:#executing-startj The Jetty Distribution comes with an example `${jetty.base}` which enables the various demonstration webapps and server configurations. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ ls -la @@ -90,7 +90,7 @@ drwxrwxr-x 2 user group 4096 Oct 8 06:54 webapps/ If you want to see what the Jetty base looks like without executing Jetty, you can simply list the configuration by using the `--list-config` command. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [demo-base]$ java -jar $JETTY_HOME/start.jar --list-config @@ -222,7 +222,7 @@ Of note, is that the output will make it known where the configuration elements If you look at the `${jetty.base}/start.ini` you will see a layout similar to below. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ cat start.ini @@ -274,7 +274,7 @@ The Jetty `start.jar` and XML files always assume that both `${jetty.home}` and You can opt to manually define the `${jetty.home}` and `${jetty.base}` directories, such as this: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -292,7 +292,7 @@ Alternately, you can declare one directory and let the other one be discovered. The following example uses default discovery of `${jetty.home}` by using the parent directory of wherever `start.jar` itself is, and a manual declaration of `${jetty.base}`. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -309,7 +309,7 @@ the `start.jar` in your `{$jetty.home}` remotely. The following demonstrates this by allowing default discovery of `${jetty.home}` via locating the `start.jar`, and using the `user.dir` System Property for `${jetty.base}`. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc index 6708b2a8884f..0f60ea914b21 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc @@ -55,7 +55,7 @@ The `--list-classpath` command line option is used as such. (Demonstrated with the link:#demo-base[demo-base from the Jetty Distribution]) -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [demo-base]$ java -jar $JETTY_HOME/start.jar --list-classpath diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc index 549fee6e7359..24b8bc0794b1 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc @@ -36,7 +36,7 @@ or greater, and explicitly referencing the "enterprise" classes as dependencies, To start Jetty on the module-path rather than the class-path, it is enough to add the `--jpms` option to the command line, for example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mkdir my-jetty-base $ cd my-jetty-base @@ -59,14 +59,14 @@ You will have two JVMs running: one that runs `start.jar` and one that runs Jett If you are interested in the details of how the command line to run Jetty on the module-path looks like, you can add the `--dry-run` option: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar $JETTY_HOME/start.jar --jpms --dry-run .... This will give an output looking something like this (broken in sections for clarity): -[source, screen, subs="{sub-order}"] +[source, screen, ] .... /opt/openjdk-11+28/bin/java --module-path /opt/jetty/lib/servlet-api-3.1.jar:/opt/jetty/lib/jetty-schemas-3.1.jar:/opt/jetty/lib/jetty-http-9.4.13-SNAPSHOT.jar:... @@ -94,7 +94,7 @@ Jetty needs to be able to instantiate those classes and therefore needs to be ab When Jetty runs on the class-path, this is easily achieved by using a link:#custom-modules[custom module]: -[source, screen, subs="{sub-order}"] +[source, screen, ] .mysql.mod .... [description] @@ -111,7 +111,7 @@ Because it is not an automatic module, it is not added to the module graph, and To add the JPMS module `java.sql` to the module graph, you need to modify your custom module in the following way, using our `mysql.mod` as an example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .mysql.mod .... [description] @@ -130,7 +130,7 @@ Assuming that `mysql-connector-java-*.jar` is a non JPMS modular jar, or an auto If `mysql-connector-java-*.jar` were a proper JPMS modular jar with name (for example) `com.mysql.jdbc`, then it would need to be explicitly added to the module graph, in this way: -[source, screen, subs="{sub-order}"] +[source, screen, ] .mysql.mod .... [description] @@ -147,7 +147,7 @@ The JPMS module `java.sql` does not need to be explicitly added because it would The `[jpms]` section has the following format: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jpms] add-modules: (,)* @@ -164,7 +164,7 @@ The section above uses the `--jpms` command line option to start Jetty on the mo An alternative way of achieving the same result is to use a Jetty module, `$JETTY_BASE/modules/jpms.mod`, that specifies that you want to run using JPMS (and possibly add some JPMS specific configuration). -[source, screen, subs="{sub-order}"] +[source, screen, ] .jpms.mod .... [ini] @@ -178,7 +178,7 @@ The `[ini]` section is equivalent to passing the `--jpms` option to the command The `[jpms]` section (see also the link:#jpms-advanced-config[advanced JPMS configuration section]) allows you specify additional JPMS configuration. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mkdir jetty-base-jpms $ cd jetty-base-jpms diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc index 440ae61086f4..04fcf758f91f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc @@ -70,7 +70,7 @@ As an alternative to a single `start.ini` file you can opt to house modules in a Modules activated when a `start.d` directory exists will be stored as a single file per module. Below is an example of a fresh `${jetty.base}` that will create a `start.d` directory and activate several modules. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty.home]$ mkdir mybase [jetty.home]$ cd mybase/ @@ -106,7 +106,7 @@ If you have an existing `start.ini` file but would like to use the `start.d` str Doing this will create the `start.d` directory and copy your existing `start.ini` file in to it. Any new modules added to the server will have their own `.ini` file created in the `start.d` directory. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar ../start.jar --add-to-start=server,client,webapp,websocket INFO : webapp initialised in ${jetty.base}/start.ini @@ -162,7 +162,7 @@ Listed in the ini file is the associated module file and any properties that can Below is an example of the `requestlog.ini` file: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # --------------------------------------- # Module: requestlog diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc index 40f9d0e24598..0887e02277d3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc @@ -71,7 +71,7 @@ XML Files:: The simplest way to start Jetty is via the `start.jar` mechanism using the following Java command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=8080 @@ -80,7 +80,7 @@ The simplest way to start Jetty is via the `start.jar` mechanism using the follo This command uses the `start.jar` mechanism to bootstrap the classpath, properties, and XML files with the metadata obtained from the `http` module. Specifically the `http` module is defined in the `${jetty.home}/modules/http.mod` file, and includes the following: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ cat modules/http.mod [depend] @@ -99,7 +99,7 @@ The INI-template section is not actually used by the command above, so the `jett Following the server dependency, the `${jetty.home}/modules/server.mod` file includes: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ cat modules/server.mod [lib] @@ -123,7 +123,7 @@ The combined metadata of the `http` and `server` modules results in `start.jar` Another way to see this is by asking Jetty what its configuration looks like by appending --list-config to the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=9099 --list-config @@ -182,7 +182,7 @@ If you don't want to use the `start.jar` bootstrap, you can start Jetty using a The following is the equivalent Java command line for what the `start.jar` bootstrap above performs. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ echo jetty.http.port=8080 > /tmp/jetty.properties @@ -209,7 +209,7 @@ The Java command line sets up the classpath with the core Jetty jars and the ser You can further simplify the startup of this server by using the INI template defined by the modules to create a `start.ini` file with the command: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ mkdir example-base @@ -235,7 +235,7 @@ drwxrwxr-x 12 user webgroup 4096 Oct 4 11:49 ../ Once complete, you can edit the `start.ini` file to modify any parameters and you can run the server with the simple command: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [example-base]$ java -jar $JETTY_HOME/start.jar .... diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc index 5632c4372753..e36da92a4a77 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc @@ -27,7 +27,7 @@ This script is suitable for setting up Jetty as a service in Unix. The minimum steps to get Jetty to run as a Service include: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [/opt/jetty]# tar -zxf /home/user/downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# cd jetty-distribution-{VERSION}/ @@ -57,7 +57,7 @@ The techniques outlined here assume an installation on Linux (demonstrated on Ub Prepare some empty directories to work with. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # mkdir -p /opt/jetty # mkdir -p /opt/web/mybase @@ -79,14 +79,14 @@ It is our experience that the standard temp directory is often managed by variou Jetty 9.3 requires Java 8 (or greater) to run. Make sure you have it installed. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # apt-get install openjdk-8-jdk .... Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # java -version java version "1.6.0_27" @@ -118,7 +118,7 @@ OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) It is recommended that you create a user to specifically run Jetty. This user should have the minimum set of privileges needed to run Jetty. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty .... @@ -129,7 +129,7 @@ Download a copy of the Jetty distribution from the link:#jetty-downloading[Offic Unpack it into place. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [/opt/jetty]# tar -zxf /home/user/Downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# ls -F @@ -153,7 +153,7 @@ In past versions of Jetty, you would configure / modify / add to the `jetty-dist While this is still supported, we encourage you to setup a proper `${jetty.base}` directory, as it will benefit you with easier `jetty-distribution` upgrades in the future. -- -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # cd /opt/web/mybase/ [/opt/web/mybase]# ls @@ -191,7 +191,7 @@ See xref:start-jar[] for more details and options on setting up and configuring Copy your war file into place. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # cp /home/user/projects/mywebsite.war /opt/web/mybase/webapps/ .... @@ -200,7 +200,7 @@ Most service installations will want Jetty to run on port 80, now is the opportu Edit the `/opt/web/mybase/start.ini` and change the `jetty.http.port` value. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # grep jetty.http.port /opt/web/mybase/start.ini jetty.port=80 @@ -208,7 +208,7 @@ jetty.port=80 Change the permissions on the Jetty distribution and webapp directories so that the user you created can access it. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # chown --recursive jetty /opt/jetty # chown --recursive jetty /opt/web/mybase @@ -216,7 +216,7 @@ Change the permissions on the Jetty distribution and webapp directories so that Next we need to make the Unix System aware that we have a new Jetty Service that can be managed by the standard `service` calls. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # cp /opt/jetty/jetty-distribution-{VERSION}/bin/jetty.sh /etc/init.d/jetty # echo "JETTY_HOME=/opt/jetty/jetty-distribution-{VERSION}" > /etc/default/jetty @@ -227,7 +227,7 @@ Next we need to make the Unix System aware that we have a new Jetty Service that Test out the configuration: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # service jetty status Checking arguments to Jetty: @@ -260,7 +260,7 @@ You now have a configured `${jetty.base}` in `/opt/web/mybase` and a `${jetty.ho Test the service to make sure it starts up and runs successfully. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # service jetty start Starting Jetty: OK Wed Nov 20 12:35:28 MST 2013 diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc index b6e0fa9bdb88..29e854d330ff 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc @@ -27,7 +27,7 @@ The techniques outlined here are based on Windows 7 (64-bit), using JDK 8 (64-bi Prepare some empty directories to work with. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\> mkdir opt C:\> cd opt @@ -69,7 +69,7 @@ This is intentionally kept separate from the standard temp directories of Window Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\opt>java -version java version "1.7.0_45" @@ -83,7 +83,7 @@ Extract the contents of the `jetty-distribution-{VERSION}` directory to `C:\opt\ Once complete, the contents of the `C:\opt\jetty` directory should look like this: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\opt\jetty>dir Volume in drive C has no label. @@ -122,7 +122,7 @@ The ZIP file has both 32 bit and 64 bit versions of this file. Once you are complete, the contents of `C:\opt` directory should look like this: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\opt> dir Volume in drive C has no label. @@ -145,7 +145,7 @@ Now it's time to setup your new `${jetty.base}` directory to have all of your We We'll start by specifying which modules we want to use (this will create a start.ini file and also create a few empty directories for you) -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\opt\myappbase>java -jar ..\jetty\start.jar --add-to-start=deploy,http,console-capture @@ -192,7 +192,7 @@ See the section on xref:start-jar[] for more details and options on setting up a At this point you merely have to copy your WAR files into the `{$jetty.base}/webapps` directory. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... C:\opt\myappbase> copy C:\projects\mywebsite.war webapps\ .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc index 72772966b434..b272c27787cc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc @@ -31,7 +31,7 @@ These options are general to OpenJDK (and therefore also for the Oracle JVM). They provide good information about the GC activity of your JVM, producing logs that can later be analyzed to perform finer tuning. .JDK 8 Garbage Collection Logging Configuration -[source,screen, subs="{sub-order}"] +[source,screen, ] .... -Xloggc:/path/to/myjettybase/logs/gc.log -XX:+PrintGCDateStamps @@ -43,7 +43,7 @@ They provide good information about the GC activity of your JVM, producing logs .... .JDK 9 Garbage Collection Logging Configuration -[source,screen, subs="{sub-order}"] +[source,screen, ] .... Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log:time,level,tags .... @@ -51,7 +51,7 @@ Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log There are not many recommended options for GC that can apply to all users. However, the most obvious one is to disable explicit GC (this is performed regularly by RMI and can introduce an abnormal amount of GC pauses). -[source,screen, subs="{sub-order}"] +[source,screen, ] .... -XX:+DisableExplicitGC .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc index 4e929369c26c..d2b348a9c3b3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc @@ -54,7 +54,7 @@ You can configure most of these in `/etc/security/limits.conf` or via `sysctl`. You should increase TCP buffer sizes to at least 16MB for 10G paths and tune the auto-tuning (keep in mind that you need to consider buffer bloat). -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl -w net.core.rmem_max=16777216 $ sysctl -w net.core.wmem_max=16777216 @@ -69,7 +69,7 @@ The default value is 128. If you are running a high-volume server and connections are getting refused at a TCP level, you need to increase this value. This setting can take a bit of finesse to get correct: if you set it too high, resource problems occur as it tries to notify a server of a large number of connections, and many remain pending, but if you set it too low, refused connections occur. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl -w net.core.somaxconn=4096 .... @@ -77,7 +77,7 @@ This setting can take a bit of finesse to get correct: if you set it too high, r The `net.core.netdev_max_backlog` controls the size of the incoming packet queue for upper-layer (Java) processing. The default (2048) may be increased and other related parameters adjusted with: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl -w net.core.netdev_max_backlog=16384 $ sysctl -w net.ipv4.tcp_max_syn_backlog=8192 @@ -89,7 +89,7 @@ $ sysctl -w net.ipv4.tcp_syncookies=1 If many outgoing connections are made (for example, on load generators), the operating system might run low on ports. Thus it is best to increase the port range, and allow reuse of sockets in `TIME_WAIT`: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl -w net.ipv4.ip_local_port_range="1024 65535" $ sysctl -w net.ipv4.tcp_tw_recycle=1 @@ -110,7 +110,7 @@ theusername soft nofile 40000 Linux supports pluggable congestion control algorithms. To get a list of congestion control algorithms that are available in your kernel run: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl net.ipv4.tcp_available_congestion_control .... @@ -118,7 +118,7 @@ $ sysctl net.ipv4.tcp_available_congestion_control If cubic and/or htcp are not listed, you need to research the control algorithms for your kernel. You can try setting the control to cubic with: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ sysctl -w net.ipv4.tcp_congestion_control=cubic .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc index f940663a136f..7d95e5cbecc7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc @@ -26,7 +26,7 @@ To achieve optimal fair handling for all users of a server, it can be necessary An instance of link:{JDURL}/org/eclipse/jetty/server/LowResourceMonitor.html[LowResourceMonitor] may be added to a Jetty server to monitor for low resources situations and to take action to limit the number of idle connections on the server. To configure the low resources monitor, you can enable the the `lowresources.mod` on the command line, which has the effect of including the following XML configuration: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-lowresources.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index a88102ee9d2b..ce5d18b4589e 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -34,7 +34,7 @@ Additional settings, including construction your own constructor Jetty XML files Out of the box, Jetty provides several link:#startup-modules[modules] for enabling different types of connectors, from HTTP to HTTPS, HTTP/2, and others. If you startup Jetty with the `--list-modules=connector` command, you can see a list of all available connector modules: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=connector @@ -183,7 +183,7 @@ Modules for tag 'connector': To enable a connector, simply activate the associated module. Below is an example of activating both the `http` and `https` modules in a fresh link:#startup-base-and-home[Jetty base] using the link:#start-vs-startd[start.d directory]: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase] java -jar $JETTY_HOME/start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -210,7 +210,7 @@ When the `http` and `https` modules were activated, so too were any modules they At this point the server has been configured with connectors for both HTTP and HTTPS and can be started: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase] java -jar $JETTY_HOME/start.jar 2017-08-31 10:19:58.855:INFO::main: Logging initialized @372ms to org.eclipse.jetty.util.log.StdErrLog @@ -226,7 +226,7 @@ When modules are enabled, they are loaded with several default options. These can be changed by editing the associated module ini file in the `start.d` directory (or the associated lines in `server.ini` if your implementation does not use `start.d`). For example, if we examine the `http.ini` file in our `start.d` directory created above, we will see the following settings: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # --------------------------------------- # Module: http @@ -266,7 +266,7 @@ For example, if we examine the `http.ini` file in our `start.d` directory create To make a change to these settings, uncomment the line (by removing the #) and change the property to the desired value. For example, if you wanted to change the HTTP port to 5231, you would edit the line as follows: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... ... ## Connector port to listen on @@ -276,7 +276,7 @@ jetty.http.port=5231 Now when the server is started, HTTP connections will enter on port 5231: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [mybase] java -jar ../start.jar 2017-08-31 10:31:32.955:INFO::main: Logging initialized @366ms to org.eclipse.jetty.util.log.StdErrLog @@ -338,7 +338,7 @@ link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-server/src/main/config/etc/jetty-alpn. The services a link:{JDURL}/org/eclipse/jetty/server/ServerConnector.html[`ServerConnector`] instance uses are set by constructor injection and once instantiated cannot be changed. Many of the services may be defaulted with null or 0 values so that a reasonable default is used, thus for most purposes only the Server and the connection factories need to be passed to the connector constructor. In Jetty XML (that is, in link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-http.xml[`jetty-http.xml`]) you can do this by: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -360,7 +360,7 @@ Typically the defaults are sufficient for almost all deployments. You can configure connector network settings by calling setters on the connector before it is started. For example, you can set the port with the Jetty XML: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -373,7 +373,7 @@ For example, you can set the port with the Jetty XML: Values in Jetty XML can also be parameterized so that they may be passed from property files or set on the command line. Thus typically the port is set within Jetty XML, but uses the `Property` element to be customizable: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -418,7 +418,7 @@ To avoid duplicate configuration, the standard Jetty distribution creates the co A typical configuration of link:{JDURL}/org/eclipse/jetty/server/HttpConfiguration.html[HttpConfiguration] is: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- https @@ -431,7 +431,7 @@ A typical configuration of link:{JDURL}/org/eclipse/jetty/server/HttpConfigurati This example HttpConfiguration may be used by reference to the ID "`httpConfig`": -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -457,7 +457,7 @@ Please note that if your `httpConfig` does not include a `secureScheme` or `secu For SSL-based connectors (in `jetty-https.xml` and `jetty-http2.xml`), the common "`httpConfig`" instance is used as the basis to create an SSL specific configuration with ID "`sslHttpConfig`": -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -496,7 +496,7 @@ ____ The `X-Forwarded-for` header and associated headers are a de facto standard where intermediaries add HTTP headers to each request they forward to describe the originating connection. These headers can be interpreted by an instance of link:{JDURL}/org/eclipse/jetty/server/ForwardedRequestCustomizer.html[`ForwardedRequestCustomizer`] which can be added to a `HttpConfiguration` as follows: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- 32768 @@ -519,7 +519,7 @@ The connection factory can be added to any link:{JDURL}/org/eclipse/jetty/server An example of adding the factory to a HTTP connector is shown below: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc index 656cddd602f7..1fabd2996f10 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc @@ -27,7 +27,7 @@ provider and the https://github.com/google/conscrypt/[Conscrypt] provider as SSL For the default SSL support, simply activate the `ssl` link:#startup-modules[module]: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- $ cd /path/to/mybase $ java -jar ${JETTY_HOME}/start.jar --add-to-startd=ssl @@ -63,7 +63,7 @@ jetty.sslContext.keyStorePassword:: Enabling Conscrypt SSL is just as easy as default SSL - enable both the `conscrypt` and `ssl` link:#startup-modules[modules]: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- $ cd ${JETTY_HOME} $ java -jar ../start.jar --add-to-start=ssl,conscrypt @@ -98,7 +98,7 @@ SSL-specific parameters, like `keyStorePath` and `keyStorePassword` can still co To enable client certificate authentication in the Jetty Distribution, you need to enable the both the `ssl` and `https` modules. -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- $ cd /path/to/mybase $ java -jar /path/to/jetty-dist/start.jar --add-to-startd=ssl,https diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index 6e9e65e9b1d4..1903348bee47 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -53,7 +53,7 @@ ____ By default, Jetty excludes these ciphers in the link:{GITBROWSEURL}/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java#L249-L256[`SslContextFactory`.] You can re-enable these by re-declaring the ciphers you want excluded in code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$"); @@ -110,7 +110,7 @@ You should read the full manuals of the tools you are using if you want to speci The following command generates a key pair and certificate directly into file `keystore`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA ---- @@ -126,7 +126,7 @@ This command prompts for information about the certificate and for passwords to The only mandatory response is to provide the fully qualified host name of the server at the "first and last name" prompt. For example: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256withRSA Enter keystore password: password @@ -159,7 +159,7 @@ If you want to use only a self signed certificate for some kind of internal admi If you are using Java 8 or later, then you may also use the SAN extension to set one or more names that the certificate applies to: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256withRSA -ext 'SAN=dns:jetty.eclipse.org,dns:*.jetty.org' ... @@ -170,7 +170,7 @@ $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256with The following command generates a key pair in the file `jetty.key`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl genrsa -aes128 -out jetty.key ---- @@ -179,7 +179,7 @@ You might also want to use the `-rand` file argument to provide an arbitrary fil The following command generates a certificate for the key into the file `jetty.crt`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl req -new -x509 -newkey rsa:2048 -sha256 -key jetty.key -out jetty.crt ---- @@ -190,7 +190,7 @@ For the those with heightened security in mind, add -b4096 to get a 4069 bit key The next command prompts for information about the certificate and for passwords to protect both the keystore and the keys within it. The only mandatory response is to provide the fully qualified host name of the server at the "Common Name" prompt. For example: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl genrsa -aes128 -out jetty.key Generating RSA private key, 2048 bit long modulus @@ -243,7 +243,7 @@ Each CA has its own instructions (look for JSSE or OpenSSL sections), but all in The following command generates the file `jetty.csr` using `keytool` for a key/cert already in the keystore: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -certreq -alias jetty -keystore keystore -file jetty.csr ---- @@ -253,7 +253,7 @@ $ keytool -certreq -alias jetty -keystore keystore -file jetty.csr The following command generates the file `jetty.csr` using OpenSSL for a key in the file `jetty.key`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl req -new -key jetty.key -out jetty.csr ---- @@ -280,7 +280,7 @@ You can use `keytool` to load a certificate in PEM form directly into a keystore The PEM format is a text encoding of certificates; it is produced by OpenSSL, and is returned by some CAs. An example PEM file is: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- jetty.crt -----BEGIN CERTIFICATE----- @@ -302,14 +302,14 @@ Rcz6oCRvCGCe5kDB The following command loads a PEM encoded certificate in the `jetty.crt` file into a JSSE keystore: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts ---- If the certificate you receive from the CA is not in a format that `keytool` understands, you can use the `openssl` command to convert formats: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl x509 -in jetty.der -inform DER -outform PEM -out jetty.crt ---- @@ -322,14 +322,14 @@ The certificate can be one you generated yourself or one returned from a CA in r The following OpenSSL command combines the keys in `jetty.key` and the certificate in the `jetty.crt` file into the `jetty.pkcs12` file: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12 ---- If you have a chain of certificates, because your CA is an intermediary, build the PKCS12 file as follows: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cat example.crt intermediate.crt [intermediate2.crt] ... rootCA.crt > cert-chain.txt $ openssl pkcs12 -export -inkey example.key -in cert-chain.txt -out example.pkcs12 @@ -344,7 +344,7 @@ OpenSSL asks for an __export password__. A non-empty password is required to make the next step work. Load the resulting PKCS12 file into a JSSE keystore with `keytool`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore ---- @@ -723,7 +723,7 @@ ____ Jetty includes support for Google's https://github.com/google/conscrypt/[Conscrypt SSL], which is built on their fork of https://www.openssl.org/[OpenSSL], https://boringssl.googlesource.com/boringssl/[BoringSSL]. Implementing Conscrypt for the link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-server/src/test/java/org/eclipse/jetty/alpn/conscrypt/server/ConscryptHTTP2Server.java[server] or link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2Client.java[client] is very straightforward process - simply instantiate an instance of Conscrypt's `OpenSSLProvider` and set `Conscrypt` as a provider for Jetty's `SslContextFactory`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ... Security.addProvider(new OpenSSLProvider()); @@ -784,7 +784,7 @@ ____ To do this, first create a new `${jetty.base}/etc/tweak-ssl.xml` file (this can be any name, just avoid prefixing it with "jetty-"). -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -808,7 +808,7 @@ You can do anything you want with the `SslContextFactory` in use by the Jetty Di To make sure that your `${jetty.base}` uses this new XML, add it to the end of your `${jetty.base}/start.ini` or `${jetty.base}/start.d/server.ini`. -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- $ cd /path/to/mybase $ ls -l @@ -837,7 +837,7 @@ Additional Include / Exclude examples: *Example*: Include all ciphers which support https://en.wikipedia.org/wiki/Forward_secrecy[Forward Secrecy] using regex: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -851,7 +851,7 @@ Additional Include / Exclude examples: *Example*: Exclude all old, insecure or anonymous cipher suites: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -869,7 +869,7 @@ Additional Include / Exclude examples: *Example*: Since 2014 SSLv3 is considered insecure and should be disabled. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -891,7 +891,7 @@ ____ *Example*: TLS renegotiation could be disabled too to prevent an attack based on this feature. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- FALSE ---- @@ -905,7 +905,7 @@ You can also dump the server when shutting down the server instance by adding `j Specifically, you will want to look for the `SslConnectionFactory` portion of the dump. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- [my-base]$ java -jar ${JETTY_HOME}/start.jar jetty.server.dumpAfterStart=true diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc index 3fc4bd0c1762..bf2b6fcab9b4 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc @@ -62,7 +62,7 @@ You supply a list of IP addresses and names at which the web application is reac Suppose you have a webapp called `blah.war`, that you want all of the above names and addresses to be served at path "`/blah`". Here's how you would configure the virtual hosts with a link:#deployable-descriptor-file[context XML] file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -102,7 +102,7 @@ Using the method of preparing link:#deployable-descriptor-file[contextXML] files For `blah` webapp: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -128,7 +128,7 @@ These URLs now resolve to the blah context (ie `blah.war`): For `other` webapp: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -177,7 +177,7 @@ To achieve this, we simply use the same context path of `/` for each of our weba For foo webapp: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -197,7 +197,7 @@ For foo webapp: For bar webapp: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc index 137e8e427148..c4bf0370c1e0 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc @@ -32,7 +32,7 @@ This element creates a mapping between the error-code or exception-type to the l Error code example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- 404 @@ -43,7 +43,7 @@ Error code example: Exception example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- java.io.IOException @@ -74,7 +74,7 @@ javax.servlet.error.status_code:: You can use context IoC XML files to configure the default error page mappings with more flexibility than is available with `web.xml`, specifically with the support of error code ranges. Context files are normally located in `${jetty.base}/webapps/` (see `DeployerManager` for more details) and an example of more flexible error page mapping is below: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -122,7 +122,7 @@ Context files are normally located in `${jetty.base}/webapps/` (see `DeployerMan If no error page mapping is defined, or if the error page resource itself has an error, then the error page will be generated by an instance of `ErrorHandler` configured either the Context or the Server. An `ErrorHandler` may extend the `ErrorHandler` class and may totally replace the handle method to generate an error page, or it can implement some or all of the following methods to partially modify the error pages: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException @@ -136,7 +136,7 @@ void writeErrorPageStacks(HttpServletRequest request, Writer writer) throws IOEx An `ErrorHandler` instance may be set on a Context by calling the `ContextHandler.setErrorHandler` method. This can be done by embedded code or via context IoC XML. For example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -150,7 +150,7 @@ For example: An `ErrorHandler` instance may be set on the entire server by setting it as a dependent bean on the Server instance. This can be done by calling `Server.addBean(Object)` via embedded code or in `jetty.xml` IoC XML: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc index 0b60c79cb116..6914e6564e70 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc @@ -35,14 +35,14 @@ When creating new configurations for alternative server: * Change all `id="Server"` to the new server name: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ---- * For all connectors for the new server change the `refid` in the server argument: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ---- @@ -55,14 +55,14 @@ When creating new configurations for alternative server: The following example creates another server instance and configures it with a connector and deployer: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/examples/embedded/src/main/resources/jetty-otherserver.xml[] ---- To run the other server, add the extra configuration file(s) to the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar start.jar jetty-otherserver.xml ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc index 0b646a497387..c1c399ed475c 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc @@ -45,7 +45,7 @@ If a web application is deployed using the WebAppProvider of the DeploymentManag If a web application is deployed using the `WebAppProvider` of the `DeploymentManager` with an XML IoC file to configure the context, then the `setContextPath` method can be called within that file. For example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- /test diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc index 8f0fc5a8333e..4b662f2e0fb2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc @@ -32,7 +32,7 @@ This can be done either in a context XML deployment descriptor external to the w In either case the syntax of the XML file is the same: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -46,7 +46,7 @@ In either case the syntax of the XML file is the same: Set an attribute in `jetty.xml` on the Server instance for which you want to modify the maximum form content size: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -69,7 +69,7 @@ Use the system property `org.eclipse.jetty.server.Request.maxFormContentSize`. This can be set on the command line or in the `$JETTY_BASE\start.ini` or any `$JETTY_BASE\start.d\*.ini` link:#startup-modules[module ini file.] Using `$JETTY_BASE\start.d\server.ini` as an example: -[source, console, subs="{sub-order}"] +[source, console, ] ---- # --------------------------------------- # Module: server diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc index d8503c14d94a..d4c2e58fffe3 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc @@ -51,7 +51,7 @@ As usual with Jetty, you can either set this attribute in a context xml file, or Here's an example of setting it in an xml file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -67,7 +67,7 @@ Here's an example of setting it in an xml file: The equivalent in code is: -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -83,7 +83,7 @@ There are several ways to use a particular directory as the temporary directory: As before this can be accomplished with an XML file or directly in code. Here is an example of setting the temp directory in XML: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -96,7 +96,7 @@ Here is an example of setting the temp directory in XML: And here is an example of doing it with java code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -108,7 +108,7 @@ context.setTempDirectory(new File("/some/dir/foo")); You should set this context attribute with the name of directory you want to use as the temp directory. Again, you can do this in XML: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -125,7 +125,7 @@ Again, you can do this in XML: Or in java: -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -145,7 +145,7 @@ ____ You can set the location of the temp directory on the command line when Jetty starts up in two ways. First is the most straightforward, simply add it to your command line when starting Jetty. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar ../start.jar -Djava.io.tmpdir=/path/to/desired/directory ---- @@ -156,7 +156,7 @@ After enabling the module (using the `--add-to-start=jvm` command), edit the `jv You will also need verify the line including the `--exec` command is not commented out, as this is required for Jetty to start a new, forked JVM. Below is an example of the standard `jvm.ini` file altered to include a reference to a temp directory. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... # --------------------------------------- # Module: jvm diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc index 33f7e2460cd0..76e643764184 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc @@ -43,7 +43,7 @@ contextPath:: For example, here is a descriptor file that deploys the file `/opt/myapp/myapp.war` to the context path `/wiki`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -57,7 +57,7 @@ For example, here is a descriptor file that deploys the file `/opt/myapp/myapp.w Both `SystemProperty` and `Property` elements can be used in the descriptor file. For example, if the system property is set to `myapp.home=/opt/myapp`, the previous example can be rewritten as: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -85,7 +85,7 @@ Here are some examples that configure advanced options in the descriptor file. This first example tells Jetty not to expand the WAR file when deploying it. This can help make it clear that users should not make changes to the temporary unpacked WAR because such changes do not persist, and therefore do not apply the next time the web application deploys. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -101,7 +101,7 @@ The next example retrieves the JavaEE Servlet context and sets an initialization The `setAttribute` method can also be used to set a Servlet context attribute. However, since the `web.xml` for the web application is processed after the deployment descriptor, the `web.xml` values overwrite identically named attributes from the deployment descriptor. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -122,7 +122,7 @@ The following example sets a special `web.xml` override descriptor. This descriptor is processed after the web application's `web.xml`, so it may override identically named attributes. This feature is useful when adding parameters or additional Servlet mappings without breaking open a packed WAR file. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -137,7 +137,7 @@ This feature is useful when adding parameters or additional Servlet mappings wit The next example configures not only the web application context, but also a database connection pool (see xref:jndi-datasource-examples[]) that the application can then use. If the `web.xml` does not include a reference to this data source, an override descriptor mechanism (as shown in the previous example) can be used to include it. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc index ac493dfa61bb..c957e703f177 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc @@ -81,7 +81,7 @@ The format for the XML file is the same as any context XML file and can be used To use this binding, you can either modify the existing `jetty-deploy.xml` which comes with the Jetty distribution (be sure to link:#startup-base-and-home[copy it to your $JETTY_BASE/etc directory first]), or by link:#custom-modules[creating a new module] file which calls to an additional XML file. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -101,7 +101,7 @@ It supports hot (re)deployment. The basic operation of the `WebAppProvider` is to periodically scan a directory for deployables. In the standard Jetty Distribution, this is configured in the `${jetty.home}/etc/jetty-deploy.xml` file. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc index a65fb8470a15..8c267d82458f 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc @@ -132,7 +132,7 @@ If you have only one webapp that you wish to affect, this may be the easiest opt You will, however, either need to have a context xml file that represents your web app, or you need to call the equivalent in code. Let's see an example of how we would add in the Configurations for both JNDI _and_ annotations: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -164,7 +164,7 @@ Of course, you can also use this method to reduce the Configurations applied to If you use the link:#deployment-architecture[deployer], you can set up the list of Configuration classes on the link:#default-web-app-provider[WebAppProvider]. They will then be applied to each `WebAppContext` deployed by the deployer: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -208,7 +208,7 @@ Instead of having to enumerate the list in its entirety, you can simply nominate Let's look at an example of using this method to add in Configuration support for JNDI - as usual you can either do this in an xml file, or via equivalent code. This example uses an xml file, in fact it is the `$JETTY_HOME/etc/jetty-plus.xml` file from the Jetty distribution: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -258,7 +258,7 @@ The value of this attribute is a regexp that defines which _jars_ and _class dir Here's an example from a context xml file (although as always, you could have accomplished the same in code), which would match any jar whose name starts with "foo-" or "bar-", or a directory named "classes": -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -284,7 +284,7 @@ This can be particularly useful when you have dozens of jars in `WEB-INF/lib`, b Here's an example in a xml file of a pattern that matches any jar that starts with `spring-`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc index 1f2ef43f2aba..a9a3ec4a6a6f 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc @@ -36,7 +36,7 @@ The default location for this configuration is in the `${jetty.home}/etc/jetty-d To modify it as part of the Jetty distribution, first enable the `deploy` module. Once it is enabled, you can edit these properties in either the `$JETTY_BASE/start.d/deploy.ini` or `$JETTY_BASE/start.ini` file, depending on link:#start-vs-startd[how your implementation is configured.] -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # --------------------------------------- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc index b8def9d08dff..ed6186170d1f 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc @@ -42,7 +42,7 @@ Tests have shown that webapps that took many seconds to scan and deploy can now In a standard Jetty distribution the quickstart module can be configured with the following command: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -jar $JETTY_HOME/start.jar --add-to-start=quickstart ---- @@ -51,7 +51,7 @@ $ java -jar $JETTY_HOME/start.jar --add-to-start=quickstart In a Maven project you add a dependency on the artifact `jetty-quickstart`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -90,7 +90,7 @@ The origin is either a descriptor eg web.xml,web-fragment.xml,override-web.xml f For xml validation each attribute must be unique, and therefore an integer counter is appended to each value. Some examples of elements with origin attribute information are: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -102,7 +102,7 @@ Some examples of elements with origin attribute information are: If a web application already has a context xml file, eg `webapps/myapp.xml` file, simply change the class in the `Configure` element. Otherwise, create a context xml file with the following information (in addition to the usual setting of contextPath, war etc): -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -131,7 +131,7 @@ Note that you will need to provide all necessary jetty jars on the command line This will unpack the war if necessary, and create the `quickstart-web.xml` before the first deployment: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ java -cp [jetty classpath] org.eclipse.jetty.quickstart.PreconfigureQuickStartWar myapp.war ---- @@ -158,7 +158,7 @@ Of course precompiling JSPs is an excellent way to improve the start time of a w As of Jetty 9.2 the Apache Jasper JSP implementation has been used and has been augmented to allow the TLD scan to be skipped. This can be done by adding a `context-param` to the `web.xml` file (this is done automatically by the Jetty Maven JSPC plugin): -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty.jsp.precompiled @@ -172,7 +172,7 @@ The Jetty `start.jar` mechanism is a very powerful and flexible mechanism for co However, this mechanism does take some time to build the `classpath`. The start.jar mechanism can be bypassed by using the `–dry-run` option to generate and reuse a complete command line to start Jetty at a later time: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ RUN=$(java -jar $JETTY_HOME/start.jar --dry-run) $ eval $RUN diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc index 0394a02f6517..69aedd15120d 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc @@ -22,7 +22,7 @@ To serve purely static content, the Jetty Deployment Descriptor XML concepts and the internal `ResourceHandler` can be used. Create a file called `scratch.xml` in the `${jetty.base}/webapps` directory and paste the following file contents in it. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc index b54dedf2a396..10ed0c4055cc 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc @@ -28,7 +28,7 @@ Jetty uses Jasper from http://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html By default the Jetty distribution enables the JSP link:#startup-modules[module], and by default, this module is set to Apache Jasper. -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- include::{SRCDIR}/jetty-home/src/main/resources/modules/jsp.mod[] ---- @@ -55,7 +55,7 @@ You can do this using a servlet context init-param called `org.eclipse.jetty.ser For example, suppose you have precompiled your JSPs with the custom package prefix of `com.acme`, then you would add the following lines to your `web.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty.servlet.jspPackagePrefix @@ -175,7 +175,7 @@ ____ You can make a copy of the link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] that ships with Jetty, apply your changes, and use it instead of the shipped version. The example below shows how to do this when using the Jetty Maven plugin. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -189,7 +189,7 @@ The example below shows how to do this when using the Jetty Maven plugin. If you are using the Jetty distribution, and you want to change the JSP settings for just one or a few of your webapps, copy the `{$jetty.home}/etc/webdefault.xml` file somewhere, modify it, and then use a link:#intro-jetty-configuration-contexts[context xml] file to set this file as the `defaultsDescriptor` for your webapp. Here's a snippet: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- /foo @@ -207,7 +207,7 @@ Another option is to add an entry for the JSPServlet to the `WEB-INF/web.xml` fi You may also add (but not remove) servlet-mappings. You can use the entry in link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] as a starting point. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jsp @@ -253,7 +253,7 @@ You can use the entry in link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] By default, Jetty does not enable async support for the JSP servlet. Configuring the JSP servlet for async is relatively easy - simply define the `async-supported` parameter as `true` in either your `webdefault.xml` or the `web.xml` for a specific context. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- jsp @@ -284,7 +284,7 @@ To take advantage of this efficiency enhancement, set up the link:#container-inc The link:#embedded-examples[Embedded Examples] section includes a link:#embedded-webapp-jsp[worked code example] of how to do this. Below is a snippet from the example: -[source, java, subs="{sub-order}"] +[source, java, ] ---- webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*taglibs.*\\.jar$"); ---- @@ -306,7 +306,7 @@ You can either put them into the lib directory for Apache `{$jetty.home}/lib/apa You should make your JSF jars dependencies of the plugin and _not_ the webapp itself. For example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/configuring/part.adoc b/jetty-documentation/src/main/asciidoc/configuring/part.adoc index c2d10f550d8c..3a8b7e12c4e4 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/part.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/part.adoc @@ -18,7 +18,7 @@ [[jetty-config-guide]] -= Jetty Configuration Guide +== Jetty Configuration Guide include::deploying/chapter.adoc[] include::contexts/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc index 9ba49f9bee05..c5da236814c7 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc @@ -35,7 +35,7 @@ Internally, configuring an authentication mechanism is done by setting an instan Below is an example taken from the link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB-INF/web.xml?h=release-9[jetty-test-webapp web.xml] that configures BASIC authentication: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- BASIC @@ -46,7 +46,7 @@ Below is an example taken from the link:{GITBROWSEURL}/tests/test-webapps/test-j The link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB-INF/web.xml?h=release-9[jetty-test-webapp web.xml] also includes commented out examples of other DIGEST and FORM configuration: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- FORM @@ -62,7 +62,7 @@ The link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB With FORM Authentication, you must also configure URLs of pages to generate a login form and handle errors. Below is a simple HTML form from the link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/logon.html?h=release-9[test webapp logon.html]: -[source, xml, subs="{sub-order}"] +[source, xml, ] ----

FORM Authentication demo

@@ -129,7 +129,7 @@ A LoginService is available to all web applications on a Server instance if you Such a definition would go into an xml file in your `${jetty.base}/etc` directory, e.g. `${jetty.base}/etc/my-realm.xml` and you would add this xml file to the execution path via `start.ini` or `start.d` (you may want to review the material in the link:#startup[Starting Jetty] chapter). Here's an example of an xml file that defines an in-memory type of LoginService called the link:{JDURL}/org/eclipse/jetty/security/HashLoginService.html[HashLoginService]: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -151,7 +151,7 @@ If you define more than one `LoginService` on a Server, you will need to specify You can do that by telling the context the name of the `LoginService`, or passing it the `LoginService` instance. Here's an example of doing both of these, using a link:#deployable-descriptor-file[context xml file]: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -176,7 +176,7 @@ Here's an example of doing both of these, using a link:#deployable-descriptor-fi Alternatively, you can define a `LoginService` for just a single web application. Here's how to define the same HashLoginService, but inside a link:#deployable-descriptor-file[context xml file]: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -254,7 +254,7 @@ guest: guest,read-only You configure the `HashLoginService` with a name and a reference to the location of the properties file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -268,7 +268,7 @@ You configure the `HashLoginService` with a name and a reference to the location You can also configure it to reload the configuration file when changes to it are detected. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -362,7 +362,7 @@ If you want to use obfuscated, MD5 hashed or encrypted passwords the `pwd` colum You define a `JDBCLoginService` with the name of the realm and the location of the properties file describing the database: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- Test JDBC Realm @@ -380,7 +380,7 @@ Until Servlet 3.1, role-based authorization could define: * Access granted to a set of named roles: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -396,7 +396,7 @@ Until Servlet 3.1, role-based authorization could define: * Access totally forbidden, regardless of role: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -410,7 +410,7 @@ Until Servlet 3.1, role-based authorization could define: * Access granted to a user in any of the roles defined in the effective `web.xml`. This is indicated by the special value of `*` for the `` of a `` in the ``: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -428,7 +428,7 @@ Servlet 3.1 introduced an additional authorization: * Access granted to any user who is authenticated, regardless of roles. This is indicated by the special value of `**` for the `` of a `` in the ``: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -445,7 +445,7 @@ Additionally, when configuring your security constraints you can protect various This is done by adding the method you want to protect as a `` in the ``. You can then define roles that should be able to perform these protected methods in an ``: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -470,7 +470,7 @@ This is especially helpful if authorization needs change over time and need upda To do this, we add a section for security constraints into the context xml file for our web app as part of the `securityHandler`. In the example below, a `HashLoginService` is defined with authorization being granted too `foo/*` paths to users with the `admin` and `manager` roles. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -512,7 +512,7 @@ If roles changed in the future, administrators could easily change this context In addition to the distribution, security can be defined as part of an embedded implementation as well. Below is an example which, like the one above, sets up a server with a `HashLoginService` and adds security constraints to restrict access based on roles. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc index 57a21870d8fe..52d0dc41e94d 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc @@ -35,7 +35,7 @@ There exists 2 system properties that will adjust the default maximum form sizes Used from command line as such: -[source,shell,subs="{sub-order}"] +[source,shell,] ---- $ java -Dorg.eclipse.jetty.server.Request.maxFormKeys=200 -jar ... @@ -45,7 +45,7 @@ $ java -Dorg.eclipse.jetty.server.Request.maxFormContentSize=400000 -jar ... Or via Java code (make sure you do this before you instantiate any `ContextHandler`, `ServletContextHandler`, or `WebAppContext`) -[source,java,subs="{sub-order}"] +[source,java,] ---- System.setProperty(ContextHandler.MAX_FORM_KEYS_KEY, "200"); System.setProperty(ContextHandler.MAX_FORM_CONTENT_SIZE_KEY, "400000"); @@ -56,7 +56,7 @@ System.setProperty(ContextHandler.MAX_FORM_CONTENT_SIZE_KEY, "400000"); To configure the form limits for a single web application, the context handler (or webappContext) instance must be configured using the following methods: -[source,java,subs="{sub-order}"] +[source,java,] ---- ContextHandler.setMaxFormContentSize(int maxSizeInBytes); ContextHandler.setMaxFormKeys(int formKeys); @@ -65,7 +65,7 @@ ContextHandler.setMaxFormKeys(int formKeys); These methods may be called directly when embedding Jetty, but more commonly are configured from a context XML file or WEB-INF/jetty-web.xml file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc index 9e4c311dc92b..83b474d50fef 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc @@ -54,7 +54,7 @@ Let's look at an example. Configure a Jetty `org.eclipse.jetty.jaas.JAASLoginService` to match the `` in your `web.xml` file. For example, if the `web.xml` contains a realm called "Test JAAS Realm" like so: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- FORM @@ -68,7 +68,7 @@ Configure a Jetty `org.eclipse.jetty.jaas.JAASLoginService` to match the ` Test JAAS Realm @@ -87,7 +87,7 @@ You can declare your `JAASLoginService` in a couple of different ways: 1. If you have more than one webapp that you would like to use the same security infrastructure, then you can declare your `JAASLoginService` in a top-level Jetty xml file as a bean that is added to the `org.eclipse.jetty.server.Server`. An example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -104,7 +104,7 @@ An example: ---- 2. Alternatively, you can use a `JAASLoginService` with just a specific webapp by creating a link:#deployable-descriptor-file[context xml] file for the webapp, and specifying the `JAASLoginService` in it: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -151,7 +151,7 @@ There are 2 aspects to this: To accomplish the above, use the Jetty link:#startup-overview[startup] link:#startup-modules[modules mechanism] to add the JAAS link:#startup-modules[module]: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... java -jar start.jar --add-to-start=jaas .... @@ -185,7 +185,7 @@ However, should you need to, you can configure: Here's an example of setting each of these (to their default values): -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- Test JAAS Realm @@ -376,7 +376,7 @@ This callback gives you access to all parameters that were passed in the form su To use it, in the `login()` method of your custom login module, add the `RequestParameterCallback` to the list of callback handlers the login module uses, tell it which params you are interested in, and then get the value of the parameter back. Here is an example: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public class FooLoginModule extends AbstractLoginModule diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc index 96e7f9acb5e4..77466d7b2619 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc @@ -53,7 +53,7 @@ It also assumes you are using `start.ini` to configure your server features. 1. Create a base directory anywhere. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [/home/user]$ mkdir my-base [/home/user]$ cd my-base @@ -61,7 +61,7 @@ It also assumes you are using `start.ini` to configure your server features. 2. Add the modules for SSL, HTTP, and webapp deployment. Adding modules in this way will append the associated module properties to the `${jetty.base}/start.ini` file. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --add-to-start=http,https,deploy @@ -82,7 +82,7 @@ INFO : Base directory was modified .... 3. Look at your directory. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ ls -la total 20 @@ -94,20 +94,20 @@ drwxrwxr-x 2 user group 4096 Oct 8 06:55 webapps/ .... 4. Copy your WAR files into webapps. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ ls -la [my-base]$ cp ~/code/project/target/gadget.war webapps/ .... 5. Copy your keystore into place. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ cp ~/code/project/keystore etc/keystore .... 6. Edit the `start.ini` to configure your SSL settings. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ cat start.ini .... @@ -160,7 +160,7 @@ http.timeout=30000 Look at the configuration you have at this point. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-config @@ -233,7 +233,7 @@ Jetty Active XMLs: Now start Jetty. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar 2013-10-08 07:06:55.837:INFO:oejs.Server:main: jetty-{VERSION} @@ -261,7 +261,7 @@ Notice that you have `--module=` here and there; you have wrapped up the g You can see the list of modules: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-modules @@ -448,7 +448,7 @@ While you can manage the list of active modules yourself, it is much easier to e If you want to start using a new module: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --add-to-start=https .... @@ -482,7 +482,7 @@ For more information on the `start.jar` in 9.1, see xref:start-jar[]. 1. Download and unpack Jetty into `/home/user/jetty-distribution-{VERSION}`. 2. Go to your base directory and just use the distribution, no editing. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar .... @@ -506,7 +506,7 @@ By default, the module system keeps things sane, and transitively includes all d You can see what the configuration looks like, after all of the modules are resolved, without starting Jetty via: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --list-config .... @@ -518,7 +518,7 @@ Use the `--list-config` to see the configuration. Notice that only a subset of the JARs from the distribution are in use. The modules you have enabled determine that subset. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [my-base]$ java -jar ~/jetty-distribution-{VERSION}/start.jar --list-config .... diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc index 76e5fd2238ce..80da659ad0fc 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc @@ -37,7 +37,7 @@ These may look like ===== OpenID Provider Configuration To enable OpenID support, you first need to activate the `openid` module in your implementation. -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- java -jar {JETTY_HOME}/start.jar --add-to-start=openid ---- @@ -55,7 +55,7 @@ To set the error page, an init param is set at `"org.eclipse.jetty.security.open Example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- OPENID @@ -73,27 +73,27 @@ Example: If the OpenID Provider allows metadata discovery then you can use. -[source, java, subs="{sub-order}"] +[source, java, ] ---- OpenIdConfiguration openIdConfig = new OpenIdConfiguration(ISSUER, CLIENT_ID, CLIENT_SECRET); ---- Otherwise you can manually enter the necessary information: -[source, java, subs="{sub-order}"] +[source, java, ] ---- OpenIdConfiguration openIdConfig = new OpenIdConfiguration(ISSUER, TOKEN_ENDPOINT, AUTH_ENDPOINT, CLIENT_ID, CLIENT_SECRET); ---- ===== Configuring an `OpenIdLoginService` -[source, java, subs="{sub-order}"] +[source, java, ] ---- LoginService loginService = new OpenIdLoginService(openIdConfig); securityHandler.setLoginService(loginService); ---- ===== Configuring an `OpenIdAuthenticator` with `OpenIdConfiguration` and Error Page Redirect -[source, java, subs="{sub-order}"] +[source, java, ] ---- Authenticator authenticator = new OpenIdAuthenticator(openIdConfig, "/error"); securityHandler.setAuthenticator(authenticator); @@ -106,7 +106,7 @@ servletContextHandler.setSecurityHandler(securityHandler); Claims about the user can be found using attributes on the session attribute `"org.eclipse.jetty.security.openid.claims"`, and the full response containing the OAuth 2.0 Access Token can be found with the session attribute `"org.eclipse.jetty.security.openid.response"`. Example: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Map claims = (Map)request.getSession().getAttribute("org.eclipse.jetty.security.openid.claims"); String userId = claims.get("sub"); @@ -127,7 +127,7 @@ If security roles are required they can be configured through a wrapped `LoginSe This can be configured in XML through `etc/openid-baseloginservice.xml` in the Distribution, or in embedded code using the constructor for the `OpenIdLoginService`. -[source, java, subs="{sub-order}"] +[source, java, ] ---- LoginService wrappedLoginService = ...; // Optional LoginService for Roles LoginService loginService = new OpenIdLoginService(openIdConfig, wrappedLoginService); diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc index 0f5172fbd9e8..41c77cccdb1d 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc @@ -32,7 +32,7 @@ The class `org.eclipse.jetty.util.security.Password` can be used to generate all Run it without arguments to see usage instructions: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -cp lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password @@ -42,7 +42,7 @@ If the password is ?, the user will be prompted for the password For example, to generate a secured version of the password `password` for the user `username`: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -cp ../lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password username password 2017-12-13 11:19:27.928:INFO::main: Logging initialized @95ms to org.eclipse.jetty.util.log.StdErrLog @@ -55,7 +55,7 @@ CRYPT:usjRS48E8ZADM If using a external tool to create/verify the MD5 hash (such as `md5sum` or `md5`), be sure to verify a carriage return (CR) or new line is not added. For example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... //With a CR included $ echo password | md5sum @@ -71,7 +71,7 @@ ____ When using the `DIGEST` method in tandem with an MD5 hash, you must hash the entire `user:realm:password` string or you will encounter issues with authenticating. ____ -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -cp ../lib/jetty-util-9.4.7.v20170914.jar org.eclipse.jetty.util.security.Password username username:realm:password 2017-12-13 11:34:33.263:INFO::main: Logging initialized @97ms to org.eclipse.jetty.util.log.StdErrLog @@ -106,7 +106,7 @@ ____ You can also use obfuscated passwords in Jetty xml files where a plain text password is required. Here's an example setting the password for a JDBC Datasource with obfuscation: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc index 5f0fce6ccb63..7938d9506111 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc @@ -80,7 +80,7 @@ ____ An application is free to implement its own Alias checking. Alias Checkers can be installed in a context via the following XML used in a context deployer file or `WEB-INF/jetty-web.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc index 5d8f862e65d5..9b92351d8019 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc @@ -27,7 +27,7 @@ This page presents several options to access port 80 as a non-root user, includi On some Linux systems you can use the _ipchains REDIRECT_ mechanism to redirect from one port to another inside the kernel (if `ipchains` is not available, then `iptables` usually is): -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # /sbin/ipchains -I input --proto TCP --dport 80 -j REDIRECT 8080 ---- @@ -44,7 +44,7 @@ On many Linux systems you can use the `iptables` REDIRECT mechanism to redirect You need to add something like the following to the startup scripts or your firewall rules: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ---- @@ -70,7 +70,7 @@ The `http.mod` is enabled by default in the distribution, while the link:#quicks . Ensure that you have link:#quickstart-changing-jetty-port[changed the http port] to 80 (and link:#quickstart-changing-https-port[changed the https port] to 443 if you are using SSL). . Enable the `setuid.mod` module: + -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # java -jar start.jar --add-to-start=setuid ---- @@ -88,7 +88,7 @@ Otherwise. this configuration is in the `${jetty.base}start.ini` file. Below are the lines to configure: + -[source, text, subs="{sub-order}"]] +[source, text, ]] ---- jetty.startServerAsPrivileged=false jetty.username=foo @@ -106,7 +106,7 @@ This code is hosted as part of the https://github.com/eclipse/jetty.toolchain[Je You can find the source code in the https://github.com/eclipse/jetty.toolchain/tree/master/jetty-setuid[eclipse/jetty.toolchain/jetty-setuid] project. Build it locally, which will produce a native library appropriate for the operating system: + -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # mvn clean install ---- @@ -118,7 +118,7 @@ You may want copy this file into your Jetty distribution's lib directory. . Start Jetty as the `root` user in your base directory, providing the location of the native library to Java. Below is an example of how to do it from the command line, assuming you are in the link:#demo-webapps-base[demo-base] directory: + -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- # sudo java -Djava.library.path=libsetuid-linux -jar $JETTY_HOME/start.jar ---- @@ -129,7 +129,7 @@ Below is an example of how to do it from the command line, assuming you are in t Solaris 10 provides a User Rights Management framework that can permit users and processes superuser-like abilities: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- usermod -K defaultpriv=basic,net_privaddr myself ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc index 6d816010e1f8..b85a875543fb 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc @@ -29,7 +29,7 @@ There is a substantial amount of configuration and testing required to enable th To run with SPNEGO enabled the following command line options are required: -[source,screen, subs="{sub-order}"] +[source,screen, ] ---- -Djava.security.krb5.conf=/path/to/jetty/etc/krb5.ini \ -Djava.security.auth.login.config=/path/to/jetty/etc/spnego.conf \ @@ -38,7 +38,7 @@ To run with SPNEGO enabled the following command line options are required: For debugging the SPNEGO authentication the following options are very helpful: -[source,screen, subs="{sub-order}"] +[source,screen, ] ---- -Dorg.eclipse.jetty.LEVEL=debug \ -Dsun.security.spnego.debug=all @@ -47,7 +47,7 @@ For debugging the SPNEGO authentication the following options are very helpful: SPNEGO Authentication must be enabled in the webapp in the following way. The name of the role will be different for your network. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -75,7 +75,7 @@ A corresponding `UserRealm` needs to be created either programmatically if embed This is what the configuration within a Jetty xml file would look like. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -91,7 +91,7 @@ This is what the configuration within a Jetty xml file would look like. This is what the configuration within a context xml file would look like. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -124,14 +124,14 @@ To do this use a process similar to this: On the Windows Active Domain Controller run: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ setspn -A HTTP/linux.mortbay.org ADUser ---- To create the keytab file use the following process: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ ktpass -out c:\dir\krb5.keytab -princ HTTP/linux.mortbay.org@MORTBAY.ORG -mapUser ADUser -mapOp set -pass ADUserPWD -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL ---- diff --git a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc index b53fe52cffae..0e5454218fd8 100644 --- a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc +++ b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc @@ -23,7 +23,7 @@ The Ant Jetty plugin is a part of Jetty 9 under the `jetty-ant` module. This plugin makes it possible to start a Jetty web server directly from the Ant build script, and to embed the Jetty web server inside your build process. Its purpose is to provide almost the same functionality as the Jetty plugin for Maven: dynamic application reloading, working directly on web application sources, and tightly integrating with the build system. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -51,7 +51,7 @@ Now you're ready to edit or create your Ant `build.xml` file. Begin with an empty `build.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -60,7 +60,7 @@ Begin with an empty `build.xml`: Add a `` that imports all available Jetty tasks: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -76,7 +76,7 @@ Add a `` that imports all available Jetty tasks: Now you are ready to add a new target for running Jetty: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -100,7 +100,7 @@ This is the minimal configuration you need. You can now start Jetty on the defau At the command line enter: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > ant jetty.run .... @@ -113,7 +113,7 @@ ports and connectors::: To configure the port that Jetty starts on you need to define a connector. First you need to configure a `` for the Connector class and then define the connector in the Jetty tags: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -148,7 +148,7 @@ login services::: If your web application requires authentication and authorization services, you can configure these on the Jetty container. Here's an example of how to set up an link:{JDURL}/org/eclipse/jetty/security/HashLoginService.html[org.eclipse.jetty.security.HashLoginService]: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -176,7 +176,7 @@ request log::: The `requestLog` option allows you to specify a request logger for the Jetty instance. You can either use the link:{JDURL}/org/eclipse/jetty/server/NCSARequestLog.html[org.eclipse.jetty.server.NCSARequestLog] class, or supply the name of your custom class: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -197,7 +197,7 @@ request log::: temporary directory::: You can configure a directory as a temporary file store for uses such as expanding files and compiling JSPs by supplying the `tempDirectory` option: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -220,7 +220,7 @@ other context handlers::: You can specify these other context handlers using the `` element. You need to supply a `` for it before you can use it: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -249,7 +249,7 @@ system properties::: As a convenience, you can configure system properties by using the `` element. Be aware that, depending on the purpose of the system property, setting it from within the Ant execution may mean that it is evaluated too late, as the JVM evaluates some system properties on entry. + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -273,7 +273,7 @@ system properties::: jetty XML file::: If you have a lot of configuration to apply to the Jetty container, it can be more convenient to put it into a standard Jetty XML configuration file and have the Ant plugin apply it before starting Jetty: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -297,7 +297,7 @@ scanning for changes::: The `scanIntervalSeconds` option controls how frequently the `` task scans your web application/WAR file for changes. The default value of `0` disables scanning. Here's an example where Jetty checks for changes every five seconds: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -323,7 +323,7 @@ stopping::: The `` task sends this stop message. You can also optionally provide a `stopWait` value (in seconds), which is the length of time the `` task waits for confirmation that the stop succeeded: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -348,7 +348,7 @@ stopping::: + To stop jetty via Ant, enter: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > ant jetty.stop .... @@ -361,7 +361,7 @@ execution without pausing ant::: This defaults to `false`. For `true`, Ant continues to execute after starting Jetty. If Ant exits, so does Jetty. Understand that this option does _not_ fork a new process for Jetty. + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -385,7 +385,7 @@ execution without pausing ant::: Add a `` for the `org.eclipse.jetty.ant.AntWebAppContext` class with name __webApp__, then add a `` element to `` to describe your web application. The following example deploys a web application that is expanded in the local directory `foo/` to context path ` / `: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -412,7 +412,7 @@ deploying a WAR file::: It is not necessary to expand the web application into a directory. It is fine to deploy it as a WAR file: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -438,7 +438,7 @@ deploying a WAR file::: deploying more than one web application::: You can also deploy more than one web application: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -473,7 +473,7 @@ class, you can configure it by adding attributes of the same name Here's an example that specifies the location of the `web.xml` file (equivalent to method link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setDescriptor%28java.lang.String%29[`AntWebAppContext.setDescriptor()`]) and the web application's temporary directory (equivalent to method link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setTempDirectory%28java.io.File%29[`AntWebAppContext.setTempDirectory()`]): -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -501,7 +501,7 @@ Other extra configuration options for the AntWebAppContext include: extra classes and Jars::: If your web application's classes and Jars do not reside inside `WEB-INF` of the resource base directory, you can use the and elements to tell Ant where to find them. Here's an example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -538,7 +538,7 @@ context attributes::: For convenience, the Ant plugin permits you to configure these directly in the build file. Here's an example: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -567,7 +567,7 @@ context attributes::: `jetty-env.xml` file::: If you are using features such as link:#configuring_jndi[JNDI] with your web application, you may need to configure a link:#using_jndi[`WEB-INF/jetty-env.xml`] file to define resources. If the structure of your web application project is such that the source of `jetty-env.xml` file resides somewhere other than `WEB-INF`, you can use the `jettyEnvXml` attribute to tell Ant where to find it: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -596,7 +596,7 @@ context XML file::: In this case, you can use a standard context XML configuration file which the Ant plugin applies to your web application before it is deployed. Be aware that the settings from the context XML file _override_ those of the attributes and nested elements you defined in the build file. + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- project name="Jetty-Ant integration test" basedir="."> diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc index eee548a7c00a..e01f6114ca36 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc @@ -24,7 +24,7 @@ The simple way to perform a HTTP request is the following: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.GET("http://domain.com/path?query"); ---- @@ -36,7 +36,7 @@ The content length is limited by default to 2 MiB; for larger content see xref:h If you want to customize the request, for example by issuing a `HEAD` request instead of a `GET`, and simulating a browser user agent, you can do it in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path?query") .method(HttpMethod.HEAD) @@ -46,7 +46,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/path?query") This is a shorthand for: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Request request = httpClient.newRequest("http://domain.com/path?query"); request.method(HttpMethod.HEAD); @@ -59,7 +59,7 @@ When the request object is customized, you call `request.send()` that produces t Simple `POST` requests also have a shortcut method: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.POST("http://domain.com/entity/1") .param("p", "value") @@ -73,7 +73,7 @@ Following redirects is a feature that you can enable/disable on a per-request ba File uploads also require one line, and make use of JDK 7′s `java.nio.file` classes: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -83,7 +83,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") It is possible to impose a total timeout for the request/response conversation using the `Request.timeout(...)` method as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path?query") .timeout(5, TimeUnit.SECONDS) @@ -123,7 +123,7 @@ When the request and the response are both fully processed, the thread that fini A simple asynchronous `GET` request that discards the response content can be written in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.newRequest("http://domain.com/path") .send(new Response.CompleteListener() @@ -140,7 +140,7 @@ Method `Request.send(Response.CompleteListener)` returns `void` and does not blo You can write the same code using JDK 8′s lambda expressions: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.newRequest("http://domain.com/path") .send(result -> { /* Your logic here */ }); @@ -148,7 +148,7 @@ httpClient.newRequest("http://domain.com/path") You can impose a total timeout for the request/response conversation in the same way used by the synchronous API: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.newRequest("http://domain.com/path") .timeout(3, TimeUnit.SECONDS) @@ -159,7 +159,7 @@ The example above will impose a total timeout of 3 seconds on the request/respon The HTTP client APIs use listeners extensively to provide hooks for all possible request and response events, and with JDK 8′s lambda expressions they are even more fun to use: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.newRequest("http://domain.com/path") // Add request hooks @@ -191,7 +191,7 @@ Jetty's HTTP client provides a number of utility classes off the shelf to handle You can provide request content as `String`, `byte[]`, `ByteBuffer`, `java.nio.file.Path`, `InputStream`, and provide your own implementation of `org.eclipse.jetty.client.api.ContentProvider`. Here’s an example that provides the request content using `java.nio.file.Paths`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -201,7 +201,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") This is equivalent to using the `PathContentProvider` utility class: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -211,7 +211,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") Alternatively, you can use `FileInputStream` via the `InputStreamContentProvider` utility class: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -223,7 +223,7 @@ Since `InputStream` is blocking, then also the send of the request will block if If you have already read the content in memory, you can pass it as a `byte[]` using the `BytesContentProvider` utility class: -[source, java, subs="{sub-order}"] +[source, java, ] ---- byte[] bytes = ...; ContentResponse response = httpClient.newRequest("http://domain.com/upload") @@ -234,7 +234,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") If the request content is not immediately available, but your application will be notified of the content to send, you can use `DeferredContentProvider` in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- DeferredContentProvider content = new DeferredContentProvider(); httpClient.newRequest("http://domain.com/upload") @@ -270,7 +270,7 @@ This allows fine-grained control of the request/response conversation: for examp Another way to provide request content is by using an `OutputStreamContentProvider`, which allows applications to write request content when it is available to the `OutputStream` provided by `OutputStreamContentProvider`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- OutputStreamContentProvider content = new OutputStreamContentProvider(); @@ -306,7 +306,7 @@ The first way is to buffer the response content in memory; this is done when usi If you want to control the length of the response content (for example limiting to values smaller than the default of 2 MiB), then you can use a `org.eclipse.jetty.client.util.FutureResponseListener` in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Request request = httpClient.newRequest("http://domain.com/path"); @@ -322,7 +322,7 @@ If the response content length is exceeded, the response will be aborted, and an If you are using the asynchronous APIs (see xref:http-client-async[]), you can use the `BufferingResponseListener` utility class: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.newRequest("http://domain.com/path") // Buffer response content up to 8 MiB @@ -344,7 +344,7 @@ The second way is the most efficient (because it avoids content copies) and allo In the example below, `Response.Listener.Adapter` is a class that implements both `Response.ContentListener` and `Response.CompleteListener` and can be passed to `Request.send()`. Jetty's HTTP client will invoke the `onContent()` method zero or more times (until there is content), and finally invoke the `onComplete()` method. -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient .newRequest("http://domain.com/path") .send(new Response.Listener.Adapter() @@ -359,7 +359,7 @@ httpClient .newRequest("http://domain.com/path") The third way allows you to wait for the response and then stream the content using the `InputStreamResponseListener` utility class: -[source, java, subs="{sub-order}"] +[source, java, ] ---- InputStreamResponseListener listener = new InputStreamResponseListener(); diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc index 3e5dfcc9aa1d..b6827f159801 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc @@ -23,7 +23,7 @@ Jetty's HTTP client supports the `BASIC` and `DIGEST` authentication mechanisms You can configure authentication credentials in the HTTP client instance as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- URI uri = new URI("http://domain.com/secure"); String realm = "MyRealm"; @@ -61,14 +61,14 @@ The application does not receive events related to the response with code 401, t Successful authentications are cached, but it is possible to clear them in order to force authentication again: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.getAuthenticationStore().clearAuthenticationResults(); ---- Authentications may be preempted to avoid the additional roundtrip due to the server challenge in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- AuthenticationStore auth = httpClient.getAuthenticationStore(); URI uri = URI.create("http://domain.com/secure"); @@ -79,7 +79,7 @@ In this way, requests for the given URI are enriched by `HttpClient` immediately It is also possible to preempt the authentication for a single request only, in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- URI uri = URI.create("http://domain.com/secure"); Authentication.Result authn = new BasicAuthentication.BasicResult(uri, "username", "password") diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc index 53fc289b324b..230a26e99e6a 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc @@ -25,7 +25,7 @@ When new requests are made, the cookie store is consulted and if there are match Applications can programmatically access the cookie store to find the cookies that have been set: -[source, java, subs="{sub-order}"] +[source, java, ] ---- CookieStore cookieStore = httpClient.getCookieStore(); List cookies = cookieStore.get(URI.create("http://domain.com/path")); @@ -33,7 +33,7 @@ List cookies = cookieStore.get(URI.create("http://domain.com/path")) Applications can also programmatically set cookies as if they were returned from a HTTP response: -[source, java, subs="{sub-order}"] +[source, java, ] ---- CookieStore cookieStore = httpClient.getCookieStore(); HttpCookie cookie = new HttpCookie("foo", "bar"); @@ -45,7 +45,7 @@ cookieStore.add(URI.create("http://domain.com"), cookie); Cookies may be added only for a particular request: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path") .cookie(new HttpCookie("foo", "bar")) @@ -54,7 +54,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/path") You can remove cookies that you do not want to be sent in future HTTP requests: -[source, java, subs="{sub-order}"] +[source, java, ] ---- CookieStore cookieStore = httpClient.getCookieStore(); URI uri = URI.create("http://domain.com"); @@ -65,14 +65,14 @@ for (HttpCookie cookie : cookies) If you want to totally disable cookie handling, you can install a `HttpCookieStore.Empty` instance in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.setCookieStore(new HttpCookieStore.Empty()); ---- You can enable cookie filtering by installing a cookie store that performs the filtering logic in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.setCookieStore(new GoogleOnlyCookieStore()); @@ -94,14 +94,14 @@ Jetty is compliant with link:https://tools.ietf.org/html/rfc6265[RFC6265], and a Previously, Version=1 cookies defined in link:https://tools.ietf.org/html/rfc2109[RFC2109] (and continued in link:https://tools.ietf.org/html/rfc2965[RFC2965]) allowed for special/reserved characters to be enclosed within double quotes when declared in a `Set-Cookie` response header: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Set-Cookie: foo="bar;baz";Version=1;Path="/secur" ---- This was added to the HTTP Response header as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Cookie cookie = new Cookie("foo", "bar;baz"); cookie.setPath("/secur"); @@ -111,7 +111,7 @@ response.addCookie(cookie); The introduction of RFC6265 has rendered this approach no longer possible; users are now required to encode cookie values that use these special characters. This can be done utilizing `javax.servlet.http.Cookie` as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Cookie cookie = new Cookie("foo", URLEncoder.encode("bar;baz", "utf-8")); ---- diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc index 8c1e949e1566..173f9ec6df25 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc @@ -54,7 +54,7 @@ it provides you with the responses to the requests you make. In order to use `HttpClient`, you must instantiate it, configure it, and then start it: -[source, java, subs="{sub-order}"] +[source, java, ] ---- // Instantiate HttpClient HttpClient httpClient = new HttpClient(); @@ -78,7 +78,7 @@ When you create a `HttpClient` instance using the parameterless constructor, you In order to perform HTTPS requests, you should create first a link:{JDURL}/org/eclipse/jetty/util/ssl/SslContextFactory.Client.html[`SslContextFactory.Client`], configure it, and pass it to the `HttpClient` constructor. When created with a `SslContextFactory`, the `HttpClient` will be able to perform both HTTP and HTTPS requests to any domain. -[source, java, subs="{sub-order}"] +[source, java, ] ---- // Instantiate and configure the SslContextFactory SslContextFactory.Client sslContextFactory = new SslContextFactory.Client(); @@ -97,7 +97,7 @@ httpClient.start(); It is recommended that when your application stops, you also stop the `HttpClient` instance (or instances) that you are using. -[source, java, subs="{sub-order}"] +[source, java, ] ---- httpClient.stop(); ---- diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc index 96844a29f8f7..02f8bb1995c5 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc @@ -26,7 +26,7 @@ Other implementations may be written by subclassing `ProxyConfiguration.Proxy`. The following is a typical configuration: -[source, java, subs="{sub-order}"] +[source, java, ] ---- ProxyConfiguration proxyConfig = httpClient.getProxyConfiguration(); HttpProxy proxy = new HttpProxy("proxyHost", proxyPort); @@ -51,7 +51,7 @@ Jetty's HTTP client support proxy authentication in the same way it supports lin In the example below, the proxy requires Basic authentication, but the server requires Digest authentication, and therefore: -[source, java, subs="{sub-order}"] +[source, java, ] ---- URI proxyURI = new URI("http://proxy.net:8080"); URI serverURI = new URI("http://domain.com/secure"); diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc index 173d3528c6e3..0a838fc514aa 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc @@ -30,7 +30,7 @@ This allows them to write their logic against a high-level API that hides the de The most common protocol format is HTTP/1.1, a text-based protocol with lines separated by `\r\n`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- GET /index.html HTTP/1.1\r\n Host: domain.com\r\n @@ -40,7 +40,7 @@ Host: domain.com\r\n However, the same request can be made using FastCGI, a binary protocol: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- x01 x01 x00 x01 x00 x08 x00 x00 x00 x01 x01 x00 x00 x00 x00 x00 @@ -58,7 +58,7 @@ Similarly, HTTP/2 is a binary protocol that transports the same information in a HTTP/1.1 is the default transport. -[source, java, subs="{sub-order}"] +[source, java, ] ---- // No transport specified, using default. HttpClient client = new HttpClient(); @@ -67,7 +67,7 @@ client.start(); If you want to customize the HTTP/1.1 transport, you can explicitly configure `HttpClient` in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- int selectors = 1; HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP(selectors); @@ -82,7 +82,7 @@ The example above allows you to customize the number of NIO selectors that `Http The HTTP/2 transport can be configured in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- HTTP2Client h2Client = new HTTP2Client(); h2Client.setSelectors(1); @@ -100,7 +100,7 @@ client.start(); The FastCGI transport can be configured in this way: -[source, java, subs="{sub-order}"] +[source, java, ] ---- int selectors = 1; String scriptRoot = "/var/www/wordpress"; diff --git a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc index 22107b3651b1..4ce48e9a2ff5 100644 --- a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc +++ b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc @@ -24,7 +24,7 @@ The suspend/resume style is used when a servlet and/or filter is used to generate the response after an asynchronous wait that is terminated by an asynchronous handler. Typically a request attribute is used to pass results and to indicate if the request has already been suspended. -[source, java, subs="{sub-order}"] +[source, java, ] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { @@ -69,7 +69,7 @@ This style is very good when the response needs the facilities of the servlet co The suspend/complete style is used when an asynchronous handler is used to generate the response: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { diff --git a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc index 644354e47fc3..bd9478335dd3 100644 --- a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc +++ b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc @@ -33,7 +33,7 @@ The link:{JDURL}/org/eclipse/jetty/continuation/ContinuationSupport.html[Continu To suspend a request, the suspend method can be called on the continuation: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { @@ -62,7 +62,7 @@ If an exception is desirable (to bypass code that is unaware of continuations an Once an asynchronous event has occurred, the continuation can be resumed: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void myAsyncCallback(Object results) { @@ -80,7 +80,7 @@ Continuation resume is analogous to Servlet 3.0 `AsyncContext.dispatch()`. As an alternative to resuming a request, an asynchronous handler may write the response itself. After writing the response, the handler must indicate the request handling is complete by calling the complete method: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void myAsyncCallback(Object results) { @@ -95,7 +95,7 @@ After complete is called, the container schedules the response to be committed An application may monitor the status of a continuation by using a ContinuationListener: -[source, java, subs="{sub-order}"] +[source, java, ] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc index ad4784e22897..368725afe361 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc @@ -42,7 +42,7 @@ This example is very similar to the one in the previous section, although it ena As of jetty-9.2, we use the JSP engine from Apache, which relies on a Servlet Specification 3.1 style `ServletContainerInitializer` to initialize itself. To get this to work with Jetty, you need to enable annotations processing, as shown in this example code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java[] @@ -56,7 +56,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project, you will need the following Maven dependencies declared, in addition to those from the previous section: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc index 797a4aab6ee1..7d1b5ce0d8e1 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc @@ -80,7 +80,7 @@ The handler sets the response status, content-type, and marks the request as han To allow a Handler to handle HTTP requests, you must add it to a Server instance. The following code from OneHandler.java shows how a Jetty server can use the HelloWorld handler: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java[] ---- @@ -132,7 +132,7 @@ Thus when the `ContextHandler` handles the request, it does so within the scope The link:{JDURL}/org/eclipse/jetty/embedded/FileServer.html[FileServer example] shows how you can use a `ResourceHandler` to serve static content from the current working directory: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java[] ---- @@ -149,7 +149,7 @@ However, often when embedding Jetty it is desirable to explicitly instantiate an The following example, link:{JDURL}/org/eclipse/jetty/embedded/OneConnector.html[OneConnector.java], instantiates, configures, and adds a single HTTP connector instance to the server: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java[] ---- @@ -173,7 +173,7 @@ It uses standard path mappings to match a Servlet to a request; sets the request The link:{JDURL}/org/eclipse/jetty/embedded/MinimalServlets.html[MinimalServlets example] creates a `ServletHandler` instance and configures a single HelloServlet: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java[] ---- @@ -191,7 +191,7 @@ Requests that match the context path have their path methods updated accordingly The following link:{JDURL}/org/eclipse/jetty/embedded/OneContext.html[OneContext example] shows a context being established that wraps the link:{JDURL}/org/eclipse/jetty/embedded/HelloHandler.html[HelloHandler]: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java[] ---- @@ -199,7 +199,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/One When many contexts are present, you can embed a `ContextHandlerCollection` to efficiently examine a request URI to then select the matching `ContextHandler`(s) for the request. The link:{JDURL}/org/eclipse/jetty/embedded/ManyContexts.html[ManyContexts example] shows how many such contexts you can configure: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java[] ---- @@ -209,7 +209,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/Man A link:{JDURL}/org/eclipse/jetty/servlet/ServletContextHandler.html[`ServletContextHandler`] is a specialization of `ContextHandler` with support for standard sessions and Servlets. The following link:{JDURL}/org/eclipse/jetty/embedded/OneServletContext.html[OneServletContext example] instantiates a link:{JDURL}/org/eclipse/jetty/servlet/DefaultServlet.html[`DefaultServlet`] to server static content from /tmp/ and a `DumpServlet` that creates a session and dumps basic details about the request: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java[] ---- @@ -220,7 +220,7 @@ A link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html[`WebAppContext`] is a The following link:{JDURL}/org/eclipse/jetty/embedded/OneWebApp.html[OneWebApp example] configures the Jetty test webapp. Web applications can use resources the container provides, and in this case a `LoginService` is needed and also configured: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java[] ---- @@ -241,7 +241,7 @@ The link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedd * link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-lowresources.xml[jetty-lowresources.xml] * link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/config/etc/test-realm.xml[test-realm.xml] -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc index 9f39dacd0c86..3957515867b2 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc @@ -24,7 +24,7 @@ It is perfectly suitable for test cases where you need an actual web server to o Note that this does not have any logic for caching of files, either within the server or setting the appropriate headers on the response. It is simply a few lines that illustrate how easy it is to serve out some files. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java[] @@ -38,7 +38,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc index ecd85369cac5..5bdf48a86c0d 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc @@ -22,7 +22,7 @@ This example shows how to configure Jetty to use multiple connectors, specifically so it can process both http and https requests. Since the meat of this example is the server and connector configuration it only uses a simple HelloHandler but this example should be easily merged with other examples like those deploying servlets or webapps. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java[] @@ -38,7 +38,7 @@ See link:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join To use this example in your project you will need the following Maven dependencies declared. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc index f322c4875d14..52505dcef17d 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc @@ -24,7 +24,7 @@ Note that this is strictly a servlet, not a servlet in the context of a web appl This is purely just a servlet deployed and mounted on a context and able to process requests. This example is excellent for situations where you have a simple servlet that you need to unit test, just mount it on a context and issue requests using your favorite http client library (like our Jetty client found in xref:http-client[]). -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java[] @@ -43,7 +43,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc index cf296730115f..182413e2be67 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc @@ -23,7 +23,7 @@ This example shows how to deploy a simple webapp with an embedded instance of Je This is useful when you want to manage the lifecycle of a server programmatically, either within a production application or as a simple way to deploying and debugging a full scale application deployment. In many ways it is easier then traditional deployment since you control the classpath yourself, making this easy to wire up in a test case in Maven and issue requests using your favorite http client library (like our Jetty client found in xref:http-client[]). -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java[] @@ -37,7 +37,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc index 111791db4a17..8360b4089c43 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc @@ -24,7 +24,7 @@ We have a simple Hello Handler that just return a greeting but add on the restri Another thing to remember is that this example uses the `ConstraintSecurityHandler` which is what supports the security mappings inside of the servlet api, it could be easier to show just the `SecurityHandler` usage, but the constraint provides more configuration power. If you don't need that you can drop the Constraint bits and use just the `SecurityHandler`. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java[] @@ -46,7 +46,7 @@ include::{SRCDIR}/examples/embedded/src/test/resources/realm.properties[] To use this example in your project you will need the following Maven dependencies declared. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc index d2b5d38b1208..a2ad0ec189b7 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc @@ -21,7 +21,7 @@ This example builds on the link:#emebedded-file-server[Simple File Server] to show how chaining multiple `ResourceHandlers` together can let you aggregate multiple directories to serve content on a single path and how you can link these together with `ContextHandlers`. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java[] @@ -38,7 +38,7 @@ Any requests for files will be looked for in the first resource handler, then th To use this example as is in your project you will need the following maven dependencies declared. We would recommend not using the toolchain dependency in your actual application. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index 23ab40149993..3cfc388b81d6 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -42,7 +42,7 @@ ____ Use curl as follows: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mkdir Demo > cd Demo @@ -56,7 +56,7 @@ The link:#embedding[Embedding Jetty] section contains many examples of writing a This tutorial uses a simple HelloWorld handler with a main method to run the server. You can either link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java[download] or create in an editor the file `HelloWorld.java` with the following content: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java[] ---- @@ -66,7 +66,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/Hel The following command compiles the HelloWorld class: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mkdir classes > javac -d classes -cp jetty-all-uber.jar HelloWorld.java @@ -77,7 +77,7 @@ The following command compiles the HelloWorld class: The following command runs the HelloWorld example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > java -cp classes:jetty-all-uber.jar org.eclipse.jetty.embedded.HelloWorld .... diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc index 9dc336e3a939..60a6a11c4563 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc @@ -31,7 +31,7 @@ We'll refer to the unpacked location as `$metro.home`. 3. Copy the jars from $metro.home/lib to `$jetty.home/lib/metro` 4. Edit the start.ini file and add an OPTION line for metro near the end. + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- OPTIONS=metro ---- @@ -43,7 +43,7 @@ The Metro distribution you downloaded should also contain several example web ap Here's an example of the log output from Jetty when one of the sample Metro wars (from `$metro.home/samples/async`) is deployed to Jetty: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [2093] java -jar start.jar diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index e7059fdef4e4..f09c1b4f0617 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -93,7 +93,7 @@ Either this property _or_ the *jetty.home.bundle* _must_ be specified. This property should point to a file system location that has an `etc/` directory containing xml files to configure the Jetty container on startup. For example: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- jetty.home=/opt/custom/jetty @@ -102,7 +102,7 @@ jetty.home=/opt/custom/jetty + Where `/opt/custom/jetty` contains: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- etc/jetty.xml @@ -118,7 +118,7 @@ The `jettyhome/` directory should have a subdirectory called `etc/` that contain The jetty-osgi-boot.jar contains a `jettyhome/` directory with a default set of xml configuration files. Here's how you would specify it: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- jetty.home.bundle=org.eclipse.jetty.osgi.boot ---- @@ -126,7 +126,7 @@ jetty.home.bundle=org.eclipse.jetty.osgi.boot + Here's a partial listing of that jar that shows you the names of the xml files contained within it: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- META-INF/MANIFEST.MF jettyhome/etc/jetty.xml @@ -138,7 +138,7 @@ jetty.etc.config.urls:: This specifies the paths of the xml files that are to be used. If not specified, they default to: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- etc/jetty.xml,etc/jetty-http.xml,etc/jetty-deploy.xml ---- @@ -163,7 +163,7 @@ You can now go ahead and deploy the jetty-osgi-boot.jar into your OSGi container A Jetty server instance will be created, the xml config files applied to it, and then published as an OSGi service. Normally, you will not need to interact with this service instance, however you can retrieve a reference to it using the usual OSGi API: -[source, java, subs="{sub-order}"] +[source, java, ] ---- org.osgi.framework.BundleContext bc; org.osgi.framework.ServiceReference ref = bc.getServiceReference("org.eclipse.jetty.server.Server"); @@ -187,7 +187,7 @@ the Server's name. Here's an example of how to create a new Server instance and register it with OSGi so that the jetty-osgi-boot code will find it and configure it so it can be a deployment target: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public class Activator implements BundleActivator { @@ -213,7 +213,7 @@ public class Activator implements BundleActivator Now that we have created a new Server called "fooServer", we can deploy webapps and `ContextHandlers` as Bundles or Services to it (see below for more information on this). Here's an example of deploying a webapp as a Service and targeting it to the "fooServer" Server we created above: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public class Activator implements BundleActivator { @@ -248,7 +248,7 @@ Here's an example of a bundle where the resources of the webapp are not located + `MANIFEST`: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Bundle-Name: Web Jetty-WarResourcePath: web @@ -260,7 +260,7 @@ Bundle-SymbolicName: com.acme.sample.web + Bundle contents: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- META-INF/MANIFEST.MF web/index.html @@ -277,7 +277,7 @@ Here's an example based on the previous one where we use the `Web-ContextPath` h + `MANIFEST`: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Bundle-Name: Web Jetty-WarResourcePath: web @@ -324,14 +324,14 @@ If the `MANIFEST` does not contain that header, then Jetty will concoct a contex For example, suppose we have a bundle whose location is: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- file://some/where/over/the/rainbow/oz.war ---- The corresponding synthesized context path would be: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- /oz ---- @@ -343,7 +343,7 @@ This xml file must be placed in `META-INF` of the bundle, and must be called `je Here's an example of a webapp bundle listing containing such a file: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- META-INF/MANIFEST.MF META-INF/jetty-webapp-context.xml @@ -356,7 +356,7 @@ com/acme/sample/web/MyOtherStuff.class Here's an example of the contents of a `META-INF/jetty-webapp-context.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -388,28 +388,28 @@ The context files can be inside the bundle, external to the bundle somewhere on + A context file that is inside the bundle: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml ---- + A context file that is on the file system: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Jetty-ContextFilePath: /opt/app/contexts/foo.xml ---- + A context file that is relative to jetty.home: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Jetty-ContextFilePath: contexts/foo.xml ---- + A number of different context files: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml,/opt/app/contexts/foo.xml,contexts/foo.xml ---- @@ -437,7 +437,7 @@ Note that this could be either a directory in the file system if the OSGi contai Here's an example of a context xml file that makes use of these properties: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] ---- @@ -452,7 +452,7 @@ Here's an example of doing that with a simple bundle that serves static content, The bundle contents: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- META-INF/MANIFEST.MF index.html @@ -461,7 +461,7 @@ com/acme/osgi/Activator.class The `MANIFEST.MF`: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Bundle-Classpath: . Bundle-Name: Jetty OSGi Test WebApp @@ -481,7 +481,7 @@ Bundle-SymbolicName: com.acme.testwebapp The Activator code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public void start(BundleContext context) throws Exception { @@ -532,7 +532,7 @@ Here's an example of doing that with a simple bundle that serves static content The bundle contents: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- META-INF/MANIFEST.MF static/index.html @@ -543,7 +543,7 @@ com/acme/osgi/Activator$1.class The `MANIFEST`: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Bundle-Classpath: . Bundle-Name: Jetty OSGi Test Context @@ -564,7 +564,7 @@ Bundle-SymbolicName: com.acme.testcontext The Activator code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public void start(final BundleContext context) throws Exception { @@ -593,7 +593,7 @@ public void start(final BundleContext context) throws Exception The contents of the `acme.xml` context file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] ---- @@ -751,7 +751,7 @@ This is necessary because the classloading regime used by the OSGi container is Firstly, lets look at an example of a web bundle's modified `MANIFEST` file so you get an idea of what is required. This example is a web bundle that uses the Spring servlet framework: -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Bundle-SymbolicName: com.acme.sample Bundle-Name: WebSample @@ -782,7 +782,7 @@ org.eclipse.jetty.osgi.tldbundles:: System property defined on the OSGi environment that is a comma separated list of symbolic names of bundles containing taglibs that will be treated as if they are on the container's classpath for web bundles. For example: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- org.eclipse.jetty.osgi.tldbundles=com.acme.special.tags,com.foo.web,org.bar.web.framework ---- @@ -798,7 +798,7 @@ In that case, it can be specified on the `org.eclipse.jetty.deploy.DeploymentMan The `jetty-osgi-boot.jar` contains the default `jettyhome/etc/jetty-deploy.xml` file where the `DeploymentManager` is defined. To set the pattern, you will need to provide your own etc files - see the section on link:#customize-jetty-container[customizing the jetty container] for how to do this. Here's how the `jetty-deploy.xml` file would look if we defined a pattern that matched all bundle symbolic names ending in "tag" and "web": + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc index afeff5fca2af..ea911fd6fd99 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc @@ -28,7 +28,7 @@ If you want to replace the jetty-xml being used to start the normal Jetty distri The skeleton of a jetty spring module can be enabled from the jetty-distribution via the link:#startup-modules[module mechanism]. For example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -jar start.jar --add-to-start=spring .... @@ -42,7 +42,7 @@ You will need to download these and place them into jetty's classpath - you can Configuring Jetty via Spring is simply a matter of calling the API as Spring beans. The following is an example mimicking the default jetty startup configuration. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc index 19c68531adab..03385f5fe822 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc @@ -30,19 +30,19 @@ This can be accomplished either by enabling one of the startup link:#startup-mod * the `cdi-decorate` module is the preferred Weld integration. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... INFO: WELD-ENV-001212: Jetty CdiDecoratingListener support detected, CDI injection will be available in Listeners, Servlets and Filters. .... * the `cdi-spi` module works with Weld, but may restrict some non standard features. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... INFO: WELD-ENV-001213: Jetty CDI SPI support detected, CDI injection will be available in Listeners, Servlets and Filters. .... * the deprecated `cdi2` module works with Weld prior to 3.1.2.Final. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... INFO: WELD-ENV-001201: Jetty 7.2+ detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported. .... diff --git a/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc b/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc index 02c8a31b0ffe..f5d4610f9cc3 100644 --- a/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc +++ b/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc @@ -36,7 +36,7 @@ Classes that implement this interface are used to coordinate requests, filter re The core API of the Handler interface is: -[source, java, subs="{sub-order}"] +[source, java, ] ---- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException @@ -69,7 +69,7 @@ More often than not, access to the Jetty implementations of these classes is req However, as the request and response may be wrapped by handlers, filters and servlets, it is not possible to pass the implementation directly. The following mantra retrieves the core implementation objects from under any wrappers: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Request base_request = request instanceof Request ? (Request)request : HttpConnection.getCurrentConnection().getHttpChannel().getRequest(); Response base_response = response instanceof Response ? (Response)response : HttpConnection.getCurrentConnection().getHttpChannel().getResponse(); @@ -107,7 +107,7 @@ The link:{JDURL}/org/eclipse/jetty/embedded/OneHandler.html[`OneHandler`] embedd You can use the standard servlet response API, which will typically set some status, content headers and then write out the content: -[source, java, subs="{sub-order}"] +[source, java, ] ---- response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); @@ -116,7 +116,7 @@ You can use the standard servlet response API, which will typically set some sta It is also very important that a handler indicate that it has completed handling the request and that the request should not be passed to other handlers: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getHttpChannel().getRequest(); base_request.setHandled(true); @@ -141,7 +141,7 @@ You can also update the context of the request: Typically Jetty passes a modified request to another handler and undoes modifications in a finally block afterwards: -[source, java, subs="{sub-order}"] +[source, java, ] ---- try { diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc index aba506f54b29..b207b3da702c 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc @@ -26,7 +26,7 @@ This plugin will help you pre-compile your jsps and works in conjunction with th Here's the basic setup required to put the jspc plugin into your build: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -117,7 +117,7 @@ You can download the javadoc https://repo1.maven.org/maven2/org/glassfish/web/ja Taking all the default settings, here's how to configure the war plugin to use the generated `web.xml` that includes all of the jsp servlet declarations: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.apache.maven.plugins @@ -135,7 +135,7 @@ As compiling jsps is usually done during preparation for a production release an For example, the following profile will only be invoked if the flag `-Dprod` is present on the run line: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -164,7 +164,7 @@ For example, the following profile will only be invoked if the flag `-Dprod` is The following invocation would cause your code to be compiled, the jsps to be compiled, the and s inserted in the `web.xml` and your webapp assembled into a war: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mvn -Dprod package .... @@ -181,7 +181,7 @@ We will unpack the overlaid war file, compile the jsps and merge their servlet d Here's an example configuration of the war plugin that separate those phases into an unpack phase, and then a packing phase: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- maven-war-plugin @@ -218,7 +218,7 @@ Now you also need to configure the `jetty-jspc-maven-plugin` so that it can use This is in `target/foo/WEB-INF/web.xml`. Using the default settings, the `web.xml` merged with the jsp servlet definitions will be put into `target/web.xml`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc index 2e9448889d38..0ffa53c65917 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc @@ -45,7 +45,7 @@ To understand the basic operations of building and running against Jetty, first Maven uses convention over configuration, so it is best to use the project structure Maven recommends. You can use _link:#archetypes[http://maven.apache.org/guides/introduction/introduction-to-archetypes.html[archetypes]]_ to quickly setup Maven projects, but we will set up the structure manually for this simple tutorial example: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mkdir JettyMavenHelloWorld > cd JettyMavenHelloWorld @@ -57,7 +57,7 @@ You can use _link:#archetypes[http://maven.apache.org/guides/introduction/introd Use an editor to create the file `src/main/java/org/example/HelloWorld.java` with the following contents: -[source, java, subs="{sub-order}"] +[source, java, ] ---- package org.example; @@ -100,7 +100,7 @@ public class HelloWorld extends AbstractHandler The `pom.xml` file declares the project name and its dependencies. Use an editor to create the file `pom.xml` in the `JettyMavenHelloWorld` directory with the following contents: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- mvn clean compile exec:java .... @@ -159,7 +159,7 @@ You can now compile and execute the HelloWorld class by using these commands: You can point your browser to `http://localhost:8080` to see the _Hello World_ page. You can observe what Maven is doing for you behind the scenes by using the `mvn dependency:tree` command, which reveals the transitive dependency resolved and downloaded as: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mvn dependency:tree [INFO] Scanning for projects... @@ -193,7 +193,7 @@ The previous section demonstrated how to use Maven with an application that embe Now we will examine instead how to develop a standard webapp with Maven and Jetty. First create the Maven structure (you can use the maven webapp archetype instead if you prefer): -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mkdir JettyMavenHelloWarApp > cd JettyMavenHelloWebApp @@ -206,7 +206,7 @@ First create the Maven structure (you can use the maven webapp archetype instead Use an editor to create the file `src/main/java/org/example/HelloServlet.java` with the following contents: -[source, java, subs="{sub-order}"] +[source, java, ] ---- package org.example; @@ -230,7 +230,7 @@ public class HelloServlet extends HttpServlet You need to declare this servlet in the deployment descriptor, so create the file `src/main/webapp/WEB-INF/web.xml` and add the following contents: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- mvn jetty:run .... @@ -317,7 +317,7 @@ The full reference is at link:#jetty-maven-plugin[Configuring the Jetty Maven Pl You can create a Web Application Archive (WAR) file from the project with the command: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... > mvn package .... diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc index f5fe6ef9862d..8c32a92dc9c3 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc @@ -38,7 +38,7 @@ We recommend either the traditional distribution deployment approach or using li First, add `jetty-maven-plugin` to your `pom.xml` definition: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -49,7 +49,7 @@ First, add `jetty-maven-plugin` to your `pom.xml` definition: Then, from the same directory as your root `pom.xml`, type: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:run .... @@ -79,14 +79,14 @@ There are different goals to accomplish these tasks, as well as several others. To see a list of all goals supported by the Jetty Maven plugin, do: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:help .... To see the detailed list of parameters that can be configured for a particular goal, in addition to its description, do: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:help -Ddetail=true -Dgoal= .... @@ -200,7 +200,7 @@ Sets up various characteristics of the link:{GITBROWSEURL}/jetty-server/src/main Importantly, it sets up the link:{GITBROWSEURL}/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConfiguration.java[`org.eclipse.jetty.server.HttpConfiguration`] element that we can refer to in subsequent xml files that configure the connectors. Below is the relevant section taken from link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty.xml[jetty.xml]. + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -233,21 +233,21 @@ jetty-ssl.xml:: Sets up ssl which will be used by the https connector. Here's the `jetty-ssl.xml` file from the jetty-distribution: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-ssl.xml[] ---- jetty-https.xml:: Set up the https connector using the HttpConfiguration from `jetty.xml` and the ssl configuration from `jetty-ssl.xml`: + -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-https.xml[] ---- Now you need to let the plugin know to apply the files above: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -267,14 +267,14 @@ ____ You can also use Jetty xml files to configure a http connector for the plugin to use. Here we use the same `jetty-http.xml` file from the Jetty distribution: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-http.xml[] ---- Now we add it to the list of configs for the plugin to apply: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -362,7 +362,7 @@ ____ Here is an example, which turns on scanning for changes every ten seconds, and sets the webapp context path to `/test`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -418,7 +418,7 @@ Patterns are specified as a relative path using a glob-like syntax as described Here's an example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -482,7 +482,7 @@ If this is not sufficient, set it to your custom location. Here's how to set it: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -515,7 +515,7 @@ This defaults to `${project.build.directory}/${project.build.finalName}`, but yo Here's how to set it: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -550,7 +550,7 @@ Alternatively, you can set this parameter to false, in which case Jetty will blo Here's the configuration: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -658,7 +658,7 @@ Use the `jvmArgs` parameter to pass system properties to the forked process. To deploy your unassembled web app to Jetty running in a new JVM: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:run-forked .... @@ -757,7 +757,7 @@ Not supported. Use the `jvmArgs` parameter to pass system properties to the forked process. Here's an example of using the configuration parameters: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -803,7 +803,7 @@ ____ To deploy your unassembled web app to jetty running as a local distribution: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:run-distro .... @@ -820,7 +820,7 @@ For example, you can configure the plugin to start your webapp at the beginning To do this, you need to set up a couple of `execution` scenarios for the Jetty plugin. You use the `pre-integration-test` and `post-integration-test` Maven build phases to trigger the execution and termination of Jetty: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -870,7 +870,7 @@ If false or not specified, the plugin does not wait for confirmation but exits a Here's a configuration example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -889,7 +889,7 @@ Here's a configuration example: Then, while Jetty is running (in another window), type: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn jetty:stop .... @@ -917,7 +917,7 @@ The full path name of a file into which you would like the effective web xml gen You can also generate the origin of each element into the effective web.xml file. The origin is either a descriptor eg web.xml,web-fragment.xml,override-web.xml file, or an annotation eg @WebServlet. Some examples of elements with origin attribute information are: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -948,7 +948,7 @@ This is probably best seen by looking at a concrete example. Suppose your webapp depends on the following wars: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- com.acme @@ -982,7 +982,7 @@ WebAppY: They are configured for the http://maven.apache.org/plugins/maven-war-plugin/overlays.html[maven-war-plugin]: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.apache.maven.plugins @@ -1025,7 +1025,7 @@ The configuration parameter `` (see the section on link:#configuri For example, suppose our webapp depends on these two wars: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- com.acme @@ -1076,7 +1076,7 @@ Then our webapp has available these additional resources: You can configure LoginServices in the plugin. Here's an example of setting up the HashLoginService for a webapp: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -1107,7 +1107,7 @@ It's a lot like the overlaid war situation, but without the war. Here is a configuration example: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -1129,7 +1129,7 @@ If you want to deploy webapp A, and webapps B and C in the same Jetty instance: Putting the configuration in webapp A's `pom.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -1163,7 +1163,7 @@ ____ Alternatively, add a `jetty.xml` file to webapp A. Copy the `jetty.xml` file from the Jetty distribution, and then add WebAppContexts for the other 2 webapps: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -1187,7 +1187,7 @@ Copy the `jetty.xml` file from the Jetty distribution, and then add WebAppContex Then configure the location of this `jetty.xml` file into webapp A's jetty plugin: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -1220,7 +1220,7 @@ This feature is useful to tidy up the command line and save a lot of typing. However, *sometimes it is not possible to use this feature to set System properties* - sometimes the software component using the System property is already initialized by the time that maven runs (in which case you will need to provide the System property on the command line), or by the time that Jetty runs. In the latter case, you can use the link:http://www.mojohaus.org/[maven properties plugin] to define the system properties instead. Here's an example that configures the logback logging system as the Jetty logger: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.codehaus.mojo @@ -1254,7 +1254,7 @@ ____ Here's an example of how to specify System properties in the POM: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -1276,7 +1276,7 @@ Here's an example of how to specify System properties in the POM: To change the default behavior so that these system properties override those on the command line, use the `` parameter: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -1311,7 +1311,7 @@ fooprop=222 This can be configured on the plugin like so: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/part.adoc b/jetty-documentation/src/main/asciidoc/development/part.adoc index 83cbc9da51d0..ea70d5e52800 100644 --- a/jetty-documentation/src/main/asciidoc/development/part.adoc +++ b/jetty-documentation/src/main/asciidoc/development/part.adoc @@ -18,7 +18,7 @@ [[jetty-dev-guide]] -= Jetty Development Guide +== Jetty Development Guide include::embedding/chapter.adoc[] include::clients/http/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc index 695d2ffe414a..77f7389cc1c8 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc @@ -116,7 +116,7 @@ Completely disable jsr-356 for a particular webapp::: Set the `org.eclipse.jetty.containerInitializerExclusionPattern` link:#context_attributes[context attribute] to include `org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer`. Here's an example of doing this in code, although you can do the link:#intro-jetty-configuration-webapps[same in xml]: + -[source, java, subs="{sub-order}"] +[source, java, ] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerExclusionPattern", diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc index 862c45611da0..3a48997aba9e 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc @@ -21,7 +21,7 @@ A basic adapter for managing the Session object on the WebSocketListener. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/AdapterEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc index ba1849835437..cfcb001ad875 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc @@ -22,7 +22,7 @@ The most basic form of WebSocket is a marked up POJO with annotations provided by the Jetty WebSocket API. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/AnnotatedEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc index c13c11a90d82..7df2beb9a088 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc @@ -21,7 +21,7 @@ The basic form of a WebSocket using the link:{JDURL}/org/eclipse/jetty/websocket/api/WebSocketListener.html[`org.eclipse.jetty.websocket.api.WebSocketListener`] for incoming events. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/ListenerEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc index b4d0f6f58cda..a79eda46b2a7 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc @@ -28,7 +28,7 @@ With RemoteEndpoint you can choose to send TEXT or BINARY WebSocket messages, or Most calls are blocking in nature, and will not return until the send has completed (or has thrown an exception). -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -47,7 +47,7 @@ catch (IOException e) How to send a simple Binary message using the RemoteEndpoint. This will block until the message is sent, possibly throwing an IOException if unable to send the message. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -71,7 +71,7 @@ This will block until the message is sent, possibly throwing an IOException if u If you have a large message to send, and want to send it in pieces and parts, you can utilize the partial message sending methods of RemoteEndpoint. Just be sure you finish sending your message (`isLast == true`). -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -94,7 +94,7 @@ catch (IOException e) How to send a Binary message in 2 parts, using the partial message support in RemoteEndpoint. This will block until each part of the message is sent, possibly throwing an IOException if unable to send the partial message. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -120,7 +120,7 @@ This will block until each part of the message is sent, possibly throwing an IOE You can also send Ping and Pong control frames using the RemoteEndpoint. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -140,7 +140,7 @@ catch (IOException e) How to send a Ping control frame, with a payload of `"You There?"` (arriving at Remote Endpoint as a byte array payload). This will block until the message is sent, possibly throwing an IOException if unable to send the ping frame. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -172,7 +172,7 @@ However there are also 2 Async send message methods available: Both return a `Future` that can be used to test for success and failure of the message send using standard http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html[`java.util.concurrent.Future`] behavior. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -184,7 +184,7 @@ remote.sendBytesByFuture(buf); How to send a simple Binary message using the RemoteEndpoint. The message will be enqueued for outgoing write, but you will not know if it succeeded or failed. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -205,7 +205,7 @@ catch (ExecutionException | InterruptedException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` to know if the send succeeded or failed. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -237,7 +237,7 @@ catch (TimeoutException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` and waiting only prescribed amount of time for the send to complete, cancelling the message if the timeout occurs. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -248,7 +248,7 @@ remote.sendStringByFuture("Hello World"); How to send a simple Text message using the RemoteEndpoint. The message will be enqueued for outgoing write, but you will not know if it succeeded or failed. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); @@ -268,7 +268,7 @@ catch (ExecutionException | InterruptedException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` to know if the send succeeded or failed. -[source, java, subs="{sub-order}"] +[source, java, ] ---- RemoteEndpoint remote = session.getRemote(); diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc index 5f3fd8d889b6..c9cb8d47b6d6 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc @@ -23,7 +23,7 @@ The link:{JDURL}/org/eclipse/jetty/websocket/api/Session.html[Session] object ca The Connection State (is it open or not). -[source, java, subs="{sub-order}"] +[source, java, ] ---- if(session.isOpen()) { // send message @@ -32,7 +32,7 @@ if(session.isOpen()) { Is the Connection Secure. -[source, java, subs="{sub-order}"] +[source, java, ] ---- if(session.isSecure()) { // connection is using 'wss://' @@ -41,7 +41,7 @@ if(session.isSecure()) { What was in the Upgrade Request and Response. -[source, java, subs="{sub-order}"] +[source, java, ] ---- UpgradeRequest req = session.getUpgradeRequest(); String channelName = req.getParameterMap().get("channelName"); @@ -52,14 +52,14 @@ String subprotocol = resp.getAcceptedSubProtocol(); What is the Local and Remote Address. -[source, java, subs="{sub-order}"] +[source, java, ] ---- InetSocketAddress remoteAddr = session.getRemoteAddress(); ---- Get and Set the Idle Timeout -[source, java, subs="{sub-order}"] +[source, java, ] ---- session.setIdleTimeout(2000); // 2 second timeout ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc index 8f3136cdcd9b..2b153e2e7e16 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc @@ -23,7 +23,7 @@ Jetty also provides a Jetty WebSocket Client Library to write make talking to We To use the Jetty WebSocket Client on your own Java project you will need the following maven artifacts. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty.websocket @@ -36,14 +36,14 @@ To use the Jetty WebSocket Client on your own Java project you will need the fol To use the WebSocketClient you will need to hook up a WebSocket object instance to a specific destination WebSocket URI. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-client/src/test/java/examples/SimpleEchoClient.java[] ---- The above example connects to a remote WebSocket server and hands off a SimpleEchoSocket to perform the logic on the websocket once connected, waiting for the socket to register that it has closed. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-client/src/test/java/examples/SimpleEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc index 7ce2af928ce6..1c49204d7b8e 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc @@ -29,7 +29,7 @@ This will only work when running within the Jetty Container (unlike past Jetty t To wire up your WebSocket to a specific path via the WebSocketServlet, you will need to extend org.eclipse.jetty.websocket.servlet.WebSocketServlet and specify what WebSocket object should be created with incoming Upgrade requests. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyEchoServlet.java[] ---- @@ -55,7 +55,7 @@ Use link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketServletFactory.htm If you have a more complicated creation scenario, you might want to provide your own WebSocketCreator that bases the WebSocket it creates off of information present in the UpgradeRequest object. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdvancedEchoCreator.java[] ---- @@ -63,7 +63,7 @@ include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdv Here we show a WebSocketCreator that will utilize the http://tools.ietf.org/html/rfc6455#section-1.9[WebSocket subprotocol] information from request to determine what WebSocket type should be created. -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdvancedEchoServlet.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc index 567a3c1a6603..6dc0356f81c5 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc @@ -105,7 +105,7 @@ We will work backwards from an ini file to the associated module and then the XM First up, the `http.ini` file. If we take a look at it's contents, we will see the following: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cat start.d/http.ini # --------------------------------------- @@ -156,7 +156,7 @@ When a module is enabled and an `ini` file is created, all of the properties you If you wanted to change one of the properties though, say `jetty.http.port`, you'd simply uncomment the line and change the value. For example: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cat start.d/http.ini # --------------------------------------- @@ -181,7 +181,7 @@ As seen before, these properties were populated in this ini file based on a rela Standard Jetty modules live in the Home of the Jetty Distribution in the aptly named `modules` directory. So let's take a quick look at the associated `$JETTY_HOME/modules/http.mod` file: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cat $JETTY_HOME/modules/http.mod [description] @@ -221,7 +221,7 @@ It is important to note that not every module file will have the same sections, Now that we know what XML file these properties relate to, we can navigate to it and have a look. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- $ cat $JETTY_HOME/etc/jetty-http.xml @@ -316,14 +316,14 @@ Property Files:: To understand the link:#jetty-xml-syntax[Jetty IoC XML format], consider the following example of an embedded Jetty server instantiated and configured in Java: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ExampleServer.java[] ---- link:#jetty-xml-syntax[Jetty IoC XML format] allows you to instantiate and configure the exact same server in XML without writing any java code: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/examples/embedded/src/main/resources/exampleserver.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc index 9704f4b9fd23..954a2d02faf1 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc @@ -132,7 +132,7 @@ resourceBase:: In an embedded server, you configure contexts by directly calling the link:{JDURL}/org/eclipse/jetty/server/handler/ContextHandler.html[ContextHandler] API as in the following example: -[source, java, subs="{sub-order}"] +[source, java, ] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java[] ---- @@ -142,7 +142,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/One You can create and configure a context entirely by IoC XML (either Jetty's or Spring). The deployer discovers and hot deploys context IoC descriptors like the following which creates a context to serve the Javadoc from the Jetty distribution: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -283,7 +283,7 @@ In Jetty, there are several realm implementations (called LoginServices) and the To configure an instance of HashLoginService that matches the "Test Realm" configured above, the following `$JETTY_BASE/etc/test-realm.xml` IoC XML file should be passed on the command line or set in `start.ini` or `start.d/server.ini`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc index 55f6711a4aad..bc08ee55e35e 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc @@ -40,7 +40,7 @@ ____ The `jetty.home` and `jetty.base` properties may be explicitly set on the command line, or they can be inferred from the environment if used with commands like: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar @@ -48,7 +48,7 @@ The `jetty.home` and `jetty.base` properties may be explicitly set on the comman The following commands create a new base directory, enables both the HTTP connector and the web application deployer modules, and copies a demo webapp to be deployed: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > JETTY_BASE=/tmp/mybase > mkdir $JETTY_BASE @@ -91,7 +91,7 @@ INFO: Base directory was modified You can configure Jetty to run on a different port by setting the `jetty.http.port` property on the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar jetty.http.port=8081 @@ -121,7 +121,7 @@ ____ Building on the example above, we can activate additional modules to add support HTTPS and HTTP2 for the server. To add HTTPS and HTTP2 connectors to a Jetty configuration, the modules can be activated by the following command: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > java -jar $JETTY_HOME/start.jar --add-to-start=https,http2 @@ -169,7 +169,7 @@ The `--add-to-start` command sets up the effective command line in the ini files You can configure the SSL connector to run on a different port by setting the `jetty.ssl.port` property on the command line: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar jetty.ssl.port=8444 @@ -183,7 +183,7 @@ Please see the section on link:#start-vs-startd[Start.ini vs. Start.d] for more The job of the `start.jar` is to interpret the command line, `start.ini` and `start.d` directory (and associated .ini files) to build a Java classpath and list of properties and configuration files to pass to the main class of the Jetty XML configuration mechanism. The `start.jar` mechanism has many options which are documented in the xref:startup[] administration section and you can see them in summary by using the command: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > java -jar $JETTY_HOME/start.jar --help ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc index 7a5228a3be6d..f7f729b21eea 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc @@ -25,7 +25,7 @@ Jetty has no GUI (Graphical User Interface), so running the server and performin Once you have access to your system's command line, navigate to the directory where you unpacked your copy of the Jetty distribution. To start Jetty on the default port of 8080, run the following command: -[source,screen,subs="{sub-order}"] +[source,screen,] ---- $ java -jar start.jar 2017-09-20 15:45:11.986:INFO::main: Logging initialized @683ms to org.eclipse.jetty.util.log.StdErrLog @@ -58,7 +58,7 @@ Within the standard Jetty distribution there is the `demo-base` directory. This is a fully-functioning Jetty Base (more on that later) complete with numerous web applications demonstrating different Jetty functionality. Additionally, the `demo-base` demonstrates the recommended way to run a Jetty base in a directory separate from `$JETTY_HOME`: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- $ cd demo-base/ $ java -jar ../start.jar @@ -110,7 +110,7 @@ ____ You can see the configuration of the `demo-base` by using the following commands: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- > cd $JETTY_HOME/demo-base/ > java -jar $JETTY_HOME/start.jar --list-modules diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc index be91400ef4a2..475308ad4e62 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc @@ -33,7 +33,7 @@ With Jetty 7 the project moved to the Eclipse foundation and to a new `groupId` The top level Project Object Model (POM) for the Jetty project is located under the following coordinates. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty @@ -49,7 +49,7 @@ Those generated files are also uploaded into Maven Central during the release of https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-project/ -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/quick-start/part.adoc b/jetty-documentation/src/main/asciidoc/quick-start/part.adoc index 8abb89bc358a..b410b8883f22 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/part.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/part.adoc @@ -18,7 +18,7 @@ [[quick-start]] -= Getting Started With Jetty +== Getting Started With Jetty include::introduction/chapter.adoc[] include::getting-started/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc index 666720d5c763..9400f2603432 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc @@ -92,7 +92,7 @@ The core API of a handler is the handle method: image:images/basic-architecture-handlers.png[image,width=576] -[source, java, subs="{sub-order}"] +[source, java, ] ---- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc index 2b9c1c91e0c3..9c2a35ec40e0 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc @@ -153,7 +153,7 @@ You can place additional Jars here. You can add an additional classpath to a context classloader by calling link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setExtraClasspath(java.lang.String)[org.eclipse.jetty.webapp.WebAppContext.setExtraClasspath(String)] with a comma-separated list of paths. You can do so directly to the API via a context XML file such as the following: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -172,7 +172,7 @@ Without this interface, session persistence will be slower. You configure the classloader for the webapp like so: -[source, java, subs="{sub-order}"] +[source, java, ] ---- MyCleverClassLoader myCleverClassLoader = new MyCleverClassLoader(); ... @@ -190,14 +190,14 @@ You can also accomplish this in a context xml file. If you start a Jetty server using a custom class loader–consider the Jetty classes not being available to the system class loader, only your custom class loader–you may run into class loading issues when the `WebAppClassLoader` kicks in. By default the `WebAppClassLoader` uses the system class loader as its parent, hence the problem. This is easy to fix, like so: -[source, java, subs="{sub-order}"] +[source, java, ] ---- context.setClassLoader(new WebAppClassLoader(this.getClass().getClassLoader(), context)); ---- or -[source, java, subs="{sub-order}"] +[source, java, ] ---- context.setClassLoader(new WebAppClassLoader(new MyCustomClassLoader(), context)); ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc index b79ab05d4549..1a2e0fc5717b 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc @@ -89,7 +89,7 @@ It is trivial to write the synchronous version in terms of the asynchronous vers You can use `EndPoint.write(Callback, ByteBuffer...)` in a blocking way as follows: -[source, java, subs="{sub-order}"] +[source, java, ] ---- FutureCallback callback = new FutureCallback(); endPoint.write(callback, buffers); diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc index d02526759fb0..59c7b5c83066 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc @@ -37,7 +37,7 @@ http://git.eclipse.org/c/jetty/org.eclipse.jetty.admin.git/tree/jetty-eclipse-co The following is an example of the Java formatting and naming styles to apply to Jetty: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import some.exact.ClassName; // GOOD diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index d07cb039ff2a..349f7664e8f7 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -52,7 +52,7 @@ First you need to obtain the source of the documentation project. Clone the repository: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git clone https://github.com/eclipse/jetty.project.git .... @@ -60,7 +60,7 @@ $ git clone https://github.com/eclipse/jetty.project.git You will now have a local directory with all of jetty, including the jetty-documentation. Now we move on to building it. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd jetty.project/jetty-documentation $ mvn install @@ -72,7 +72,7 @@ This build will first produce docbook xml and then through the docbkx-maven-plug The downloads are all of the java dependencies that are required to make this build work. After a while the downloading will stop and you should see the execution of the asciidoctor-maven-plugin followed by the docbkx-maven-plugin. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [INFO] --- asciidoctor-maven-plugin:1.5.3:process-asciidoc (output-html) @ jetty-documentation --- [INFO] Rendered /Users/jesse/src/projects/jetty/jetty-docs/src/main/asciidoc/index.adoc @@ -86,7 +86,7 @@ After a while the downloading will stop and you should see the execution of the The build is finished once you see a message akin to this: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS @@ -126,7 +126,7 @@ Now follow the process to push that change back into Jetty proper. Do make sure the change works and the build isn't broken though so make sure you run maven and check the output. Then commit the change. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git commit -s -m "Tweaked the introduction to fix a horrid misspelled word." src/main/asciidoc/quickstart/introduction/topic.xml .... @@ -140,7 +140,7 @@ ____ This will commit the change in your local repository. You can then push the change up to your repository on github. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git push .... diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc index d166162b7358..578f2ade22c5 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc @@ -23,7 +23,7 @@ To test a Jetty release, complete the following steps for each release you want 1. Download the staged release: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... wget https://oss.sonatype.org/content/repositories/jetty-[reponumber]/org/eclipse/jetty/jetty-distribution/[jetty-version]/jetty-distribution-9.[jetty-minor-version].tar.gz @@ -33,7 +33,7 @@ To test a Jetty release, complete the following steps for each release you want 2. Extract to a directory of your choice. 3. Start jetty: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd [installdir] ; java -jar start.jar @@ -48,7 +48,7 @@ To test a Jetty release, complete the following steps for each release you want 9. In the examples section click "Servlet 3.1 Test" and verify that everything works as expected. 10. Verify that hot deployment works. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd [installdir] ; @@ -59,7 +59,7 @@ To test a Jetty release, complete the following steps for each release you want 11. Verify that `test.war` gets redeployed in `STDOUT`. 12. Verify that the spdy example webapp and spdy-proxy do work + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd jetty_src/jetty-spdy/spdy-example-webapp @@ -70,7 +70,7 @@ To test a Jetty release, complete the following steps for each release you want 13. Browse to https://localhost:8443 and verify that all looks ok 14. Stop the server with CTRL+C and restart it in proxy mode: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn -Pproxy jetty:run-forked @@ -84,7 +84,7 @@ To test a Jetty release, complete the following steps for each release you want 1. Clone CometD. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... clone git://github.com/cometd/cometd.git @@ -114,7 +114,7 @@ To test a Jetty release, complete the following steps for each release you want .... 3. Build Cometd: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... mvn clean install @@ -128,7 +128,7 @@ Run the loadtest until ''JIT compilation time'' is close to a value of zero (abo 6. Make sure that the performance results are reasonably fast. On a MacBook Pro i7 2.6ghz dualcore produces the following: + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... ======================================== @@ -202,7 +202,7 @@ Thread Pool - Concurrent Threads max = 239 | Queue Size max = 1002 | Queue Laten .... 7. Deploy `cometd.war` to the `webapps` directory of the jetty-distribution tested above. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cp cometd-demo/target/cometd-demo-[version].war [pathToJetty]/jetty-distribution-[jetty-version]/webapps/ @@ -211,7 +211,7 @@ Thread Pool - Concurrent Threads max = 239 | Queue Size max = 1002 | Queue Laten .... 8. Start jetty and make sure there are no exceptions. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... cd [pathToJetty] && java -jar start.jar diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc index c098790779c9..7407807bdfd5 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc @@ -40,7 +40,7 @@ Tag Name : jetty-9.9.0.v20130322 2. We use the 'release-9' branch to avoid problems with other developers actively working on the master branch. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... // Get all of the remotes $ git pull origin @@ -55,21 +55,21 @@ $ git merge --no-ff master 3. Update the VERSION.txt with changes from the git logs, this populates the resolves issues since the last release. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mvn -N -Pupdate-version .... 4. Edit the VERSION.txt file to set the 'Release Version' at the top alongside the Date of this release. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ vi VERSION.txt .... 5. Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git commit -m "Updating VERSION.txt top section" VERSION.txt $ git push origin release-9 @@ -84,7 +84,7 @@ The `eclipse-release` profile is required on the prepare in order to bring in th ____ + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \ -DdevelopmentVersion=9.0.1-SNAPSHOT \ @@ -99,7 +99,7 @@ This step performs the release and deploys it to a oss.sonatype.org staging repo ____ + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ mvn release:perform .... @@ -110,7 +110,7 @@ Do not date this line. + Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ vi VERSION.txt $ git commit -m "Updating VERSION.txt top section" VERSION.txt @@ -126,7 +126,7 @@ $ git push origin release-9 * Release the staging repository to maven central on oss.sonatype.org * Merge back the changes in release-9 to master + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git checkout master $ git merge --no-ff release-9 @@ -142,7 +142,7 @@ If you don't know if you have access to this then you probably don't and will ne To build and deploy the aggregate javadoc and jxr bits: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd target/checkout $ mvn -Paggregate-site javadoc:aggregate jxr:jxr @@ -167,7 +167,7 @@ To localize the scripts to your environment: Once these are setup you can deploy a release to eclipse with the following incantation: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ ./promote-to-eclipse.sh 9.0.0.v20130322 .... @@ -181,7 +181,7 @@ On the eclipse side of it they will also adjust the xref and javadoc documentati Since we are not allowed to have symbolic links on the download site we have to log into the machine manually and remove the previous stable directory and update it with a new release. Maintaining the conventions we use on the site will allow all 'stable' links to be stable and not needed to update to the latest major Jetty build version: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ ssh @build.eclipse.org $ cd ~downloads/jetty/ @@ -192,7 +192,7 @@ $ ./index.sh This needs to be done for all Eclipse Jetty releases (regardless of version). In addition we have to work to reduce the footprint of jetty on the primary eclipse download resources so we want to move older releases to the eclipse archive site. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cd ~/downloads/jetty $ mv /home/data/httpd/archive.eclipse.org/jetty/ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc index 332a085ea057..6fae92cc07c1 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc @@ -55,7 +55,7 @@ Jetty uses http://maven.apache.org/[Apache Maven 3] for managing its build and p Building Jetty should simply be a matter of changing into the relevant directory and executing the following commands: -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ git clone https://github.com/eclipse/jetty.project.git diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc index f1f7a90bf6eb..4d83d4392671 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc @@ -38,7 +38,7 @@ Assuming you have your webapp deployed into jetty, there are two different ways Via command line:: Add the required parameters on the commandline like so. + -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n -jar start.jar @@ -52,7 +52,7 @@ Via `start.ini`:: 1. Edit the `start.ini` and uncomment the --exec line, this is required if you are adding jvm options to the start.ini file as jetty-start must generate the classpath required and fork a new jvm. 2. Add the parameters mentioned above in the Command Line option so your start.ini looks like this: + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- #=========================================================== # Configure JVM arguments. @@ -86,7 +86,7 @@ Uncomment any other jvm environmental options you so desire for your debugging s 3. Regardless of the option chosen, you should see the following lines at the top of your jetty-distribution startup. + -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Listening for transport dt_socket at address: 9999 diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc index 9f08ccf30304..73438933d15f 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc @@ -30,7 +30,7 @@ You define global naming resources on the server via `jetty.xml`. Jetty applies `jetty-env.xml` on a per-webapp basis, and configures an instance of `org.eclipse.jetty.webapp.WebAppContext.` -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -53,7 +53,7 @@ ____ Place the `jetty-env.xml` file in your web application's WEB-INF folder. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc index 3b5b7a4d902a..ec617b8e12e9 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc @@ -30,7 +30,7 @@ For a more in-depth look at the syntax, see xref:jetty-xml-syntax[]. `jetty-web.xml` applies on a per-webapp basis, and configures an instance of `org.eclipse.jetty.webapp.WebAppContext`. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc index 632c9cab230b..4d33817e07d8 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc @@ -39,7 +39,7 @@ The selection of which configuration files to use is controlled by `start.jar` a `jetty.xml` configures an instance of the `Jetty org.eclipse.jetty.server.Server.` -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc index e5562a748bfe..ce62d6805d46 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc @@ -31,7 +31,7 @@ See configuration files for specific examples. The following XML configuration file creates some Java objects and sets some attributes: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -60,7 +60,7 @@ The following XML configuration file creates some Java objects and sets some att The XML above is equivalent to the following Java code: -[source, java, subs="{sub-order}"] +[source, java, ] ---- com.acme.Foo foo = new com.acme.Foo(); foo.setName("demo"); @@ -86,7 +86,7 @@ The document type descriptor (link:{GITBROWSEURL}/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_0.dtd?h=release-9[configure.dtd]) describes all valid elements in a Jetty XML configuration file using the Jetty IoC format. The first two lines of an XML must reference the DTD to be used to validate the XML like: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -101,7 +101,7 @@ Files that conform to the configure.dtd format are processed in Jetty by the `Xm To ensure your `web.xml`, `web-fragment.xml` and `webdefault.xml` files are validated, you will also need to set the `validateXml` attribute to true: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty.webapp.validateXml @@ -115,7 +115,7 @@ The configuration of object instances with Jetty IoC XML is done on a scoped bas The outer most scope is given by a Configure element and elements like Call, New and Get establish new scopes. The following example uses the name fields to explain the scope. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- value @@ -222,7 +222,7 @@ link:#jetty-xml-property[Property element] ====== Basic Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- 8080 @@ -231,7 +231,7 @@ link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(); server.setPort(8080); @@ -241,7 +241,7 @@ server.setPort(8080); In `etc/jetty.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -250,7 +250,7 @@ In `etc/jetty.xml`: In `etc/jetty-logging.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -298,7 +298,7 @@ link:#jetty-xml-property[Property element] ====== Basic Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- 8080 @@ -307,7 +307,7 @@ link:#jetty-xml-property[Property element] ====== Set via a System Property -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -316,7 +316,7 @@ link:#jetty-xml-property[Property element] ====== Creating a NewObject and Setting It on the Server -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -330,7 +330,7 @@ link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(); @@ -343,7 +343,7 @@ server.setThreadPool(threadPool); ====== Invoking a Static Setter -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- loggerName @@ -385,7 +385,7 @@ link:#jetty-xml-property[Property element] This simple example doesn't do much on its own. You would normally use this in conjunction with a ``. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -394,7 +394,7 @@ You would normally use this in conjunction with a ``. ====== Invoking a Static Getter and Call Methods on the Returned Object -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -432,7 +432,7 @@ link:#jetty-xml-property[Property element] ===== Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- objectValue @@ -474,7 +474,7 @@ element], link:#jetty-xml-property[Property element] ====== Basic example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- bar @@ -484,7 +484,7 @@ element], link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Object o2 = o1.doFoo("bar"); o2.setTest("1, 2, 3"); @@ -492,7 +492,7 @@ o2.setTest("1, 2, 3"); ====== Invoking a static method -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- somestring @@ -501,14 +501,14 @@ o2.setTest("1, 2, 3"); Which is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- com.acme.Foo.setString("somestring"); ---- ====== Invoking the Actual MethodInstead of Relying on Getter/Setter Magic -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -522,7 +522,7 @@ com.acme.Foo.setString("somestring"); Which is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- org.mortbay.jetty.Server server = new org.mortbay.jetty.Server(); com.acme.Environment.setPort( server.getPort() ); @@ -560,7 +560,7 @@ link:#jetty-xml-property[Property element] ====== Basic examples -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- foo true @@ -574,7 +574,7 @@ link:#jetty-xml-property[Property element] This explicitly coerces the type to a boolean: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- False ---- @@ -583,7 +583,7 @@ This explicitly coerces the type to a boolean: Here are a couple of examples of link:#jetty-xml-arg[Arg element] being used as a parameter to methods and to constructors: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -596,12 +596,12 @@ Here are a couple of examples of link:#jetty-xml-arg[Arg element] being used as This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- com.acme.Environment.setFoo(new com.acme.Foo("bar")); ---- -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -614,7 +614,7 @@ com.acme.Environment.setFoo(new com.acme.Foo("bar")); This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- new com.acme.Baz(com.acme.MyStaticObjectFactory.createObject(2)); ---- @@ -654,7 +654,7 @@ element], link:#jetty-xml-property[Property element] ====== Basic example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- bar @@ -663,28 +663,28 @@ element], link:#jetty-xml-property[Property element] Which is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- com.acme.Foo foo = new com.acme.Foo("bar"); ---- ====== Instantiate with the Default Constructor -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ---- Which is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- com.acme.Foo foo = new com.acme.Foo(); ---- ====== Instantiate with Multiple Arguments, Then Configuring Further -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- bar @@ -695,7 +695,7 @@ com.acme.Foo foo = new com.acme.Foo(); Which is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Object foo = new com.acme.Foo("bar", "baz"); foo.setTest("1, 2, 3"); @@ -734,7 +734,7 @@ link:#jetty-xml-property[Property element] Use the referenced object as an argument to a method call or constructor: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -742,7 +742,7 @@ Use the referenced object as an argument to a method call or constructor: This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- foo = getXFoo(); setSomeMethod(foo); @@ -750,7 +750,7 @@ setSomeMethod(foo); ====== Manipulating the Object Returned by Ref -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -760,7 +760,7 @@ setSomeMethod(foo); This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- foo = getXFoo(); foo.setTest("1, 2, 3"); @@ -771,7 +771,7 @@ foo.setTest("1, 2, 3"); Here is an example of the difference in syntax between using the `Ref` element, and nesting method calls. They are exactly equivalent: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -790,7 +790,7 @@ They are exactly equivalent: Here is a more practical example, taken from the handler configuration section in `etc/jetty.xml`: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -845,7 +845,7 @@ link:#jetty-xml-item[Item element] ===== Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- value0 @@ -855,7 +855,7 @@ link:#jetty-xml-item[Item element] This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- String[] a = new String[] { "value0", new String("value1") }; ---- @@ -897,7 +897,7 @@ link:#jetty-xml-entry[Entry element] ===== Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -909,7 +909,7 @@ link:#jetty-xml-entry[Entry element] This is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Map m = new HashMap(); m.put("keyName", new String("value1")); @@ -947,14 +947,14 @@ Only attributes as Elements (`Id`, `Name`, `Default`). ===== Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ---- That is equivalent to: -[source, java, subs="{sub-order}"] +[source, java, ] ---- System.getProperty("jetty.http.port", "8080"); ---- @@ -989,7 +989,7 @@ The attributes may be expressed as contained Elements (`Id`, `Name`, `Default`). ===== Example -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc index 65dbdc86b080..6869732f6f2b 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc @@ -28,7 +28,7 @@ Behind the scenes, Jetty's XML config parser translates the XML elements and att To use `jetty.xml`, specify it as a configuration file when running Jetty. -[source, java, subs="{sub-order}"] +[source, java, ] ---- java -jar start.jar etc/jetty.xml ---- @@ -53,21 +53,21 @@ If you use the same ID across multiple configuration files, those configurations You can set parameters in configuration files either with system properties (using ``) or properties files (using ``) passed via the command line. For example, this code in `jetty.xml` allows the port to be defined on the command line, falling back onto `8080`if the port is not specified: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ---- Then you modify the port while running Jetty by using this command: -[source, java, subs="{sub-order}"] +[source, java, ] ---- java -Djetty.http.port=8888 -jar start.jar etc/jetty.xml ---- An example of defining both system properties and properties files from the command line: -[source, java, subs="{sub-order}"] +[source, java, ] ---- java -Djetty.http.port=8888 -jar start.jar myjetty.properties etc/jetty.xml etc/other.xml ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc index fb427d8c644f..43da262e60d3 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc @@ -34,7 +34,7 @@ This is defined on a per-webapp basis, using the xref:jetty-xml-syntax[]. You can specify the `override-web.xml` to use for an individual web application in a deployable xml file located in Jetty webapps folder . For example, if you had a webapp named MyApp, you would place a deployable xml file named `myapp.xml` in `${jetty.base}/webapps` which includes an `overrideDescriptor` entry for the `override-web.xml` file. -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... @@ -47,7 +47,7 @@ For example, if you had a webapp named MyApp, you would place a deployable xml f The equivalent in code is: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import org.eclipse.jetty.webapp.WebAppContext; @@ -67,7 +67,7 @@ Alternatively, you can use the classloader (xref:jetty-classloading[]) to get th Use the `` tag as follows: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc index 909aa8de5ee2..0af53b747361 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc @@ -59,7 +59,7 @@ Maximum number of files to cache. You can specify a custom `webdefault.xml` for an individual web application in that webapp's xref:jetty-xml-config[] as follows: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- @@ -74,7 +74,7 @@ You can specify a custom `webdefault.xml` for an individual web application in t The equivalent in code is: -[source, java, subs="{sub-order}"] +[source, java, ] ---- import org.eclipse.jetty.webapp.WebAppContext; @@ -95,7 +95,7 @@ Alternatively, you can use a xref:jetty-classloading[] to find the resource repr If you want to apply the same custom `webdefault.xml` to a number of webapps, provide the path to the file in xref:jetty-xml-config[] in the `$JETTY_HOME/etc/jetty-deploy.xml` file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- /other/path/to/another/webdefault.xml ---- @@ -105,7 +105,7 @@ If you want to apply the same custom `webdefault.xml` to a number of webapps, pr Similarly, when using the link:#jetty-maven-plugin[Jetty Maven Plugin] you provide a customized `webdefault.xml` file for your webapp as follows: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/reference/part.adoc b/jetty-documentation/src/main/asciidoc/reference/part.adoc index 520e7af884ef..81ffc2754715 100644 --- a/jetty-documentation/src/main/asciidoc/reference/part.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/part.adoc @@ -18,7 +18,7 @@ [[jetty-ref-guide]] -= Jetty Reference Guide +== Jetty Reference Guide include::architecture/chapter.adoc[] include::platforms/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc index af3f5457e3ba..d407641f2fc2 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc @@ -46,7 +46,7 @@ For the time being I'll leave this buildpack under my personal github account an To show how incredibly easy it is to use the Jetty buildpack with cloudfoundry, this is all the more you need to do to deploy your application. Refer to the CloudFoundry http://docs.cloudfoundry.com/[documentation] to get started, get the `cf` utilities installed and an environment configured. -[source, screen, subs="{sub-order}"] +[source, screen, ] .... $ cf push snifftest --buildpack=git://github.com/jmcc0nn3ll/jetty-buildpack.git @@ -62,7 +62,7 @@ ____ You will be prompted to answer a series of questions describing the execution environment and any additional services you need enabled (databases, etc). -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Instances> 1 @@ -97,7 +97,7 @@ Save configuration?> n Once answered you will see the installation process of your application. -[source, plain, subs="{sub-order}"] +[source, plain, ] ---- Uploading snifftest... OK diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc index 280ae81277ac..1b3732a33a2f 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc @@ -76,7 +76,7 @@ See https://issues.apache.org/bugzilla/show_bug.cgi?id=51687[ASF bug 51687.] You can individually enable each preventer by adding an instance to a Server with the ` addBean(Object)` call. Here's an example of how to do it in code with the `org.eclipse.jetty.util.preventers.AppContextLeakPreventer`: -[source, java, subs="{sub-order}"] +[source, java, ] ---- Server server = new Server(); @@ -89,7 +89,7 @@ You can add the equivalent in code to the `$JETTY_HOME/etc/jetty.xml` file or an Be aware that if you have more than one Server instance in your JVM, you should configure these preventers on just _one_ of them. Here's the example from code put into xml: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc index 1e89d9b6f36f..43dac4b9f6e4 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc @@ -35,7 +35,7 @@ Use one of the following options to configure the switch. An <> file can be placed in your webapp's `WEB-INF` directory to change the default setting of the `DefaultServlet` for memory-mapped file buffers. Create an `override-web.xml` file with appropriate headers for your version of the servlet specification, and place the following inside the `` element: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- default @@ -51,7 +51,7 @@ Create an `override-web.xml` file with appropriate headers for your version of t You can create or update a context xml file that configures your webapp to apply the setting to disable memory-mapped file buffers. Add the following to your context xml file: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- org.eclipse.jetty.servlet.Default.useFileMappedBuffer @@ -65,7 +65,7 @@ Add the following to your context xml file: If you don't want to use either of the other two solutions, you can configure the plugin directly to disable memory-mapped file buffers. Add the following to the plugin's configuration under the `` element: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- <_initParams> false @@ -80,7 +80,7 @@ You can force a `WebAppContext` to always copy a web app directory on deployment The base directory of your web app (i.e. the root directory where your static content exists) will be copied to the link:#ref-temporary-directories[temp directory]. Configure this in an xml file like so: -[source, xml, subs="{sub-order}"] +[source, xml, ] ---- / diff --git a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc index e9953fe55946..89803d38f725 100644 --- a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc @@ -61,7 +61,7 @@ You need to open your Jetty 9.3 `start.ini` and replace the references to the `l For example, in an existing Jetty 9.3 `start.ini` file the module declaration for logging would look like this: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- --module=logging jetty.logging.retainDays=7 @@ -69,7 +69,7 @@ jetty.logging.retainDays=7 In 9.4, it should be replaced by: -[source, screen, subs="{sub-order}"] +[source, screen, ] ---- --module=console-capture jetty.console-capture.retainDays=7 diff --git a/pom.xml b/pom.xml index 4d06b817f934..ea442fb745c2 100644 --- a/pom.xml +++ b/pom.xml @@ -729,6 +729,44 @@ org.asciidoctor asciidoctor-maven-plugin 2.1.0 + + + org.asciidoctor + asciidoctorj-diagram + 2.0.5 + + + + html5 + + asciidoctor-diagram + + + http://www.eclipse.org/jetty/javadoc/${project.version} + http://download.eclipse.org/jetty/stable-9/xref + ${basedir}/.. + https://github.com/eclipse/jetty.project/tree/jetty-9.4.x + https://github.com/eclipse/jetty.project/tree/jetty-10.0.x-doc-refactor/jetty-documentation/src/main/asciidoc + http://central.maven.org/maven2 + ${project.version} + ${maven.build.timestamp} + left + + + + + index + generate-resources + + process-asciidoc + + + src/main/asciidoc + index.adoc + ${project.build.directory}/html + + + org.codehaus.mojo From 72e90b046774dc59d595b4e50652f07adacfb2c0 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Mon, 16 Nov 2020 12:30:35 -0600 Subject: [PATCH 06/14] Fixing image links --- .../asciidoc/administration/jmx/jetty-jconsole.adoc | 12 ++++++------ .../administration/sessions/session-hierarchy.adoc | 2 +- .../startup/startup-windows-service.adoc | 2 +- .../configuring/connectors/configuring-ssl.adoc | 2 +- .../deploying/deployment-architecture.adoc | 6 +++--- .../quick-start/configuring/how-to-configure.adoc | 2 +- .../reference/architecture/basic-architecture.adoc | 12 ++++++------ .../reference/debugging/debugging-with-eclipse.adoc | 6 +++--- .../reference/debugging/debugging-with-intellij.adoc | 8 ++++---- 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc index 89d5453659c6..a9b811ab35dc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc @@ -57,7 +57,7 @@ To monitor Jetty's server status with JConsole, start Jetty and then start JCons After you start Jetty, you will see a dialog box in JConsole with a list of running processes to which you can connect. It should look something like so: -image:images/jconsole1.jpg[image,width=576] +image:administration/jmx/images/jconsole1.jpg[image,width=576] ____ [IMPORTANT] @@ -68,7 +68,7 @@ ____ Select the start.jar entry and click the "Connect" button. A new JConsole window opens: -image:images/jconsole2.jpg[image,width=576] +image:administration/jmx/images/jconsole2.jpg[image,width=576] From this window you can monitor memory usage, thread usage, classloading and VM statistics. You can also perform operations such as a manual garbage collect. @@ -80,7 +80,7 @@ The MBean tab of JConsole allows access to managed objects within the Java appli If you also want to interact with the Jetty JMX implementation via JConsole, you need to start Jetty JMX in a form that JConsole can access. See xref:using-jmx[] for more information. -image:images/jconsole3.png[image,width=576] +image:administration/jmx/images/console3.png[image,width=576] [[jetty-jmc-monitoring]] ==== Monitoring Jetty with JMC @@ -92,7 +92,7 @@ To monitor Jetty's server status with JMC, start Jetty and then start JMC by typ After you start Jetty, you will see a dialog box in JMC with a list of running processes to which you can connect. It should look something like so: -image:images/jmc1.png[image,width=576] +image:administration/jmx/images/jmc1.png[image,width=576] ____ [IMPORTANT] @@ -103,7 +103,7 @@ ____ Double-click the start.jar entry or right-click the start.jar entry and select "Start JMX Console". A new JMC window opens on the right: -image:images/jmc2.png[image,width=576] +image:administration/jmx/images/jmc2.png[image,width=576] From this window you can monitor memory usage, thread usage, classloading and VM statistics. You can also perform operations such as a manual garbage collect. @@ -115,4 +115,4 @@ The MBean tab of JMC allows access to managed objects within the Java applicatio If you also want to interact with the Jetty JMX implementation via JMC, you need to start Jetty JMX in a form that JMC can access. See xref:using-jmx[] for more information. -image:images/jmc3.png[image,width=576] +image:administration/jmx/images/jmc3.png[image,width=576] diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc index 03463d80f7e2..266ae8da8dc3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc @@ -47,7 +47,7 @@ There is only one (1) `SessionDataStore` per `SessionCache`. Visually the session architecture can be represented like this: -image::images/SessionsHierarchy.png[] +image::administration/sessions/images/SessionsHierarchy.png[] ==== Configuring Sessions in the Jetty Distribution diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc index 29e854d330ff..8d07d375c324 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc @@ -295,4 +295,4 @@ Once you have run `prunsrv.exe //IS/` (done for you in the above b Open the Service View and start your service. -image:images/windows-service-jetty.png[image,width=576] +image:administration/strartup/images/windows-service-jetty.png[image,width=576] diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index 1903348bee47..ac3e390b85b6 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -361,7 +361,7 @@ If you imported the key and certificate originally using the PKCS12 method, use The `keystore` only contains the server's private key and certificate. [[img-certificate-chain]] -image::images/certificate-chain.png[title="Certificate chain", alt="Certificate chain"] +image::configuring/connectors/images/certificate-chain.png[title="Certificate chain", alt="Certificate chain"] [literal] .The structure of KeyStore file: diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc index c957e703f177..ca44abcca4a5 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc @@ -27,7 +27,7 @@ The Jetty distribution contains example `DeploymentManager` configurations to de The `DeploymentManager` is the heart of the typical webapp deployment mechanism; it operates as a combination of an Application LifeCycle Graph, Application Providers that find and provide Applications into the Application LifeCycle Graph, and a set of bindings in the graph that control the deployment process. -image:images/Jetty_DeployManager_DeploymentManager_Roles.png[image,width=195] +image:configuring/deploying/images/Jetty_DeployManager_DeploymentManager_Roles.png[image,width=195] [[udm-application-providers]] ==== Application Providers @@ -40,7 +40,7 @@ The main `AppProvider` with the Jetty distribution is the link:{JDURL}/org/eclip The core feature of the `DeploymentManager` is the link:{JDURL}/org/eclipse/jetty/deploy/AppLifeCycle.html[Application LifeCycle Graph]. -image:images/Jetty_DeployManager_AppLifeCycle-1.png[image,width=340] +image:configuring/deploying/images/Jetty_DeployManager_AppLifeCycle-1.png[image,width=340] The nodes and edges of this graph are pre-defined in Jetty along the most common actions and states found. These nodes and edges are not hardcoded; they can be adjusted and added to depending on need (for example, any complex requirements for added workflow, approvals, staging, distribution, coordinated deploys for a cluster or cloud, etc.). @@ -68,7 +68,7 @@ There are four default bindings: * link:{JDURL}/org/eclipse/jetty/deploy/bindings/StandardStopper.html[`StandardStopper`] — Stops the ContextHandler and stops accepting incoming requests. * link:{JDURL}/org/eclipse/jetty/deploy/bindings/StandardUndeployer.html[`StandardUndeployer`] — Removes the ContextHandler from Jetty. -image:images/Jetty_DeployManager_DefaultAppLifeCycleBindings.png[image,width=851] +image:configuring/deploying/images/Jetty_DeployManager_DefaultAppLifeCycleBindings.png[image,width=851] A fifth, non-standard binding, called link:{JDURL}/org/eclipse/jetty/deploy/bindings/DebugBinding.html[DebugBinding], is also available for debugging reasons; it logs the various transitions through the Application LifeCycle. diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc index 6dc0356f81c5..f1f25aa3b960 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc @@ -82,7 +82,7 @@ XML files:: Below is an illustration of how the various Jetty configuration files (`ini`, `mod` and XML) are related: -image:images/Jetty_Configuration_File_Relationships.png[image,width=693] +image:quick-start/configuring/images/Jetty_Configuration_File_Relationships.png[image,width=693] ==== A Closer Look diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc index 9400f2603432..e6aeba5ed028 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc @@ -25,7 +25,7 @@ The Jetty link:{JDURL}/org/eclipse/jetty/server/Server.html[Server] is the plumb a collection of `Connector`s that accept connections and a collection of `Handler`s that service requests from the connections and produce responses, with threads from a thread pool doing the work. -image:images/jetty-high-level-architecture.png[image,width=576] +image:reference/architecture/images/jetty-high-level-architecture.png[image,width=576] While the Jetty request/responses are derived from the Servlet API, the full features of the Servlet API are only available if you configure the appropriate handlers. @@ -50,7 +50,7 @@ Most abstract concepts such as `Connector`s and `Handler`s are captured by inter Generic handling for those interfaces is then provided in an abstract implementation such as `AbstractConnector` and `AbstractHandler`. -image:images/basic-architecture-patterns.png[image,width=576] +image:reference/architecture/images/basic-architecture-patterns.png[image,width=576] The JSR77 inspired life cycle of most Jetty components is represented by the `LifeCycle` interface and the `AbstractLifeCycle` implementation used as the base of many Jetty components. @@ -90,7 +90,7 @@ therefore using Jetty as a generic network server. A `Handler` is the component that deals with HTTP requests and responses. The core API of a handler is the handle method: -image:images/basic-architecture-handlers.png[image,width=576] +image:reference/architecture/images/basic-architecture-handlers.png[image,width=576] [source, java, ] ---- @@ -119,7 +119,7 @@ This gives three styles of Handler: You can combine handlers to handle different aspects of a request by nesting them, calling them in sequence, or by combining the two models. -image:images/basic-architecture-nested-handlers.png[image,width=576] +image:reference/architecture/images/basic-architecture-nested-handlers.png[image,width=576] Handlers called in sequence perform actions that do not depend on the next invocation, nor on the handler order. They handle a request and generate the response without interacting with other handlers. @@ -136,7 +136,7 @@ See also xref:writing-custom-handlers[]. The `ServletHandler` is a `Handler` that generates content by passing the request to any configured Servlet Filters and then to a Servlet mapped by a URI pattern. -image:images/basic-architecture-servlet-handler.png[image,width=576] +image:reference/architecture/images/basic-architecture-servlet-handler.png[image,width=576] A `ServletHandler` is normally deployed within the scope of a `ServletContext`, which is a `ContextHandler` that provides convenience methods for mapping URIs to servlets. @@ -170,7 +170,7 @@ A `WebAppContext` is a derivation of `ServletContextHandler` that supports the s of a web application and configuration of session, security, listeners, filter, servlets, and JSP via a `web.xml` descriptor normally found in the `/WEB-INF` directory of a web application. -image:images/basic-architecture-web-application.png[image,width=576] +image:reference/architecture/images/basic-architecture-web-application.png[image,width=576] Essentially `WebAppContext` is a convenience class that assists the construction and configuration of other handlers to achieve a standard web application configuration. diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc index c59f38e9fbc9..c996896dff14 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc @@ -30,15 +30,15 @@ Next we need to link the Eclipse project with the deployed webapp. 1. Within Eclipse, right-click on the project containing the webapp deployed into jetty and select *Debug -> Debug Configurations* and create a new configuration of **Remote Java Application**. Make sure the port you choose is the same as the one you added in xref:enable-remote-debugging[]. + -image:images/debug-eclipse-1.png[image,width=576] +image:reference/debugging/images/debug-eclipse-1.png[image,width=576] 2. Next in your webapp you can set a breakpoint within a servlet which when it is tripped will halt the remote jvm's processing thread to await for debugging commands from your Eclipse instance. + -image:images/debug-eclipse-2.png[image,width=576] +image:reference/debugging/images/debug-eclipse-2.png[image,width=576] 3. Accessing that servlet within your browser, pointed at your remote debug configurated jetty-distribution, should transition your Eclipse instance to the standard Debug view. + -image:images/debug-eclipse-3.png[image,width=576] +image:reference/debugging/images/debug-eclipse-3.png[image,width=576] [[eclipse-within-eclipse]] ==== Within Eclipse diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc index 7e19c698314f..4790fec7b33a 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc @@ -31,17 +31,17 @@ Next we need to link the IntelliJ project with the deployed webapp. Add a new configuration by clicking the "+" icon. Choose **Remote**. Make sure the port you choose is the same as the one you added in xref:enable-remote-debugging[]. + -image:images/intellij_new_remote_config.png[image,width=800] +image:reference/debugging/images/intellij_new_remote_config.png[image,width=800] 2. Next in your webapp you can set a breakpoint within a servlet which when it is tripped will halt the remote jvm's processing thread to await for debugging commands from your IntelliJ instance. To set a breakpoint, simply open the servlet or any other class you want to debug and click left to the line you want to set the breakpoint at (where the red dot is on the next screenshot). The red dot and red background on the line mark the breakpoint. + -image:images/intellij_set_breakpoint.png[image,width=800] +image:reference/debugging/images/intellij_set_breakpoint.png[image,width=800] 3. Accessing that servlet within your browser, pointed at your remote debug configured jetty-distribution, should transition your IntelliJ instance to the standard debugger view. + -image:images/intellij_debug_view.png[image,width=800] +image:reference/debugging/images/intellij_debug_view.png[image,width=800] [[intellij-within-intellij]] ==== Within IntelliJ @@ -55,7 +55,7 @@ In your *Console* tab within IntelliJ you should see your application startup an The same thing works for unit tests. Instead of the main method run debug on the test method you want to debug. -image:images/intellij_select_debug.png[image,width=800] +image:reference/debugging/images/intellij_select_debug.png[image,width=800] Debugging in IntelliJ is extremely powerful. For example it's possible to have conditional breakpoints that only trigger a break if the configured conditions are met. From b0b42654ce2bfce85c25d2f9e92748589a374e00 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Tue, 17 Nov 2020 14:13:31 -0600 Subject: [PATCH 07/14] Cleaning up code reference formatting --- .../asciidoc/administration/alpn/alpn.adoc | 16 ++-- .../annotations/quick-annotations-setup.adoc | 2 +- .../using-annotations-embedded.adoc | 4 +- .../annotations/using-annotations.adoc | 4 +- .../extras/cross-origin-filter.adoc | 2 +- .../administration/extras/debug-handler.adoc | 2 +- .../extras/default-handler.adoc | 2 +- .../administration/extras/dos-filter.adoc | 2 +- .../administration/extras/header-filter.adoc | 2 +- .../extras/moved-context-handler.adoc | 2 +- .../administration/extras/qos-filter.adoc | 6 +- .../extras/resource-handler.adoc | 2 +- .../extras/rewrite-handler.adoc | 8 +- .../extras/shutdown-handler.adoc | 4 +- .../extras/statistics-handler.adoc | 8 +- .../fastcgi/configuring-fastcgi.adoc | 10 +- .../http2/configuring-haproxy.adoc | 14 +-- .../http2/configuring-http2.adoc | 2 +- .../http2/configuring-push.adoc | 2 +- .../administration/http2/enabling-http2.adoc | 6 +- .../administration/jmx/jetty-jconsole.adoc | 4 +- .../jmx/jetty-jmx-annotations.adoc | 2 +- .../administration/jmx/using-jmx.adoc | 28 +++--- .../jndi/jndi-configuration.adoc | 28 +++--- .../administration/jndi/jndi-datasources.adoc | 28 +++--- .../administration/jndi/jndi-embedded.adoc | 2 +- .../administration/jndi/quick-jndi-setup.adoc | 4 +- .../administration/jndi/using-jndi.adoc | 10 +- .../configuring-jetty-request-logs.adoc | 6 +- .../logging/configuring-logging-modules.adoc | 20 ++-- .../default-logging-with-stderrlog.adoc | 10 +- .../logging/example-apache-log4j.adoc | 2 +- .../example-java-util-logging-native.adoc | 2 +- .../logging/example-java-util-logging.adoc | 2 +- .../logging/example-logback.adoc | 2 +- .../example-slf4j-multiple-loggers.adoc | 2 +- .../administration/runner/jetty-runner.adoc | 44 ++++----- .../session-clustering-gcloud-datastore.adoc | 10 +- .../legacy/session-clustering-infinispan.adoc | 6 +- .../legacy/session-clustering-jdbc.adoc | 16 ++-- .../legacy/session-clustering-mongodb.adoc | 14 +-- .../setting-session-characteristics.adoc | 18 ++-- .../legacy/using-persistent-sessions.adoc | 6 +- .../session-configuration-file-system.adoc | 4 +- .../session-configuration-gcloud.adoc | 6 +- .../session-configuration-hazelcast.adoc | 8 +- .../session-configuration-infinispan.adoc | 16 ++-- .../sessions/session-configuration-jdbc.adoc | 4 +- ...nfiguration-memcachedsessiondatastore.adoc | 2 +- .../session-configuration-mongodb.adoc | 4 +- .../session-configuration-sessioncache.adoc | 2 +- .../sessions/sessions-usecases.adoc | 2 +- .../startup/screen-empty-base-listconfig.adoc | 2 +- .../startup/screen-empty-base.adoc | 2 +- .../screen-http-webapp-deploy-listconfig.adoc | 2 +- .../startup/screen-http-webapp-deploy.adoc | 2 +- .../startup/screen-list-logging-modules.adoc | 2 +- .../startup/screen-list-modules.adoc | 2 +- .../administration/startup/start-jar.adoc | 14 +-- .../startup/startup-base-vs-home.adoc | 12 +-- .../startup/startup-classpath.adoc | 2 +- .../administration/startup/startup-jpms.adoc | 18 ++-- .../startup/startup-modules.adoc | 6 +- .../startup/startup-overview.adoc | 14 +-- .../startup/startup-unix-service.adoc | 26 ++--- .../startup/startup-windows-service.adoc | 12 +-- .../tuning/garbage-collection.adoc | 6 +- .../administration/tuning/high-load.adoc | 12 +-- .../administration/tuning/limit-load.adoc | 2 +- .../connectors/configuring-connectors.adoc | 28 +++--- .../configuring-ssl-distribution.adoc | 6 +- .../connectors/configuring-ssl.adoc | 46 ++++----- .../contexts/configuring-virtual-hosts.adoc | 10 +- .../contexts/custom-error-pages.adoc | 12 +-- .../serving-webapp-from-particular-port.adoc | 8 +- .../contexts/setting-context-path.adoc | 2 +- .../contexts/setting-form-size.adoc | 6 +- .../contexts/temporary-directories.adoc | 16 ++-- ...onfiguring-specific-webapp-deployment.adoc | 12 +-- .../deploying/deployment-architecture.adoc | 4 +- .../deployment-processing-webapps.adoc | 10 +- .../configuring/deploying/hot-deployment.adoc | 2 +- .../deploying/quickstart-webapp.adoc | 14 +-- .../deploying/static-content-deployment.adoc | 2 +- .../configuring/jsp/configuring-jsp.adoc | 16 ++-- .../configuring/security/authentication.adoc | 32 +++---- .../security/configuring-form-size.adoc | 2 +- .../configuring/security/jaas-support.adoc | 14 +-- .../security/jetty-home-and-jetty-base.adoc | 26 ++--- .../configuring/security/openid-support.adoc | 16 ++-- .../security/secure-passwords.adoc | 10 +- .../security/serving-aliased-files.adoc | 2 +- ...tting-port80-access-for-non-root-user.adoc | 20 ++-- .../configuring/security/spnego-support.adoc | 14 +-- .../asciidoc/development/ant/jetty-ant.adoc | 48 +++++----- .../clients/http/http-client-api.adoc | 40 ++++---- .../http/http-client-authentication.adoc | 8 +- .../clients/http/http-client-cookie.adoc | 18 ++-- .../clients/http/http-client-intro.adoc | 6 +- .../clients/http/http-client-proxy.adoc | 4 +- .../clients/http/http-client-transport.adoc | 12 +-- .../continuations/continuations-patterns.adoc | 4 +- .../continuations/continuations-using.adoc | 8 +- .../embedding/embedded-examples.adoc | 4 +- .../embedding/embedding-jetty.adoc | 18 ++-- .../examples/embedded-file-server.adoc | 4 +- .../examples/embedded-many-connectors.adoc | 4 +- .../examples/embedded-minimal-servlet.adoc | 4 +- .../examples/embedded-one-webapp.adoc | 4 +- .../embedded-secured-hello-handler.adoc | 4 +- .../examples/embedded-split-file-server.adoc | 4 +- .../embedding/jetty-helloworld.adoc | 8 +- .../development/frameworks/metro.adoc | 4 +- .../asciidoc/development/frameworks/osgi.adoc | 60 ++++++------ .../development/frameworks/spring-usage.adoc | 4 +- .../asciidoc/development/frameworks/weld.adoc | 6 +- .../handlers/writing-custom-handlers.adoc | 10 +- .../maven/jetty-jspc-maven-plugin.adoc | 12 +-- .../maven/jetty-maven-helloworld.adoc | 22 ++--- .../development/maven/jetty-maven-plugin.adoc | 68 ++++++------- .../development/websockets/intro/chapter.adoc | 2 +- .../jetty/jetty-websocket-api-adapter.adoc | 2 +- .../jetty-websocket-api-annotations.adoc | 2 +- .../jetty/jetty-websocket-api-listener.adoc | 2 +- .../jetty-websocket-api-send-message.adoc | 24 ++--- .../jetty/jetty-websocket-api-session.adoc | 10 +- .../jetty/jetty-websocket-client-api.adoc | 6 +- .../jetty/jetty-websocket-server-api.adoc | 6 +- .../configuring/how-to-configure.adoc | 12 +-- .../configuring/what-to-configure.adoc | 12 +-- .../jetty-common-configuration.adoc | 12 +-- .../getting-started/jetty-running.adoc | 4 +- .../introduction/jetty-coordinates.adoc | 4 +- .../architecture/basic-architecture.adoc | 2 +- .../architecture/jetty-classloading.adoc | 8 +- .../server-side-architecture.adoc | 2 +- .../contributing/coding-standards.adoc | 2 +- .../reference/contributing/documentation.adoc | 12 +-- .../contributing/release-testing.adoc | 20 ++-- .../contributing/releasing-jetty.adoc | 24 ++--- .../reference/contributing/source-build.adoc | 2 +- .../debugging/enable-remote-debugging.adoc | 6 +- .../reference/jetty-xml/jetty-env-xml.adoc | 4 +- .../jetty-xml/jetty-web-xml-config.adoc | 2 +- .../reference/jetty-xml/jetty-xml-config.adoc | 2 +- .../reference/jetty-xml/jetty-xml-syntax.adoc | 96 +++++++++---------- .../reference/jetty-xml/jetty-xml-usage.adoc | 8 +- .../reference/jetty-xml/override-web-xml.adoc | 6 +- .../reference/jetty-xml/webdefault-xml.adoc | 8 +- .../reference/platforms/cloudfoundry.adoc | 6 +- .../preventing-memory-leaks.adoc | 4 +- .../troubleshooting-locked-files.adoc | 8 +- .../upgrading/upgrading-9.3-to-9.4.adoc | 4 +- 153 files changed, 796 insertions(+), 796 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc index f55d30129136..d567bfbb7abc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc @@ -90,7 +90,7 @@ or alternatively you need the link:#alpn-openjdk8-agent[Jetty ALPN agent]. In the case of the Jetty ALPN boot library, start the JVM as follows: -[source, plain, ] +[source, plain] ---- java -Xbootclasspath/p: ... ---- @@ -121,7 +121,7 @@ transforms, if necessary, the relevant OpenJDK classes to provide the ALPN suppo To use the Jetty ALPN agent, start the JVM as follows: -[source, plain, ] +[source, plain] ---- java -javaagent: ... ---- @@ -178,7 +178,7 @@ ____ When starting the Jetty server, especially when using Jetty embedded, it may be possible that you see an error similar to this: -[source, plain, ] +[source, plain] ---- IllegalStateException: no ALPN processor ---- @@ -217,7 +217,7 @@ Refer to `ALPN` Javadocs and to the examples below for further details about cli [[alpn-openjdk8-client-example]] ==== Client Example -[source, java, ] +[source, java] ---- SSLContext sslContext = ...; SSLSocket sslSocket = (SSLSocket)context.getSocketFactory().createSocket("localhost", server.getLocalPort()); @@ -257,7 +257,7 @@ The ALPN implementation calls `ALPN.ClientProvider` methods `protocols()`, `unsu The example for `SSLEngine` is identical, and you just need to replace the `SSLSocket` instance with an `SSLEngine` instance. -[source, java, ] +[source, java] ---- SSLEngine sslEngine = ...; ALPN.put(sslEngine, new ALPN.ServerProvider() @@ -294,7 +294,7 @@ Failing to do so will cause a memory leak. You can write and run unit tests that use the ALPN implementation. The solution that we use with Maven is to specify an additional command line argument to the Surefire plugin: -[source, xml, ] +[source, xml] ---- @@ -427,7 +427,7 @@ This section is for Jetty developers that need to update the ALPN implementation Clone the OpenJDK repository with the following command: -[source, screen, ] +[source, screen] .... $ hg clone https://hg.openjdk.java.net/jdk8u/jdk8u jdk8u $ cd !$ @@ -436,7 +436,7 @@ $ ./get_source.sh To update the source to a specific tag, use the following command: -[source, screen, ] +[source, screen] .... $ ./make/scripts/hgforest.sh update diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc index 26f3767fd385..0706d2d783e4 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/quick-annotations-setup.adoc @@ -39,7 +39,7 @@ Below is an example application that sets up the standard `test-spec.war` webapp It can also be found in the Jetty GitHub repository on the examples/embedded page as link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedded[`ServerWithAnnotations.java`.] Note that the `test-spec.war` uses not only annotations, but also link:#jndi[JNDI], so this example also enables their processing (via the link:#jndi-configuration-classes[org.eclipse.jetty.plus.webapp.EnvConfiguration], link:#jndi-configuration-classes[org.eclipse.jetty.plus.webapp.PlusConfiguration] and their related jars). -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ServerWithAnnotations.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc index 61f326343ee5..ad97e5355c62 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc @@ -39,7 +39,7 @@ The example also adds in the configuration classes that are responsible for JNDI The code is as follows: -[source, java, ] +[source, java] ---- import org.eclipse.jetty.security.HashLoginService; import org.eclipse.jetty.server.Server; @@ -101,7 +101,7 @@ On lines 30, 33 and 37 JNDI resources that we will be able to reference with @Re With the setup above, a servlet that uses annotations and Jetty will honour the annotations when the webapp is deployed can be created: -[source, java, ] +[source, java] ---- import javax.annotation.security.DeclareRoles; import javax.annotation.security.RunAs; diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc index 5c4673b028a5..031aa967753e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc @@ -135,7 +135,7 @@ It will match all `ServletContainerInitializer` classed not explicitly named in Here is an example, setting the context attribute in code (although you can also do the link:#intro-jetty-configuration-webapps[same in xml]): -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerOrder", @@ -154,7 +154,7 @@ In this case, you can define the `org.eclipse.jetty.containerInitializerExclusio This is a regular expression that defines http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html[patterns] of classnames that you want to exclude. Here's an example, setting the context attribute in code, although you may do exactly the link:#intro-jetty-configuration-webapps[same in xml]: -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerExclusionPattern", diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc index 1435ee7263bb..b239815dcae8 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/cross-origin-filter.adoc @@ -79,7 +79,7 @@ Default value is the empty list. A typical configuration could be: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc index 3c4ac08f423f..63a8088c2993 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/debug-handler.adoc @@ -38,7 +38,7 @@ The debug handler can be added to Jetty by activating the debug module. ==== Embedded usage -[source, java, ] +[source, java] ---- Server server = new Server(8080); RolloverFileOutputStream outputStream = new RolloverFileOutputStream("MeinLogPfad/yyyy_mm_dd.request.log", true,10); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc index 569a8f4f5d40..c8ad02112010 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc @@ -39,7 +39,7 @@ _____ The `DefaultHandler` will also handle serving out the `flav.ico` file should a request make it through all of the other handlers without being resolved. _____ -[source, java, ] +[source, java] ---- Server server = new Server(8080); HandlerList handlers = new HandlerList(); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc index 58938b5a66cc..55494a9ee382 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/dos-filter.adoc @@ -55,7 +55,7 @@ Place the configuration in a webapp's `web.xml` or `jetty-web.xml`. The default configuration allows 25 requests per connection at a time, servicing more important requests first, and queuing up the rest. This example allow 30 requests at a time: -[source, xml, ] +[source, xml] ---- DoSFilter diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc index 74ce723b3320..9306fdd354a2 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc @@ -55,7 +55,7 @@ ____ Each action must be separated by a comma. ____ -[source, xml, ] +[source, xml] ---- HeaderFilter diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc index 7c870366b6a5..f8c4accdeb44 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/moved-context-handler.adoc @@ -45,7 +45,7 @@ You create a new xref:configuring-contexts[context xml] file in `{$jetty/.base}/ Below is an example. This is a permanent redirection, which also preserves `pathinfo` and query strings on the redirect: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc index 18586a86a589..0f48035d3752 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/qos-filter.adoc @@ -83,7 +83,7 @@ Place the configuration in a webapp's `web.xml` or `jetty-web.xml`. The default configuration processes ten requests at a time, servicing more important requests first and queuing up the rest. This example processes fifty requests at a time: -[source, xml, ] +[source, xml] ---- QoSFilter @@ -126,7 +126,7 @@ This allows a context external mechanism (for example, JMX via `ContextHandler.M You can use the `` syntax to map the QoSFilter to a servlet, either by using the servlet name, or by using a URL pattern. In this example, a URL pattern applies the QoSFilter to every request within the web application context: -[source, xml, ] +[source, xml] ---- QoSFilter @@ -147,7 +147,7 @@ To customize the priority, subclass QoSFilter and then override the `getPriority You can then use this subclass as your QoS filter. Here's an example: -[source, java, ] +[source, java] ---- public class ParsePriorityQoSFilter extends QoSFilter { diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc index e3fe4822a34f..64ede88227d4 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc @@ -51,7 +51,7 @@ The default css is called `jetty-dir.css` and is located in the `jetty-util` pac The following is an example of a split fileserver, able to serve static content from multiple directory locations. Since this handler does not return 404's on content you are able to iteratively try multiple resource handlers to resolve content. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index 005b4e226308..abc63defea47 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -31,7 +31,7 @@ The most common use is to rewrite request URIs, but it is capable of much more: The standard Jetty distribution bundle contains the `jetty-rewrite` link:#startup-modules[module], so all you need to do is to enable it using one of the link:#start-jar[module commands], eg: -[source, screen, ] +[source, screen] .... $ java -jar start.jar --add-to-start=rewrite .... @@ -45,7 +45,7 @@ _____ The rewrite module enables the following Jetty xml config file on the execution path: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-rewrite/src/main/config/etc/jetty-rewrite.xml[] ---- @@ -54,7 +54,7 @@ As the commented out code shows, you configure the `RewriteHandler` by adding va There is an example of link:#rewrite-rules[rules] configuration in the standard distribution in the `demo-base/etc/demo-rewrite-rules.xml` file: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/demo-rewrite-rules.xml[] ---- @@ -63,7 +63,7 @@ include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base This is an example for embedded Jetty, which does something similar to the configuration file example above: -[source, java, ] +[source, java] ---- Server server = new Server(); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc index 2d384ac8e303..7315eaa5f604 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/shutdown-handler.adoc @@ -36,7 +36,7 @@ If `_exitJvm` is set to true a hard `System.exit()` call is being made. This is an example of how you can setup this handler directly with the Server. It can also be added as a part of handler chain or collection. -[source, java, ] +[source, java] ---- Server server = new Server(8080); HandlerList handlers = new HandlerList(); @@ -48,7 +48,7 @@ It can also be added as a part of handler chain or collection. This is an example that you can use to call the shutdown handler from within java. -[source, java, ] +[source, java] ---- public static void attemptShutdown(int port, String shutdownCookie) { try { diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc index 01cd2d3b6c9d..08040a709454 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc @@ -35,7 +35,7 @@ Jetty currently has two main statistics collection mechanisms: * The `StatisticsHandler` class may be used to collect statistics for HTTP requests. The `StatisticsHandler` and `ConnectionStatistics` are not included in the default Jetty configuration, these need to be configured manually or enabled using the Jetty `stats` module on the command line. -[source, screen, ] +[source, screen] .... $ java -jar {$jetty.home}/start.jar --add-to-start=stats .... @@ -58,7 +58,7 @@ You can enable the `StatisticsHandler` by activating the `stats` modules on the Alternately, if you are making multiple changes to the Jetty configuration, you could include statistics handler configuration into your own Jetty xml configuration. The following fragment shows how to configure a top level statistics handler: -[source, xml, ] +[source, xml] ---- @@ -77,7 +77,7 @@ The current and maximum number of connections are the only "live" statistics. The following example shows how to turn on connection statistics in the Jetty XML format. -[source, xml, ] +[source, xml] ---- @@ -91,7 +91,7 @@ The following example shows how to turn on connection statistics in the Jetty XM A special variant of `ConnectionStatistics` called `IncludeExcludeConnectionStatistics` allows you to refine which types of connection you want to collect statistics for. The following example shows how this can be used to record statistics only for WebSocket connections. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc index e36ef466ec07..25013557712d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc @@ -31,7 +31,7 @@ Refer to xref:jetty-downloading[] for more information about how to install Jett The fourth step is to create a Jetty base directory (see xref:startup-base-and-home[]), called in the following `$JETTY_BASE`, where you setup the configuration needed to support FastCGI in Jetty, and configure the `fcgi`, `http` and `deploy` modules, so that Jetty will be able to accept HTTP requests from browsers, convert them in FastCGI, and proxy them to `php-fpm`: -[source, screen, ] +[source, screen] .... $ mkdir -p /usr/jetty/wordpress $ cd /usr/jetty/wordpress @@ -46,7 +46,7 @@ For FastCGI there is no web application that needs developed - all the work has As such you only need to deploy a Jetty context XML file that configures the web application directly. Copy and paste the following content as `$JETTY_BASE/webapps/jetty-wordpress.xml`: -[source, xml, ] +[source, xml] ---- @@ -138,7 +138,7 @@ Refer to the link:{JDURL}/org/eclipse/jetty/fcgi/server/proxy/FastCGIProxyServle The last step is to start Jetty (see xref:startup[]) and navigate to `http://localhost:8080` with your browser and enjoy WordPress: -[source, screen, ] +[source, screen] .... $ cd $JETTY_BASE $ java -jar /opt/jetty/start.jar @@ -151,7 +151,7 @@ In order to configure Jetty to listen for HTTP/2 requests from clients that are Enabling the `http2` is easy; in additions to the modules you have enabled above, add the `http2` module: -[source, screen, ] +[source, screen] .... $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http2 @@ -171,7 +171,7 @@ These will setup a clear text connector on port 8080 for HTTP/1.1 and a TLS conn At this point, you can start Jetty (see xref:startup[]), hit `http://localhost:8080` with your browser and enjoy WordPress via HTTP/2 using a HTTP/2 enabled browser: -[source, screen, ] +[source, screen] .... $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index 607d8f56970a..3b0c08536027 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -34,7 +34,7 @@ The instructions that follow are for Linux. You will need HAProxy 1.5 or later, because it provides support for SSL and ALPN, both required by HTTP/2. Most Linux distributions have the HAProxy package available to be installed out of the box. For example on Ubuntu 15.04: -[source,screen, ] +[source,screen] .... $ sudo apt-get install haproxy .... @@ -62,7 +62,7 @@ HAProxy will need a single file containing the X509 certificates and the private Let's use `keytool` to generate a self signed certificate: -[source,screen, ] +[source,screen] .... $ keytool -genkeypair -keyalg RSA -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -ext SAN=DNS:domain.com What is your first and last name? @@ -86,21 +86,21 @@ We need to extract the certificate and the private key in PEM format. To extract the certificate into `certificate.pem`: -[source,screen, ] +[source,screen] .... $ keytool -exportcert -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -rfc -file certificate.pem .... To export the private key into `private_key.pem`: -[source,screen, ] +[source,screen] .... $ openssl pkcs12 -in keystore.p12 -nodes -nocerts -out private_key.pem -passin pass:storepwd .... At this point you just need to concatenate the two files into one, in the correct order: -[source,screen, ] +[source,screen] .... $ cat certificate.pem private_key.pem > domain.pem .... @@ -157,7 +157,7 @@ Since the `http2c` module depends on the `http` module, the `http` module will b Additionally, you will also enable the `deploy` module to be able to deploy a sample web application: -[source,screen, ] +[source,screen] .... $ JETTY_BASE=haproxy-jetty-http2 $ mkdir $JETTY_BASE @@ -167,7 +167,7 @@ $ java -jar $JETTY_HOME/start.jar --add-to-start=http2c,deploy Now let's deploy a demo web application and start Jetty: -[source,screen, ] +[source,screen] .... $ cd $JETTY_BASE $ cp $JETTY_HOME/demo-base/webapps/async-rest.war $JETTY_BASE/webapps/ diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 7e510ac809cb..3dc0bda8e707 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -24,7 +24,7 @@ existing connector. Thus configuring HTTP/2 is a combination of configuring common properties on the connector and HTTP/2 specific properties on the connection factory. The modules and XML files involved can be seen with the following commands: -[source,screen, ] +[source,screen] .... $ java -jar $JETTY_HOME/start.jar --list-modules ... diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc index a6cac02ecaa6..1bc91127d14a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-push.adoc @@ -24,7 +24,7 @@ This will reduce the amount of round-trips necessary to retrieve all the resourc HTTP/2 Push can be automated in your application by configuring a link:{JDURL}/org/eclipse/jetty/servlets/PushCacheFilter.html[`PushCacheFilter`] in the `web.xml`, in this way: -[source, xml, ] +[source, xml] ---- ` element to the `` element of the Jetty Maven Plugin: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -124,14 +124,14 @@ Connecting to the remote JVM is a two step process: The configuration for the RMI registry and the RMI server is specified by a `JMXServiceURL`. The string format of an RMI `JMXServiceURL` is: -[source, screen, ] +[source, screen] ---- service:jmx:rmi://:/jndi/rmi://:/jmxrmi ---- Default values are: -[source, screen, ] +[source, screen] ---- rmi_server_host = localhost rmi_server_port = 1099 @@ -149,7 +149,7 @@ If you need to allow JMX remote access through a firewall, you must open both th Examples: -[source, screen, ] +[source, screen] ---- service:jmx:rmi:///jndi/rmi:///jmxrmi rmi_server_host = local host address @@ -183,7 +183,7 @@ This is especially important when binding the RMI server host to the loopback ad Similarly to link:#jmx-standalone-jetty[enabling JMX in a standalone Jetty server], you enable the `jmx-remote` module: -[source, screen, ] +[source, screen] ---- $ cd ${jetty.base} $ java -jar {$jetty.home}/start.jar --add-to-start=jmx-remote @@ -193,7 +193,7 @@ $ java -jar {$jetty.home}/start.jar --add-to-start=jmx-remote When running Jetty embedded into an application, create and configure a `ConnectorServer`: -[source, java, ] +[source, java] ---- Server server = new Server(); @@ -217,7 +217,7 @@ For a complete guide to controlling authentication and authorization in JMX, see To authorize access to the `JMXConnectorServer` you can use this configuration, where the `jmx.password` and `jmx.access` files have the format specified in the blog entry above: -[source, xml, ] +[source, xml] ---- @@ -251,7 +251,7 @@ To authorize access to the `JMXConnectorServer` you can use this configuration, Similarly, in code: -[source, java, ] +[source, java] ---- JMXServiceURL jmxURL = new JMXServiceURL("rmi", null, 1099, "/jndi/rmi:///jmxrmi"); Map env = new HashMap<>(); @@ -269,7 +269,7 @@ The JMX communication via RMI happens by default in clear-text. It is possible to configure the `ConnectorServer` with a `SslContextFactory` so that the JMX communication via RMI is encrypted: -[source, xml, ] +[source, xml] ---- @@ -288,7 +288,7 @@ It is possible to configure the `ConnectorServer` with a `SslContextFactory` so Similarly, in code: -[source, java, ] +[source, java] ---- SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStorePath("/path/to/keystore"); @@ -313,7 +313,7 @@ If that is not the case (for example the certificate is self-signed), then you n For example, trying to connect using the JDK standard `JMXConnector` with both the RMI server and the RMI registry to `domain.com`: -[source, java, ] +[source, java] ---- // System properties necessary for an RMI client to trust a self-signed certificate. System.setProperty("javax.net.ssl.trustStore", "/path/to/trustStore"); @@ -331,7 +331,7 @@ try (JMXConnector client = JMXConnectorFactory.connect(jmxURL, clientEnv)) Similarly, to launch JMC: -[source, java, ] +[source, java] ---- $ jmc -vmargs -Djavax.net.ssl.trustStore=/path/to/trustStore -Djavax.net.ssl.trustStorePassword=secret ---- @@ -347,7 +347,7 @@ In this case you want to configure the `ConnectorServer` with a `JMXServiceURL` Then you setup the local port forwarding with the SSH tunnel: -[source, screen, ] +[source, screen] ---- $ ssh -L 1099:localhost:1099 @ ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc index 6c481bc57112..0216ce1c84c7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc @@ -25,7 +25,7 @@ Sometimes it is useful to pass configuration information to a webapp at runtime that you either cannot or cannot conveniently code into a `web.xml` env-entry. In such cases, you can use the `org.eclipse.jetty.plus.jndi.EnvEntry` class, and even override an entry of the same name in `web.xml`. -[source, xml, ] +[source, xml] ---- @@ -57,7 +57,7 @@ Be aware that if you take advantage of this feature, your web application is __n To use the `env-entry` configured above, use code in your `servlet/filter/etc.`, such as: -[source, java, ] +[source, java] ---- import javax.naming.InitialContext; @@ -103,7 +103,7 @@ Jetty can use any DataSource implementation available on its classpath. In this example, the DataSource is from the http://db.apache.org/derby[Derby] relational database, but you can use any implementation of a `javax.sql.DataSource`. This example configures it as scoped to a web app with the id of __wac__: -[source, xml, ] +[source, xml] ---- @@ -124,7 +124,7 @@ If you do not have the appropriate `resource-ref` set up in your `web.xml`, it i Here's an example `web.xml` declaration for the datasource above: -[source, xml, ] +[source, xml] ---- jdbc/myds @@ -135,7 +135,7 @@ Here's an example `web.xml` declaration for the datasource above: To look up your DataSource in your `servlet/filter/etc.`: -[source, java, ] +[source, java] ---- import javax.naming.InitialContext; import javax.sql.DataSource; @@ -167,7 +167,7 @@ Jetty can bind any implementation of the JMS destinations and connection factori You just need to ensure the implementation Jars are available on Jetty's classpath. Here is an example of binding an http://activemq.apache.org[ActiveMQ] in-JVM connection factory: -[source, xml, ] +[source, xml] ---- @@ -184,7 +184,7 @@ Here is an example of binding an http://activemq.apache.org[ActiveMQ] in-JVM con The entry in `web.xml` would be: -[source, xml, ] +[source, xml] ---- jms/connectionFactory @@ -200,7 +200,7 @@ TODO: put in an example of a QUEUE from progress demo Jetty also provides infrastructure for access to `javax.mail.Sessions` from within an application: -[source, xml, ] +[source, xml] ---- @@ -240,7 +240,7 @@ Jetty does not ship with one as standard, but you can plug in the one you prefer You can configure a transaction manager using the link:{JDURL}/org/eclipse/jetty/plus/jndi/Transaction.html[JNDI Transaction] object in a Jetty config file. The following example configures the http://www.atomikos.com/[Atomikos] transaction manager: -[source, xml, ] +[source, xml] ---- @@ -257,7 +257,7 @@ For example: In a context xml file: -[source, xml, ] +[source, xml] ---- @@ -275,7 +275,7 @@ In a context xml file: In a `web.xml` file: -[source, xml, ] +[source, xml] ---- jdbc/mydatasource @@ -293,7 +293,7 @@ For the example above, you can refer to the `jdbc/mydatasource` resource as `jdb In a context xml file declare `jdbc/mydatasource`: -[source, xml, ] +[source, xml] ---- @@ -312,7 +312,7 @@ In a context xml file declare `jdbc/mydatasource`: Then in a `WEB-INF/jetty-env.xml` file, link the name `jdbc/mydatasource` to the name you want to reference it as in `web.xml`, which in this case is `jdbc/mydatasource1`: -[source, xml, ] +[source, xml] ---- @@ -323,7 +323,7 @@ Then in a `WEB-INF/jetty-env.xml` file, link the name `jdbc/mydatasource` to the Now you can refer to `jdbc/mydatasource1` in the `web.xml` like this: -[source, xml, ] +[source, xml] ---- jdbc/mydatasource1 diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc index 487e84d06e61..524e5c5f53d3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc @@ -28,7 +28,7 @@ ____ All of these examples correspond to a `resource-ref` in `web.xml`. -[source, xml, ] +[source, xml] ---- My DataSource Reference @@ -71,7 +71,7 @@ The following is a list of the pooled datasource examples we have worked with in Connection pooling, available at http://search.maven.org/remotecontent?filepath=com/zaxxer/HikariCP/1.4.0/HikariCP-1.4.0.jar[HikariCP Download]. All configuration options for HikariCP are described here: https://github.com/brettwooldridge/HikariCP[HikariCP documentation]. -[source, xml, ] +[source, xml] ---- @@ -102,7 +102,7 @@ All configuration options for HikariCP are described here: https://github.com/br Connection pooling, available at http://jolbox.com/index.html?page=http://jolbox.com/download.html[BoneCP Download]. All configuration options for BoneCP are described here: http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCPDataSource.html[BoneCP API]. -[source, xml, ] +[source, xml] ---- @@ -128,7 +128,7 @@ All configuration options for BoneCP are described here: http://jolbox.com/bonec Connection pooling, available at https://repo1.maven.org/maven2/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar[c3p0 Jar]. -[source, xml, ] +[source, xml] ---- @@ -149,7 +149,7 @@ Connection pooling, available at https://repo1.maven.org/maven2/c3p0/c3p0/0.9.1. Connection pooling, available at https://repo1.maven.org/maven2/commons-dbcp/commons-dbcp/1.2/commons-dbcp-1.2.jar[dbcp Jar]. -[source, xml, ] +[source, xml] ---- @@ -171,7 +171,7 @@ Connection pooling, available at https://repo1.maven.org/maven2/commons-dbcp/com Connection pooling + XA transactions. -[source, xml, ] +[source, xml] ---- @@ -206,7 +206,7 @@ Connection pooling + XA transactions. Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, ] +[source, xml] ---- @@ -226,7 +226,7 @@ Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.ConnectionPoolDataSource`. -[source, xml, ] +[source, xml] ---- @@ -252,7 +252,7 @@ Implements `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.ConnectionPoolDataSource`. -[source, xml, ] +[source, xml] ---- @@ -288,7 +288,7 @@ The following is a list of the non-pooled datasource examples: Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, ] +[source, xml] ---- @@ -310,7 +310,7 @@ Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. Implements `javax.sql.DataSource` and `javax.sql.ConnectionPoolDataSource`. -[source, xml, ] +[source, xml] ---- @@ -343,7 +343,7 @@ For more information, refer to: http://docs.oracle.com/cd/B14117_01/java.101/b10 Implements `javax.sql.DataSource`. -[source, xml, ] +[source, xml] ---- @@ -365,7 +365,7 @@ Implements `javax.sql.DataSource`. Implements `javax.sql.DataSource`. -[source, xml, ] +[source, xml] ---- @@ -387,7 +387,7 @@ Implements `javax.sql.DataSource`. Implements `javax.sql.DataSource`. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc index 2b499cd55b0e..5960da2caccf 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc @@ -39,7 +39,7 @@ Note that this jar also requires the `javax.activation` classes, which is availa Here is an example class that sets up some JNDI entries and deploys a webapp that references these JNDI entries in code. We'll use some mocked up classes for the transaction manager and the DataSource in this example for simplicity: -[source, java, ] +[source, java] ---- import java.util.Properties; import org.eclipse.jetty.server.Server; diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc index 0737a8e09e4e..6419102247db 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc @@ -23,7 +23,7 @@ If you are using the standard distribution of Jetty, you must enable the _JNDI_ As the _plus_ module depends on the _JNDI_ module, you only need to enable the _plus_ module to enable both. Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: -[source, screen, ] +[source, screen] .... cd /opt/jetty cd my-base @@ -37,7 +37,7 @@ If you have extra jars associated with your JNDI resources, for example a databa You will then need to enable the _ext_ module to ensure the jars in the `ext/` directory are on the classpath. Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: -[source, screen, ] +[source, screen] .... cd /opt/jetty cd my-base diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc index d76c7dcfbae8..a146ace5ab48 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/using-jndi.adoc @@ -24,7 +24,7 @@ You can configure naming resources to reference in a `web.xml` file and access from within the `java:comp/env` naming environment of the webapp during execution. Specifically, you can configure support for the following `web.xml` elements: -[source, xml, ] +[source, xml] ---- @@ -52,7 +52,7 @@ For the link between a `web.xml` resource name and a naming entry Declarations of each of these types follow the same general pattern: -[source, xml, ] +[source, xml] ---- @@ -91,7 +91,7 @@ The name is unique across the JVM instance, and is visible to all application co You represent this scope by a `null` first parameter to the resource declaration. For example: + -[source, xml, ] +[source, xml] ---- @@ -109,7 +109,7 @@ The name is unique to a Server instance, and is only visible to code associated You represent this scope by referencing the Server instance as the first parameter to the resource declaration. For example: + -[source, xml, ] +[source, xml] ---- @@ -128,7 +128,7 @@ The name is unique to the WebAppContext instance, and is only visible to code as You represent this scope by referencing the `WebAppContext` instance as the first parameter to the resource declaration. For example: + -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc index 5a01ee346671..3dca551b9d15 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc @@ -49,7 +49,7 @@ If neither of these options meets your needs, you can implement a custom request To enable the Request Log module for the entire server via the Jetty distribution, it first needs to be enabled on the command line: -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --add-to-start=requestlog @@ -68,7 +68,7 @@ ____ The equivalent code for embedded usages of Jetty is: -[source, java, ] +[source, java] ---- NCSARequestLog requestLog = new NCSARequestLog("/var/logs/jetty/jetty-yyyy_mm_dd.request.log"); requestLog.setAppend(true); @@ -120,7 +120,7 @@ Both timezones are set to GMT by default. To configure a separate request log for specific a web application, add the following to the context XML file. -[source, xml, ] +[source, xml] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc index eeb55c6cf96e..308eacb2e39b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc @@ -26,7 +26,7 @@ Please note that enabling these modules provides typical and basic functionality Enabling these frameworks in the Jetty distribution is as easy as activating any other module, by adding `--add-to-start=` to the start command for your server, such as: -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini @@ -83,7 +83,7 @@ Jetty uses the SLF4J api as a binding to provide logging information to addition It can also be used on it's own to provide simple server logging. To enable the SLF4J framework, you need to activate the `logging-slf4j` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-slf4j @@ -132,7 +132,7 @@ As you probably noticed, the system gives an `ERROR` when trying to enable the ` The `logging-slf4j` module itself provides the SLF4J api, but as SLF4J is often used as a binding for other logging frameworks does not by default provide an implementation. To enable the simple SLF4J implementation, we will also need to activate the `slf4j-simple-impl` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini @@ -165,7 +165,7 @@ It is possible to have the Jetty Server logging configured so that Log4j or Log4 This is accomplished by configuring Jetty for logging to http://logging.apache.org/log4j/[Apache Log4j] via http://slf4j.org/manual.html[Slf4j] and the http://slf4j.org/manual.html#swapping[Slf4j binding layer for Log4j]. Implementation of Log4j can be done by enabling the `logging-log4j` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j @@ -234,7 +234,7 @@ A standard Log4j configuration file is located in `${jetty.base}/resources/log4j Or, to set up Log4j2, enable the `logging-log4j2` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j2 @@ -311,7 +311,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h To set up Jetty logging via Logback, enable the `logging-logback` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-logback @@ -394,7 +394,7 @@ It is possible to have the Jetty Server logging configured so that `java.util.lo This example demonstrates how to configuring Jetty for logging to `java.util.logging` via http://slf4j.org/manual.html[SLF4J] as a binding layer. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jul @@ -459,7 +459,7 @@ By default, enabling the above modules will output log information to the consol Included in the distribution is the `console-capture` module, which can be used in lieu of additional configuration to the selected logging module to capture this output to a `logs` directory in your `${jetty.base}`. To enable this functionality, activate the `console-capture` module. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini @@ -475,7 +475,7 @@ INFO : Base directory was modified As an example, here is the output from Logback before using the `console-capture` module: -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar 419 [main] INFO org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog @@ -486,7 +486,7 @@ As an example, here is the output from Logback before using the `console-capture After enabling `console-capture`, the output is as follows, which displays the location the log is being saved to: -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar 151 [main] INFO org.eclipse.jetty.util.log - Logging initialized @238ms to org.eclipse.jetty.util.log.Slf4jLog diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index 2afdaf468c76..a292be04cc9d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -31,7 +31,7 @@ Included in the Jetty distribution is a logging module named `console-capture` t To enable this feature, simply activate the `console-capture` module on the command line: -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini @@ -58,7 +58,7 @@ Just enabling the `console-capture` will simply output the values of STDERR and To customize the log further, a module named `logging-jetty` is available to provides a default properties file to configure. As with `console-capture`, you activate the `logging-jetty` on the command line. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini @@ -81,7 +81,7 @@ Once activated, you can find the properties file at `${jetty.base}/resources/jet By default, the following parameters are defined. To change them, un-comment the line and substitute your naming scheme and configuration choices. -[source, properties, ] +[source, properties] .... ## Force jetty logging implementation #org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog @@ -125,7 +125,7 @@ There are a number of properties that can be defined in the configuration that w + * Example when set to false: + -[source, screen, ] +[source, screen] .... 2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-9.4.0-SNAPSHOT @@ -135,7 +135,7 @@ There are a number of properties that can be defined in the configuration that w + * Example when set to true: + -[source, screen, ] +[source, screen] .... 2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-9.4.0-SNAPSHOT diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc index 1fb2d2212a5a..8e76fc9cb549 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc @@ -23,7 +23,7 @@ This is accomplished by configuring Jetty for logging to http://logging.apache.o A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with log4j. -[source, screen, ] +[source, screen] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc index 0a0b588f6bce..481bd66c5b44 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc @@ -33,7 +33,7 @@ ____ A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. -[source, screen, ] +[source, screen] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc index c647581c2875..cf12671b5d67 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc @@ -25,7 +25,7 @@ If you want to use the built-in native `JavaUtilLog` implementation, see #exampl A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. -[source, screen, ] +[source, screen] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc index 6fa8aba7f7f0..fcea287e7cf5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc @@ -23,7 +23,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for logging with logback. -[source, screen, ] +[source, screen] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc index 0141577126c4..100e5eaf13f0 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc @@ -88,7 +88,7 @@ It also requires including the other Slf4j binding JARs in the classpath, along A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by logback. -[source, screen, ] +[source, screen] .... [mybase]$ mkdir modules [mybase]$ cd modules diff --git a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc index 880f4a4365e5..ab1f6ae6118c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc @@ -34,7 +34,7 @@ You will need the `jetty-runner` jar: Let's assume we have a very simple webapp that does not need any resources from its environment, nor any configuration apart from the defaults. Starting it is as simple as performing the following: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar simple.war .... @@ -43,14 +43,14 @@ This will start Jetty on port 8080, and deploy the webapp to `/`. Your webapp does not have to be packed into a war, you can deploy a webapp that is a directory instead in the same way: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar simple .... In fact, the webapp does not have to be a war or even a directory, it can simply be a Jetty link:#using-context-provider[context xml] file that describes your webapp: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar simple-context.xml .... @@ -82,7 +82,7 @@ If you have more than one webapp that must be deployed, simply provide them all You can control the context paths for them using the `--path` parameter. Here's an example of deploying 2 wars (although either or both of them could be unpacked directories instead): -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --path /one my1.war --path /two my2.war .... @@ -90,7 +90,7 @@ Here's an example of deploying 2 wars (although either or both of them could be If you have context xml files that describe your webapps, you can fully configure your webapps in them and hence you won't need to use the command line switches. Just provide the list of context files like so: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar my-first-context.xml my-second-context.xml my-third-context.xml .... @@ -108,7 +108,7 @@ By default the `jetty-runner` will listen on port 8080. You can easily change this on the command line using the `--port` command. Here's an example that runs our simple.war on port 9090: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --port 9090 simple.war .... @@ -118,7 +118,7 @@ Here's an example that runs our simple.war on port 9090: Instead of, or in addition to, using command line switches, you can use one or more `jetty.xml` files to configure the environment for your webapps. Here's an example where we apply two different `jetty.xml` files: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --config jetty.xml --config jetty-https.xml simple.war .... @@ -128,14 +128,14 @@ Here's an example where we apply two different `jetty.xml` files: You can see the fill set of configuration options using the `--help` switch: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --help .... Here's what the output will look like: -[source, plain, ] +[source, plain] ---- Usage: java [-Djetty.home=dir] -jar jetty-runner.jar [--help|--version] [ server opts] [[ context opts] context ...] @@ -159,7 +159,7 @@ Context opts: ===== Printing the Version Print out the version of Jetty and then exit immediately. -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --version .... @@ -169,7 +169,7 @@ Cause Jetty to write a request log with the given name. If the file is prefixed with `yyyy_mm_dd` then the file will be automatically rolled over. Note that for finer grained configuration of the link:{JDURL}/org/eclipse/jetty/server/NCSARequestLog.html[request log], you will need to use a Jetty xml file instead. -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --log yyyy_mm_dd-requests.log my.war .... @@ -178,7 +178,7 @@ Note that for finer grained configuration of the link:{JDURL}/org/eclipse/jetty/ Redirect the output of jetty logging to the named file. If the file is prefixed with `yyyy_mm_dd` then the file will be automatically rolled over. -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --out yyyy_mm_dd-output.log my.war .... @@ -187,7 +187,7 @@ If the file is prefixed with `yyyy_mm_dd` then the file will be automatically ro Like Jetty standalone, the default is for the connectors to listen on all interfaces on a machine. You can control that by specifying the name or ip address of the particular interface you wish to use with the `--host` argument: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --host 192.168.22.19 my.war .... @@ -196,7 +196,7 @@ You can control that by specifying the name or ip address of the particular inte The default port number is 8080. To link:#how-to-configure-connectors[configure a https connector], use a Jetty xml config file instead. -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --port 9090 my.war .... @@ -206,7 +206,7 @@ You can configure a port number for Jetty to listen on for a stop command, so yo This requires the use of a "secret" key, to prevent malicious or accidental termination. Use the `--stop-port` and `--stop-key` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively) parameters as arguments to the `jetty-runner`: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --stop-port 8181 --stop-key abc123 .... @@ -215,7 +215,7 @@ Then, to stop Jetty from a different terminal, you need to supply the same port For this you'll either need a local installation of Jetty, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class. Here's how to use a Jetty installation to perform a stop: -[source, screen, ] +[source, screen] .... > java -jar start.jar -DSTOP.PORT=8181 -DSTOP.KEY=abc123 --stop .... @@ -228,7 +228,7 @@ With the `jetty-runner`, you can use the `--lib`, `--jar` and `--classes` argume You can add 1 or more. Here's an example of configuring 2 directories: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --lib /usr/local/external/lib --lib $HOME/external-other/lib my.war .... @@ -237,7 +237,7 @@ Here's an example of configuring 2 directories: You can add 1 or more. Here's an example of configuring 3 extra jars: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --jar /opt/stuff/jars/jar1.jar --jar $HOME/jars/jar2.jar --jar /usr/local/proj/jars/jar3.jar my.war .... @@ -246,7 +246,7 @@ Here's an example of configuring 3 extra jars: You can add 1 or more. Here's an example of configuring a single extra classes dir: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --classes /opt/stuff/classes my.war .... @@ -264,7 +264,7 @@ If statistics gathering is enabled, then they are viewable by surfing to the con You may optionally protect access to that context with a password. Here's an example of enabling statistics, with no password protection: -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --stats unsecure my.war .... @@ -272,7 +272,7 @@ Here's an example of enabling statistics, with no password protection: If we wished to protect access to the `/stats` context, we would provide the location of a Jetty realm configuration file containing authentication and authorization information. For example, we could use the following example realm file from the Jetty distribution: -[source, screen, ] +[source, screen] .... jetty: MD5:164c88b302622e17050af52c89945d44,user admin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,admin @@ -285,7 +285,7 @@ digest: MD5:6e120743ad67abfbc385bc2bb754e297,user Assuming we've copied it into the local directory, we would apply it like so -[source, screen, ] +[source, screen] .... > java -jar jetty-runner.jar --stats realm.properties my.war .... diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc index ea175d9ff521..c097718697dd 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-gcloud-datastore.adoc @@ -50,7 +50,7 @@ To do that, you can use `--skip-file-validation=glcoud-sessions` argument to sta The gcloud-sessions module will have installed file called `${jetty.home}/etc/jetty-gcloud-sessions.xml`. This file configures an instance of the `GCloudSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/etc/jetty-gcloud-sessions.xml[] ---- @@ -105,7 +105,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, ] +[source, xml] ---- @@ -129,7 +129,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, ] +[source, xml] ---- @@ -202,7 +202,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, ] +[source, xml] ---- @@ -229,7 +229,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc index 0326b2d2ad95..048b8905b3cd 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc @@ -65,7 +65,7 @@ The Infinispan module will have installed file called `$\{jetty.home}/etc/jetty- This file configures an instance of the `InfinispanSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-infinispan/src/main/config/etc/jetty-infinispan.xml[] ---- @@ -91,7 +91,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, ] +[source, xml] ---- @@ -132,7 +132,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc index aec17c371355..96bd32150862 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-jdbc.adoc @@ -46,7 +46,7 @@ When using the jetty distribution, to enable jdbc session persistence, you will You will also find the following properties, either in your base's start.d/jdbc-session.ini file or appended to your start.ini, depending on how you enabled the module: -[source, java, ] +[source, java] ---- ## Unique identifier for this node in the cluster jetty.jdbcSession.workerName=node1 @@ -80,7 +80,7 @@ The jdbc-session module will have installed file called `$\{jetty.home}/etc/jett This file configures an instance of the `JDBCSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-jdbc-sessions.xml[] ---- @@ -89,7 +89,7 @@ As well as uncommenting and setting up appropriate values for the properties dis As Jetty configuration files are direct mappings of XML to Java, it is straight forward to do this in code: -[source, java, ] +[source, java] ---- Server server = new Server(); ... @@ -129,7 +129,7 @@ These classes have getter/setter methods for the table name and all columns. Here's an example of changing the name of `JettySessionsId` table and its single column. This example will use java code, but as explained above, you may also do this via a Jetty xml configuration file: -[source, java, ] +[source, java] ---- JDBCSessionIdManager idManager = new JDBCSessionIdManager(server); @@ -142,7 +142,7 @@ idManager.setSessionIdTableSchema(idTableSchema); In a similar fashion, you can change the names of the table and columns for the `JettySessions` table. *Note* that both the `SessionIdTableSchema` and the `SessionTableSchema` instances are set on the `JDBCSessionIdManager` class. -[source, java, ] +[source, java] ---- JDBCSessionIdManager idManager = new JDBCSessionIdManager(server); @@ -172,7 +172,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, ] +[source, xml] ---- @@ -192,7 +192,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, ] +[source, xml] ---- @@ -213,7 +213,7 @@ From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance direc If you're embedding this in code: -[source, java, ] +[source, java] ---- //assuming you have already set up the JDBCSessionIdManager as shown earlier diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc index cccdb0b55082..ef8d7b661621 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-mongodb.adoc @@ -53,7 +53,7 @@ To do that, you can use `--skip-file-validation=nosql` argument to start.jar on You will also find the following properties, either in your base's `start.d/nosql.ini` file or appended to your `start.ini`, depending on how you enabled the module: -[source, xml, ] +[source, xml] ---- ## Unique identifier for this node in the cluster jetty.nosqlSession.workerName=node1 @@ -77,7 +77,7 @@ The nosql module will have installed file called `$\{jetty.home}/etc/jetty-nosql This file configures an instance of the `MongoSessionIdManager` that will be shared across all webapps deployed on that server. It looks like this: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-nosql/src/main/config/etc/jetty-nosql.xml[] ---- @@ -86,7 +86,7 @@ The `MongoSessionIdManager` needs access to a MongoDB cluster, and the `jetty-no If you need to configure something else, you will need to edit this file. Here's an example of a more complex setup to use a remote MongoDB instance: -[source, xml, ] +[source, xml] ---- @@ -130,7 +130,7 @@ Here's an example of a more complex setup to use a remote MongoDB instance: As Jetty configuration files are direct mappings of XML to Java, it is straight forward to do this in code: -[source, java, ] +[source, java] ---- Server server = new Server(); @@ -186,7 +186,7 @@ The basic difference is how you get a reference to the Jetty `org.eclipse.jetty. From a context xml file, you reference the Server instance as a Ref: -[source, xml, ] +[source, xml] ---- @@ -207,7 +207,7 @@ From a context xml file, you reference the Server instance as a Ref: From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance directly: -[source, xml, ] +[source, xml] ---- @@ -227,7 +227,7 @@ From a `WEB-INF/jetty-web.xml` file, you can reference the Server instance direc If you're embedding this in code: -[source, java, ] +[source, java] ---- //assuming you have already set up the MongoSessionIdManager as shown earlier //and have a reference to the Server instance: diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc index 7232ba2da4a1..fb1d562f7c5c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/setting-session-characteristics.adoc @@ -74,7 +74,7 @@ The following sections provide examples of how to apply the init parameters. You can set these parameters as context parameters in a web application's `WEB-INF/web.xml` file: -[source, xml, ] +[source, xml] ---- @@ -103,7 +103,7 @@ You can set these parameters as context parameters in a web application's `WEB-I You can configure init parameters on a web application, either in code, or in a Jetty context xml file equivalent: -[source, xml, ] +[source, xml] ---- @@ -130,7 +130,7 @@ You can configure init parameters on a web application, either in code, or in a You can configure init parameters directly on a `SessionManager` instance, either in code or the equivalent in xml: -[source, xml, ] +[source, xml] ---- @@ -165,7 +165,7 @@ For full details, consult the http://docs.oracle.com/javaee/6/api/javax/servlet/ Below is an example of this implementation: a `ServletContextListener` retrieves the `SessionCookieConfig` and sets up some new values when the context is being initialized: -[source, java, ] +[source, java] ---- import javax.servlet.SessionCookieConfig; import javax.servlet.ServletContextEvent; @@ -205,7 +205,7 @@ public class TestListener implements ServletContextListener You can also use `web.xml` to configure the session handling characteristics instead: here's an example doing exactly the same as above instead of using code: -[source, xml, ] +[source, xml] ---- ); ---- You may also set the tracking mode in `web.xml`, e.g.: -[source, xml, ] +[source, xml] ---- @@ -75,7 +75,7 @@ For example, the Wicket web framework requires the servlet environment to be ava Using `SessionManager.setLazyLoad(true)`, Jetty loads sessions lazily either when it receives the first request for a session, or the session scavenger runs for the first time, whichever happens first. Here's how the configuration looks in XML: -[source, xml, ] +[source, xml] ---- @@ -93,7 +93,7 @@ Here's how the configuration looks in XML: To enable session persistence for the Jetty Maven plugin, set up the `HashSessionManager` in the configuration section like so: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc index ef0b7a2d48c2..877dfb4aa515 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc @@ -26,7 +26,7 @@ Note: Persisting sessions to the local file system should *not* be used in a clu When using the Jetty distribution, you will first need to enable the `session-store-file` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -58,7 +58,7 @@ ____ Opening `start.d/session-store-file.ini` will show a list of all the configurable options for the file system session module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-file diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc index 6adbe23df803..6dc9571867ad 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc @@ -66,7 +66,7 @@ To enable communication using the GCloud Emulator: When using the Jetty distribution, you will first need to enable the `session-store-gcloud` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -191,7 +191,7 @@ It does *not*, however, configure a SLF4J implementation for the users. As such, you will also need to enable one of the SLF4J implementation modules listed. In this example, we will enable the `slf4j-simple-impl` module to provide a SLF4J implementation. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini @@ -215,7 +215,7 @@ ____ Opening the `start.d/session-store-gcloud.ini` will display a list of all the configurable properties for the Google Cloud DataStore module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-gcloud diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc index a8e467a6c1e5..30a1b1c29ee7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-hazelcast-remote` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -73,7 +73,7 @@ ____ Opening the `start.d/session-store-hazelcast-remote.ini` will show a list of all the configurable options for the Hazelcast module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-hazelcast-remote @@ -118,7 +118,7 @@ ____ During testing, it can be helpful to run an in-process instance of Hazelcast. To enable this you will first need to enable the `session-store-hazelcast-embedded` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -160,7 +160,7 @@ In addition to adding these modules to the classpath of the server it also added Opening the `start.d/start.d/session-store-hazelcast-embedded.ini` will show a list of all the configurable options for the Hazelcast module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-hazelcast-embedded diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc index 0b99fe38ce65..33b4c99db428 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc @@ -25,7 +25,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-infinispan-remote` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -72,7 +72,7 @@ ____ Opening the `start.d/session-store-infinispan-remote.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-infinispan-remote @@ -113,7 +113,7 @@ ____ Enabling this module allows jetty to search infinispan for expired sessions that are no longer being referenced by any jetty node. Note that this is an *additional* module, to be used in conjuction with the `session-store-infinispan-remote` module. -[source, screen, ] +[source, screen] ---- java -jar ../start.jar --add-to-start=infinispan-remote-query ---- @@ -131,7 +131,7 @@ ____ If you are running Jetty with JDK 9 or greater, enable `session-store-infinispan-embedded-910.mod` instead. ____ -[source, screen, ] +[source, screen] ---- java -jar ../start.jar --add-to-start=session-store-infinispan-embedded @@ -167,7 +167,7 @@ In addition to adding these modules to the classpath of the server it also added Opening the `start.d/session-store-infinispan-remote.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-infinispan-embedded @@ -198,7 +198,7 @@ ____ Similarly to the `session-store-infinispan-remote` module, the `session-store-infinispan-embedded` module has an adjunct module `infinispan-embedded-query`, which when enabled, will allow jetty to detect and properly scavenge defunct sessions stranded in infinispan. -[source, screen, ] +[source, screen] ---- java -jar ../start.jar --add-to-start=infinispan-embedded-query ---- @@ -220,7 +220,7 @@ ____ How to use the converter: -[source, screen, ] +[source, screen] ---- java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:[other classpath] org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter @@ -240,7 +240,7 @@ When used with no arguments the usage message is printed. When used with the `ca To perform the conversion, run the InfinispanSessionLegacyConverter with just the `cache-name`, and optionally the `host` system property. The following command will attempt to convert all sessions in the cached named `my-remote-cache` on the machine `myhost`, ensuring that application classes in the `/my/custom/classes` directory are on the classpath: -[source, screen, ] +[source, screen] ---- java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:/my/custom/classes org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter -Dhost=myhost my-remote-cache ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc index 126534710180..fb23780003d2 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-jdbc` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -48,7 +48,7 @@ In addition to adding these modules to the classpath of the server, several ini Opening the `start.d/session-store-jdbc.ini` will show a list of all the configurable options for the JDBC module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-jdbc diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc index c5c33535cdce..e7e09d6a2775 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-memcachedsessiondatastore.adoc @@ -31,7 +31,7 @@ To enable it with the Jetty distribution, enable the `session-store-cache` link: After enabling, the `$jetty.base/start.d/session-store-cache.ini` file will be generated: -[source, screen, ] +[source, screen] ---- --module=session-store-cache diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc index 9f2ca8efe03f..5a344abe486b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc @@ -24,7 +24,7 @@ When using the Jetty distribution, you will first need to enable the `session-store-mongo` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -[source, screen, ] +[source, screen] ---- $ java -jar ../start.jar --create-startd INFO : Base directory was modified @@ -70,7 +70,7 @@ ____ Opening the `start.d/session-store-mongo.ini` will show a list of all the configurable options for the MongoDB module: -[source, screen, ] +[source, screen] ---- # --------------------------------------- # Module: session-store-mongo diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc index acd3bee973b5..0db651f80f50 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc @@ -26,7 +26,7 @@ If you wish to change any of the default values, you need to enable the `session Once the `session-cache-hash` module has been enabled, you can view a list of all the configurable values by opening `start.d/session-cache-hash.ini`: -[source, screen, ] +[source, screen] ---- --module=session-cache-hash diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc index 37ef56e88f72..2f5b662419ea 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc @@ -68,7 +68,7 @@ That said, if a user wishes to configure sessions this way, it is possible using Below is an example of how you could configure a the link:#configuring-sessions-file-system[`FileSessionDataStore`], but the same concept would apply to any of the *SessionDataStores discussed in this chapter: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc index 6174b07be99b..e88b55511454 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-config diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc index 9ded46ccf17d..463339e99ce4 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [jetty]$ mkdir mybase [jetty]$ cd mybase diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc index 6414371070a5..4ff9fa35d5ac 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-config diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc index 4256f47d05c9..a91018219089 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [mybase]$ java -jar $JETTY_HOME/start.jar --add-to-start=http,webapp,deploy INFO : webapp initialized in ${jetty.base}/start.ini diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc index d9e405519d0b..bd342af54911 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=logging,-internal diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc index 69367c595621..cb67e500ccdc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc @@ -16,7 +16,7 @@ // ======================================================================== // -[source, screen, ] +[source, screen] .... [mybase]$ java -jar ../start.jar --list-modules diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index abfa4129cc09..30ec84bdb1bd 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -21,7 +21,7 @@ The most basic way of starting the Jetty standalone server is to execute the `start.jar`, which is a bootstrap for starting Jetty with the configuration you want. -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ java -jar start.jar 2013-09-23 11:27:06.654:INFO:oejs.Server:main: jetty-{VERSION} @@ -163,7 +163,7 @@ Note: Transitive modules are also appended. If a module contains an .ini template with properties, you can also edit these properties when activating the module. To do this, simply list the property and its value after the `-add-to-start` command, such as in the following example: + -[source, screen, ] +[source, screen] .... $ java -jar start.jar --add-to-start=http jetty.http.port=8379 jetty.http.host=1.2.3.4 .... @@ -173,7 +173,7 @@ Doing this will uncomment the property in the associated .ini file and set it to Used to update a specified property or properties that exist in an existing .ini file. Jetty scans the command line, `${jetty.base}` and `${jetty.home}` for .ini files that have the specified property and update it accordingly. + -[source, screen, ] +[source, screen] .... $ java -jar ../start.jar --update-ini jetty.http.port=8417 ConfigSource @@ -197,7 +197,7 @@ Please see link:#start-vs-startd[Start.ini vs. Start.d] for more information. --write-module-graph=:: Advanced feature: Creates a graphviz http://graphviz.org/content/dot-language[dot file] of the module graph as it exists for the active `${jetty.base}`. + -[source, screen, ] +[source, screen] .... # generate module.dot $ java -jar start.jar --module=websocket --write-module-graph=modules.dot @@ -252,7 +252,7 @@ You can configure a port number for Jetty to listen on for a stop command, so yo This requires the use of a "secret" key, to prevent malicious or accidental termination. Use the `STOP.PORT` and `STOP.KEY` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively, which will set these as system parameters) parameters as arguments to the `start.jar`: -[source, screen, ] +[source, screen] .... > java -jar ${JETTY_HOME}/start.jar STOP.PORT=1234 STOP.KEY=secretpassword .... @@ -261,7 +261,7 @@ Then, to stop Jetty from a different terminal, you need to supply this port and You can either use a copy of the Jetty distribution, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class to accomplish this. Here's how to use the Jetty distribution, leveraging `start.jar`, to perform a stop: -[source, screen, ] +[source, screen] .... > java -jar start.jar STOP.PORT=8181 STOP.KEY=abc123 --stop .... @@ -293,7 +293,7 @@ Default is https://repo1.maven.org/maven2/. ==== Shaded Start.jar If you have a need for a shaded version of `start.jar` (such as for Gradle), you can achieve this via a Maven dependency. -[source, xml, ] +[source, xml] .... org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc index 0d1f2b839c57..123d2dd196c7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc @@ -55,7 +55,7 @@ For more details on how startup with start.jar works, see link:#executing-startj The Jetty Distribution comes with an example `${jetty.base}` which enables the various demonstration webapps and server configurations. -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ ls -la @@ -90,7 +90,7 @@ drwxrwxr-x 2 user group 4096 Oct 8 06:54 webapps/ If you want to see what the Jetty base looks like without executing Jetty, you can simply list the configuration by using the `--list-config` command. -[source, screen, ] +[source, screen] .... [demo-base]$ java -jar $JETTY_HOME/start.jar --list-config @@ -222,7 +222,7 @@ Of note, is that the output will make it known where the configuration elements If you look at the `${jetty.base}/start.ini` you will see a layout similar to below. -[source, screen, ] +[source, screen] .... [my-base]$ cat start.ini @@ -274,7 +274,7 @@ The Jetty `start.jar` and XML files always assume that both `${jetty.home}` and You can opt to manually define the `${jetty.home}` and `${jetty.base}` directories, such as this: -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -292,7 +292,7 @@ Alternately, you can declare one directory and let the other one be discovered. The following example uses default discovery of `${jetty.home}` by using the parent directory of wherever `start.jar` itself is, and a manual declaration of `${jetty.base}`. -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -309,7 +309,7 @@ the `start.jar` in your `{$jetty.home}` remotely. The following demonstrates this by allowing default discovery of `${jetty.home}` via locating the `start.jar`, and using the `user.dir` System Property for `${jetty.base}`. -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc index 0f60ea914b21..ec477fbf4a05 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc @@ -55,7 +55,7 @@ The `--list-classpath` command line option is used as such. (Demonstrated with the link:#demo-base[demo-base from the Jetty Distribution]) -[source, screen, ] +[source, screen] .... [demo-base]$ java -jar $JETTY_HOME/start.jar --list-classpath diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc index 24b8bc0794b1..e4bd538d81ef 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc @@ -36,7 +36,7 @@ or greater, and explicitly referencing the "enterprise" classes as dependencies, To start Jetty on the module-path rather than the class-path, it is enough to add the `--jpms` option to the command line, for example: -[source, screen, ] +[source, screen] .... $ mkdir my-jetty-base $ cd my-jetty-base @@ -59,14 +59,14 @@ You will have two JVMs running: one that runs `start.jar` and one that runs Jett If you are interested in the details of how the command line to run Jetty on the module-path looks like, you can add the `--dry-run` option: -[source, screen, ] +[source, screen] .... $ java -jar $JETTY_HOME/start.jar --jpms --dry-run .... This will give an output looking something like this (broken in sections for clarity): -[source, screen, ] +[source, screen] .... /opt/openjdk-11+28/bin/java --module-path /opt/jetty/lib/servlet-api-3.1.jar:/opt/jetty/lib/jetty-schemas-3.1.jar:/opt/jetty/lib/jetty-http-9.4.13-SNAPSHOT.jar:... @@ -94,7 +94,7 @@ Jetty needs to be able to instantiate those classes and therefore needs to be ab When Jetty runs on the class-path, this is easily achieved by using a link:#custom-modules[custom module]: -[source, screen, ] +[source, screen] .mysql.mod .... [description] @@ -111,7 +111,7 @@ Because it is not an automatic module, it is not added to the module graph, and To add the JPMS module `java.sql` to the module graph, you need to modify your custom module in the following way, using our `mysql.mod` as an example: -[source, screen, ] +[source, screen] .mysql.mod .... [description] @@ -130,7 +130,7 @@ Assuming that `mysql-connector-java-*.jar` is a non JPMS modular jar, or an auto If `mysql-connector-java-*.jar` were a proper JPMS modular jar with name (for example) `com.mysql.jdbc`, then it would need to be explicitly added to the module graph, in this way: -[source, screen, ] +[source, screen] .mysql.mod .... [description] @@ -147,7 +147,7 @@ The JPMS module `java.sql` does not need to be explicitly added because it would The `[jpms]` section has the following format: -[source, screen, ] +[source, screen] .... [jpms] add-modules: (,)* @@ -164,7 +164,7 @@ The section above uses the `--jpms` command line option to start Jetty on the mo An alternative way of achieving the same result is to use a Jetty module, `$JETTY_BASE/modules/jpms.mod`, that specifies that you want to run using JPMS (and possibly add some JPMS specific configuration). -[source, screen, ] +[source, screen] .jpms.mod .... [ini] @@ -178,7 +178,7 @@ The `[ini]` section is equivalent to passing the `--jpms` option to the command The `[jpms]` section (see also the link:#jpms-advanced-config[advanced JPMS configuration section]) allows you specify additional JPMS configuration. -[source, screen, ] +[source, screen] .... $ mkdir jetty-base-jpms $ cd jetty-base-jpms diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc index 04fcf758f91f..cfd350f20c8c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc @@ -70,7 +70,7 @@ As an alternative to a single `start.ini` file you can opt to house modules in a Modules activated when a `start.d` directory exists will be stored as a single file per module. Below is an example of a fresh `${jetty.base}` that will create a `start.d` directory and activate several modules. -[source, screen, ] +[source, screen] .... [jetty.home]$ mkdir mybase [jetty.home]$ cd mybase/ @@ -106,7 +106,7 @@ If you have an existing `start.ini` file but would like to use the `start.d` str Doing this will create the `start.d` directory and copy your existing `start.ini` file in to it. Any new modules added to the server will have their own `.ini` file created in the `start.d` directory. -[source, screen, ] +[source, screen] .... [mybase]$ java -jar ../start.jar --add-to-start=server,client,webapp,websocket INFO : webapp initialised in ${jetty.base}/start.ini @@ -162,7 +162,7 @@ Listed in the ini file is the associated module file and any properties that can Below is an example of the `requestlog.ini` file: -[source, screen, ] +[source, screen] .... # --------------------------------------- # Module: requestlog diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc index 0887e02277d3..646c71f30599 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc @@ -71,7 +71,7 @@ XML Files:: The simplest way to start Jetty is via the `start.jar` mechanism using the following Java command line: -[source, screen, ] +[source, screen] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=8080 @@ -80,7 +80,7 @@ The simplest way to start Jetty is via the `start.jar` mechanism using the follo This command uses the `start.jar` mechanism to bootstrap the classpath, properties, and XML files with the metadata obtained from the `http` module. Specifically the `http` module is defined in the `${jetty.home}/modules/http.mod` file, and includes the following: -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ cat modules/http.mod [depend] @@ -99,7 +99,7 @@ The INI-template section is not actually used by the command above, so the `jett Following the server dependency, the `${jetty.home}/modules/server.mod` file includes: -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ cat modules/server.mod [lib] @@ -123,7 +123,7 @@ The combined metadata of the `http` and `server` modules results in `start.jar` Another way to see this is by asking Jetty what its configuration looks like by appending --list-config to the command line: -[source, screen, ] +[source, screen] .... [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=9099 --list-config @@ -182,7 +182,7 @@ If you don't want to use the `start.jar` bootstrap, you can start Jetty using a The following is the equivalent Java command line for what the `start.jar` bootstrap above performs. -[source, screen, ] +[source, screen] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ echo jetty.http.port=8080 > /tmp/jetty.properties @@ -209,7 +209,7 @@ The Java command line sets up the classpath with the core Jetty jars and the ser You can further simplify the startup of this server by using the INI template defined by the modules to create a `start.ini` file with the command: -[source, screen, ] +[source, screen] .... [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ mkdir example-base @@ -235,7 +235,7 @@ drwxrwxr-x 12 user webgroup 4096 Oct 4 11:49 ../ Once complete, you can edit the `start.ini` file to modify any parameters and you can run the server with the simple command: -[source, screen, ] +[source, screen] .... [example-base]$ java -jar $JETTY_HOME/start.jar .... diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc index e36da92a4a77..9a7dd5004cef 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc @@ -27,7 +27,7 @@ This script is suitable for setting up Jetty as a service in Unix. The minimum steps to get Jetty to run as a Service include: -[source, screen, ] +[source, screen] .... [/opt/jetty]# tar -zxf /home/user/downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# cd jetty-distribution-{VERSION}/ @@ -57,7 +57,7 @@ The techniques outlined here assume an installation on Linux (demonstrated on Ub Prepare some empty directories to work with. -[source, screen, ] +[source, screen] .... # mkdir -p /opt/jetty # mkdir -p /opt/web/mybase @@ -79,14 +79,14 @@ It is our experience that the standard temp directory is often managed by variou Jetty 9.3 requires Java 8 (or greater) to run. Make sure you have it installed. -[source, screen, ] +[source, screen] .... # apt-get install openjdk-8-jdk .... Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html -[source, screen, ] +[source, screen] .... # java -version java version "1.6.0_27" @@ -118,7 +118,7 @@ OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) It is recommended that you create a user to specifically run Jetty. This user should have the minimum set of privileges needed to run Jetty. -[source, screen, ] +[source, screen] .... # useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty .... @@ -129,7 +129,7 @@ Download a copy of the Jetty distribution from the link:#jetty-downloading[Offic Unpack it into place. -[source, screen, ] +[source, screen] .... [/opt/jetty]# tar -zxf /home/user/Downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# ls -F @@ -153,7 +153,7 @@ In past versions of Jetty, you would configure / modify / add to the `jetty-dist While this is still supported, we encourage you to setup a proper `${jetty.base}` directory, as it will benefit you with easier `jetty-distribution` upgrades in the future. -- -[source, screen, ] +[source, screen] .... # cd /opt/web/mybase/ [/opt/web/mybase]# ls @@ -191,7 +191,7 @@ See xref:start-jar[] for more details and options on setting up and configuring Copy your war file into place. -[source, screen, ] +[source, screen] .... # cp /home/user/projects/mywebsite.war /opt/web/mybase/webapps/ .... @@ -200,7 +200,7 @@ Most service installations will want Jetty to run on port 80, now is the opportu Edit the `/opt/web/mybase/start.ini` and change the `jetty.http.port` value. -[source, screen, ] +[source, screen] .... # grep jetty.http.port /opt/web/mybase/start.ini jetty.port=80 @@ -208,7 +208,7 @@ jetty.port=80 Change the permissions on the Jetty distribution and webapp directories so that the user you created can access it. -[source, screen, ] +[source, screen] .... # chown --recursive jetty /opt/jetty # chown --recursive jetty /opt/web/mybase @@ -216,7 +216,7 @@ Change the permissions on the Jetty distribution and webapp directories so that Next we need to make the Unix System aware that we have a new Jetty Service that can be managed by the standard `service` calls. -[source, screen, ] +[source, screen] .... # cp /opt/jetty/jetty-distribution-{VERSION}/bin/jetty.sh /etc/init.d/jetty # echo "JETTY_HOME=/opt/jetty/jetty-distribution-{VERSION}" > /etc/default/jetty @@ -227,7 +227,7 @@ Next we need to make the Unix System aware that we have a new Jetty Service that Test out the configuration: -[source, screen, ] +[source, screen] .... # service jetty status Checking arguments to Jetty: @@ -260,7 +260,7 @@ You now have a configured `${jetty.base}` in `/opt/web/mybase` and a `${jetty.ho Test the service to make sure it starts up and runs successfully. -[source, screen, ] +[source, screen] .... # service jetty start Starting Jetty: OK Wed Nov 20 12:35:28 MST 2013 diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc index 8d07d375c324..3305348e9600 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc @@ -27,7 +27,7 @@ The techniques outlined here are based on Windows 7 (64-bit), using JDK 8 (64-bi Prepare some empty directories to work with. -[source, screen, ] +[source, screen] .... C:\> mkdir opt C:\> cd opt @@ -69,7 +69,7 @@ This is intentionally kept separate from the standard temp directories of Window Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html -[source, screen, ] +[source, screen] .... C:\opt>java -version java version "1.7.0_45" @@ -83,7 +83,7 @@ Extract the contents of the `jetty-distribution-{VERSION}` directory to `C:\opt\ Once complete, the contents of the `C:\opt\jetty` directory should look like this: -[source, screen, ] +[source, screen] .... C:\opt\jetty>dir Volume in drive C has no label. @@ -122,7 +122,7 @@ The ZIP file has both 32 bit and 64 bit versions of this file. Once you are complete, the contents of `C:\opt` directory should look like this: -[source, screen, ] +[source, screen] .... C:\opt> dir Volume in drive C has no label. @@ -145,7 +145,7 @@ Now it's time to setup your new `${jetty.base}` directory to have all of your We We'll start by specifying which modules we want to use (this will create a start.ini file and also create a few empty directories for you) -[source, screen, ] +[source, screen] .... C:\opt\myappbase>java -jar ..\jetty\start.jar --add-to-start=deploy,http,console-capture @@ -192,7 +192,7 @@ See the section on xref:start-jar[] for more details and options on setting up a At this point you merely have to copy your WAR files into the `{$jetty.base}/webapps` directory. -[source, screen, ] +[source, screen] .... C:\opt\myappbase> copy C:\projects\mywebsite.war webapps\ .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc index b272c27787cc..b96373d6b2a7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc @@ -31,7 +31,7 @@ These options are general to OpenJDK (and therefore also for the Oracle JVM). They provide good information about the GC activity of your JVM, producing logs that can later be analyzed to perform finer tuning. .JDK 8 Garbage Collection Logging Configuration -[source,screen, ] +[source,screen] .... -Xloggc:/path/to/myjettybase/logs/gc.log -XX:+PrintGCDateStamps @@ -43,7 +43,7 @@ They provide good information about the GC activity of your JVM, producing logs .... .JDK 9 Garbage Collection Logging Configuration -[source,screen, ] +[source,screen] .... Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log:time,level,tags .... @@ -51,7 +51,7 @@ Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log There are not many recommended options for GC that can apply to all users. However, the most obvious one is to disable explicit GC (this is performed regularly by RMI and can introduce an abnormal amount of GC pauses). -[source,screen, ] +[source,screen] .... -XX:+DisableExplicitGC .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc index d2b348a9c3b3..73c29c8dcc2c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc @@ -54,7 +54,7 @@ You can configure most of these in `/etc/security/limits.conf` or via `sysctl`. You should increase TCP buffer sizes to at least 16MB for 10G paths and tune the auto-tuning (keep in mind that you need to consider buffer bloat). -[source, screen, ] +[source, screen] .... $ sysctl -w net.core.rmem_max=16777216 $ sysctl -w net.core.wmem_max=16777216 @@ -69,7 +69,7 @@ The default value is 128. If you are running a high-volume server and connections are getting refused at a TCP level, you need to increase this value. This setting can take a bit of finesse to get correct: if you set it too high, resource problems occur as it tries to notify a server of a large number of connections, and many remain pending, but if you set it too low, refused connections occur. -[source, screen, ] +[source, screen] .... $ sysctl -w net.core.somaxconn=4096 .... @@ -77,7 +77,7 @@ This setting can take a bit of finesse to get correct: if you set it too high, r The `net.core.netdev_max_backlog` controls the size of the incoming packet queue for upper-layer (Java) processing. The default (2048) may be increased and other related parameters adjusted with: -[source, screen, ] +[source, screen] .... $ sysctl -w net.core.netdev_max_backlog=16384 $ sysctl -w net.ipv4.tcp_max_syn_backlog=8192 @@ -89,7 +89,7 @@ $ sysctl -w net.ipv4.tcp_syncookies=1 If many outgoing connections are made (for example, on load generators), the operating system might run low on ports. Thus it is best to increase the port range, and allow reuse of sockets in `TIME_WAIT`: -[source, screen, ] +[source, screen] .... $ sysctl -w net.ipv4.ip_local_port_range="1024 65535" $ sysctl -w net.ipv4.tcp_tw_recycle=1 @@ -110,7 +110,7 @@ theusername soft nofile 40000 Linux supports pluggable congestion control algorithms. To get a list of congestion control algorithms that are available in your kernel run: -[source, screen, ] +[source, screen] .... $ sysctl net.ipv4.tcp_available_congestion_control .... @@ -118,7 +118,7 @@ $ sysctl net.ipv4.tcp_available_congestion_control If cubic and/or htcp are not listed, you need to research the control algorithms for your kernel. You can try setting the control to cubic with: -[source, screen, ] +[source, screen] .... $ sysctl -w net.ipv4.tcp_congestion_control=cubic .... diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc index 7d95e5cbecc7..ca4f00040563 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/limit-load.adoc @@ -26,7 +26,7 @@ To achieve optimal fair handling for all users of a server, it can be necessary An instance of link:{JDURL}/org/eclipse/jetty/server/LowResourceMonitor.html[LowResourceMonitor] may be added to a Jetty server to monitor for low resources situations and to take action to limit the number of idle connections on the server. To configure the low resources monitor, you can enable the the `lowresources.mod` on the command line, which has the effect of including the following XML configuration: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-lowresources.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index ce5d18b4589e..0a5a013435a6 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -34,7 +34,7 @@ Additional settings, including construction your own constructor Jetty XML files Out of the box, Jetty provides several link:#startup-modules[modules] for enabling different types of connectors, from HTTP to HTTPS, HTTP/2, and others. If you startup Jetty with the `--list-modules=connector` command, you can see a list of all available connector modules: -[source, screen, ] +[source, screen] .... [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=connector @@ -183,7 +183,7 @@ Modules for tag 'connector': To enable a connector, simply activate the associated module. Below is an example of activating both the `http` and `https` modules in a fresh link:#startup-base-and-home[Jetty base] using the link:#start-vs-startd[start.d directory]: -[source, screen, ] +[source, screen] .... [mybase] java -jar $JETTY_HOME/start.jar --create-startd MKDIR : ${jetty.base}/start.d @@ -210,7 +210,7 @@ When the `http` and `https` modules were activated, so too were any modules they At this point the server has been configured with connectors for both HTTP and HTTPS and can be started: -[source, screen, ] +[source, screen] .... [mybase] java -jar $JETTY_HOME/start.jar 2017-08-31 10:19:58.855:INFO::main: Logging initialized @372ms to org.eclipse.jetty.util.log.StdErrLog @@ -226,7 +226,7 @@ When modules are enabled, they are loaded with several default options. These can be changed by editing the associated module ini file in the `start.d` directory (or the associated lines in `server.ini` if your implementation does not use `start.d`). For example, if we examine the `http.ini` file in our `start.d` directory created above, we will see the following settings: -[source, screen, ] +[source, screen] .... # --------------------------------------- # Module: http @@ -266,7 +266,7 @@ For example, if we examine the `http.ini` file in our `start.d` directory create To make a change to these settings, uncomment the line (by removing the #) and change the property to the desired value. For example, if you wanted to change the HTTP port to 5231, you would edit the line as follows: -[source, screen, ] +[source, screen] .... ... ## Connector port to listen on @@ -276,7 +276,7 @@ jetty.http.port=5231 Now when the server is started, HTTP connections will enter on port 5231: -[source, screen, ] +[source, screen] .... [mybase] java -jar ../start.jar 2017-08-31 10:31:32.955:INFO::main: Logging initialized @366ms to org.eclipse.jetty.util.log.StdErrLog @@ -338,7 +338,7 @@ link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-server/src/main/config/etc/jetty-alpn. The services a link:{JDURL}/org/eclipse/jetty/server/ServerConnector.html[`ServerConnector`] instance uses are set by constructor injection and once instantiated cannot be changed. Many of the services may be defaulted with null or 0 values so that a reasonable default is used, thus for most purposes only the Server and the connection factories need to be passed to the connector constructor. In Jetty XML (that is, in link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-http.xml[`jetty-http.xml`]) you can do this by: -[source, xml, ] +[source, xml] ---- @@ -360,7 +360,7 @@ Typically the defaults are sufficient for almost all deployments. You can configure connector network settings by calling setters on the connector before it is started. For example, you can set the port with the Jetty XML: -[source, xml, ] +[source, xml] ---- @@ -373,7 +373,7 @@ For example, you can set the port with the Jetty XML: Values in Jetty XML can also be parameterized so that they may be passed from property files or set on the command line. Thus typically the port is set within Jetty XML, but uses the `Property` element to be customizable: -[source, xml, ] +[source, xml] ---- @@ -418,7 +418,7 @@ To avoid duplicate configuration, the standard Jetty distribution creates the co A typical configuration of link:{JDURL}/org/eclipse/jetty/server/HttpConfiguration.html[HttpConfiguration] is: -[source, xml, ] +[source, xml] ---- https @@ -431,7 +431,7 @@ A typical configuration of link:{JDURL}/org/eclipse/jetty/server/HttpConfigurati This example HttpConfiguration may be used by reference to the ID "`httpConfig`": -[source, xml, ] +[source, xml] ---- @@ -457,7 +457,7 @@ Please note that if your `httpConfig` does not include a `secureScheme` or `secu For SSL-based connectors (in `jetty-https.xml` and `jetty-http2.xml`), the common "`httpConfig`" instance is used as the basis to create an SSL specific configuration with ID "`sslHttpConfig`": -[source, xml, ] +[source, xml] ---- @@ -496,7 +496,7 @@ ____ The `X-Forwarded-for` header and associated headers are a de facto standard where intermediaries add HTTP headers to each request they forward to describe the originating connection. These headers can be interpreted by an instance of link:{JDURL}/org/eclipse/jetty/server/ForwardedRequestCustomizer.html[`ForwardedRequestCustomizer`] which can be added to a `HttpConfiguration` as follows: -[source, xml, ] +[source, xml] ---- 32768 @@ -519,7 +519,7 @@ The connection factory can be added to any link:{JDURL}/org/eclipse/jetty/server An example of adding the factory to a HTTP connector is shown below: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc index 1fabd2996f10..2c1b3a360db7 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl-distribution.adoc @@ -27,7 +27,7 @@ provider and the https://github.com/google/conscrypt/[Conscrypt] provider as SSL For the default SSL support, simply activate the `ssl` link:#startup-modules[module]: -[source, plain, ] +[source, plain] ---- $ cd /path/to/mybase $ java -jar ${JETTY_HOME}/start.jar --add-to-startd=ssl @@ -63,7 +63,7 @@ jetty.sslContext.keyStorePassword:: Enabling Conscrypt SSL is just as easy as default SSL - enable both the `conscrypt` and `ssl` link:#startup-modules[modules]: -[source, plain, ] +[source, plain] ---- $ cd ${JETTY_HOME} $ java -jar ../start.jar --add-to-start=ssl,conscrypt @@ -98,7 +98,7 @@ SSL-specific parameters, like `keyStorePath` and `keyStorePassword` can still co To enable client certificate authentication in the Jetty Distribution, you need to enable the both the `ssl` and `https` modules. -[source, plain, ] +[source, plain] ---- $ cd /path/to/mybase $ java -jar /path/to/jetty-dist/start.jar --add-to-startd=ssl,https diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index ac3e390b85b6..b71d25a63ad0 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -53,7 +53,7 @@ ____ By default, Jetty excludes these ciphers in the link:{GITBROWSEURL}/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java#L249-L256[`SslContextFactory`.] You can re-enable these by re-declaring the ciphers you want excluded in code: -[source, java, ] +[source, java] ---- SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$"); @@ -110,7 +110,7 @@ You should read the full manuals of the tools you are using if you want to speci The following command generates a key pair and certificate directly into file `keystore`: -[source, screen, ] +[source, screen] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA ---- @@ -126,7 +126,7 @@ This command prompts for information about the certificate and for passwords to The only mandatory response is to provide the fully qualified host name of the server at the "first and last name" prompt. For example: -[source, screen, ] +[source, screen] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256withRSA Enter keystore password: password @@ -159,7 +159,7 @@ If you want to use only a self signed certificate for some kind of internal admi If you are using Java 8 or later, then you may also use the SAN extension to set one or more names that the certificate applies to: -[source, screen, ] +[source, screen] ---- $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256withRSA -ext 'SAN=dns:jetty.eclipse.org,dns:*.jetty.org' ... @@ -170,7 +170,7 @@ $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256with The following command generates a key pair in the file `jetty.key`: -[source, screen, ] +[source, screen] ---- $ openssl genrsa -aes128 -out jetty.key ---- @@ -179,7 +179,7 @@ You might also want to use the `-rand` file argument to provide an arbitrary fil The following command generates a certificate for the key into the file `jetty.crt`: -[source, screen, ] +[source, screen] ---- $ openssl req -new -x509 -newkey rsa:2048 -sha256 -key jetty.key -out jetty.crt ---- @@ -190,7 +190,7 @@ For the those with heightened security in mind, add -b4096 to get a 4069 bit key The next command prompts for information about the certificate and for passwords to protect both the keystore and the keys within it. The only mandatory response is to provide the fully qualified host name of the server at the "Common Name" prompt. For example: -[source, screen, ] +[source, screen] ---- $ openssl genrsa -aes128 -out jetty.key Generating RSA private key, 2048 bit long modulus @@ -243,7 +243,7 @@ Each CA has its own instructions (look for JSSE or OpenSSL sections), but all in The following command generates the file `jetty.csr` using `keytool` for a key/cert already in the keystore: -[source, screen, ] +[source, screen] ---- $ keytool -certreq -alias jetty -keystore keystore -file jetty.csr ---- @@ -253,7 +253,7 @@ $ keytool -certreq -alias jetty -keystore keystore -file jetty.csr The following command generates the file `jetty.csr` using OpenSSL for a key in the file `jetty.key`: -[source, screen, ] +[source, screen] ---- $ openssl req -new -key jetty.key -out jetty.csr ---- @@ -280,7 +280,7 @@ You can use `keytool` to load a certificate in PEM form directly into a keystore The PEM format is a text encoding of certificates; it is produced by OpenSSL, and is returned by some CAs. An example PEM file is: -[source, screen, ] +[source, screen] ---- jetty.crt -----BEGIN CERTIFICATE----- @@ -302,14 +302,14 @@ Rcz6oCRvCGCe5kDB The following command loads a PEM encoded certificate in the `jetty.crt` file into a JSSE keystore: -[source, screen, ] +[source, screen] ---- $ keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts ---- If the certificate you receive from the CA is not in a format that `keytool` understands, you can use the `openssl` command to convert formats: -[source, screen, ] +[source, screen] ---- $ openssl x509 -in jetty.der -inform DER -outform PEM -out jetty.crt ---- @@ -322,14 +322,14 @@ The certificate can be one you generated yourself or one returned from a CA in r The following OpenSSL command combines the keys in `jetty.key` and the certificate in the `jetty.crt` file into the `jetty.pkcs12` file: -[source, screen, ] +[source, screen] ---- $ openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12 ---- If you have a chain of certificates, because your CA is an intermediary, build the PKCS12 file as follows: -[source, screen, ] +[source, screen] ---- $ cat example.crt intermediate.crt [intermediate2.crt] ... rootCA.crt > cert-chain.txt $ openssl pkcs12 -export -inkey example.key -in cert-chain.txt -out example.pkcs12 @@ -344,7 +344,7 @@ OpenSSL asks for an __export password__. A non-empty password is required to make the next step work. Load the resulting PKCS12 file into a JSSE keystore with `keytool`: -[source, screen, ] +[source, screen] ---- $ keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore ---- @@ -723,7 +723,7 @@ ____ Jetty includes support for Google's https://github.com/google/conscrypt/[Conscrypt SSL], which is built on their fork of https://www.openssl.org/[OpenSSL], https://boringssl.googlesource.com/boringssl/[BoringSSL]. Implementing Conscrypt for the link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-server/src/test/java/org/eclipse/jetty/alpn/conscrypt/server/ConscryptHTTP2Server.java[server] or link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2Client.java[client] is very straightforward process - simply instantiate an instance of Conscrypt's `OpenSSLProvider` and set `Conscrypt` as a provider for Jetty's `SslContextFactory`: -[source, java, ] +[source, java] ---- ... Security.addProvider(new OpenSSLProvider()); @@ -784,7 +784,7 @@ ____ To do this, first create a new `${jetty.base}/etc/tweak-ssl.xml` file (this can be any name, just avoid prefixing it with "jetty-"). -[source, xml, ] +[source, xml] ---- @@ -808,7 +808,7 @@ You can do anything you want with the `SslContextFactory` in use by the Jetty Di To make sure that your `${jetty.base}` uses this new XML, add it to the end of your `${jetty.base}/start.ini` or `${jetty.base}/start.d/server.ini`. -[source, plain, ] +[source, plain] ---- $ cd /path/to/mybase $ ls -l @@ -837,7 +837,7 @@ Additional Include / Exclude examples: *Example*: Include all ciphers which support https://en.wikipedia.org/wiki/Forward_secrecy[Forward Secrecy] using regex: -[source, xml, ] +[source, xml] ---- @@ -851,7 +851,7 @@ Additional Include / Exclude examples: *Example*: Exclude all old, insecure or anonymous cipher suites: -[source, xml, ] +[source, xml] ---- @@ -869,7 +869,7 @@ Additional Include / Exclude examples: *Example*: Since 2014 SSLv3 is considered insecure and should be disabled. -[source, xml, ] +[source, xml] ---- @@ -891,7 +891,7 @@ ____ *Example*: TLS renegotiation could be disabled too to prevent an attack based on this feature. -[source, xml, ] +[source, xml] ---- FALSE ---- @@ -905,7 +905,7 @@ You can also dump the server when shutting down the server instance by adding `j Specifically, you will want to look for the `SslConnectionFactory` portion of the dump. -[source, screen, ] +[source, screen] ---- [my-base]$ java -jar ${JETTY_HOME}/start.jar jetty.server.dumpAfterStart=true diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc index bf2b6fcab9b4..78db7794dc45 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/configuring-virtual-hosts.adoc @@ -62,7 +62,7 @@ You supply a list of IP addresses and names at which the web application is reac Suppose you have a webapp called `blah.war`, that you want all of the above names and addresses to be served at path "`/blah`". Here's how you would configure the virtual hosts with a link:#deployable-descriptor-file[context XML] file: -[source, xml, ] +[source, xml] ---- @@ -102,7 +102,7 @@ Using the method of preparing link:#deployable-descriptor-file[contextXML] files For `blah` webapp: -[source, xml, ] +[source, xml] ---- @@ -128,7 +128,7 @@ These URLs now resolve to the blah context (ie `blah.war`): For `other` webapp: -[source, xml, ] +[source, xml] ---- @@ -177,7 +177,7 @@ To achieve this, we simply use the same context path of `/` for each of our weba For foo webapp: -[source, xml, ] +[source, xml] ---- @@ -197,7 +197,7 @@ For foo webapp: For bar webapp: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc index c4bf0370c1e0..d15e94fe5c05 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/custom-error-pages.adoc @@ -32,7 +32,7 @@ This element creates a mapping between the error-code or exception-type to the l Error code example: -[source, xml, ] +[source, xml] ---- 404 @@ -43,7 +43,7 @@ Error code example: Exception example: -[source, xml, ] +[source, xml] ---- java.io.IOException @@ -74,7 +74,7 @@ javax.servlet.error.status_code:: You can use context IoC XML files to configure the default error page mappings with more flexibility than is available with `web.xml`, specifically with the support of error code ranges. Context files are normally located in `${jetty.base}/webapps/` (see `DeployerManager` for more details) and an example of more flexible error page mapping is below: -[source, xml, ] +[source, xml] ---- @@ -122,7 +122,7 @@ Context files are normally located in `${jetty.base}/webapps/` (see `DeployerMan If no error page mapping is defined, or if the error page resource itself has an error, then the error page will be generated by an instance of `ErrorHandler` configured either the Context or the Server. An `ErrorHandler` may extend the `ErrorHandler` class and may totally replace the handle method to generate an error page, or it can implement some or all of the following methods to partially modify the error pages: -[source, java, ] +[source, java] ---- void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException @@ -136,7 +136,7 @@ void writeErrorPageStacks(HttpServletRequest request, Writer writer) throws IOEx An `ErrorHandler` instance may be set on a Context by calling the `ContextHandler.setErrorHandler` method. This can be done by embedded code or via context IoC XML. For example: -[source, xml, ] +[source, xml] ---- ... @@ -150,7 +150,7 @@ For example: An `ErrorHandler` instance may be set on the entire server by setting it as a dependent bean on the Server instance. This can be done by calling `Server.addBean(Object)` via embedded code or in `jetty.xml` IoC XML: -[source, xml, ] +[source, xml] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc index 6914e6564e70..400ed0ced4b5 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/serving-webapp-from-particular-port.adoc @@ -35,14 +35,14 @@ When creating new configurations for alternative server: * Change all `id="Server"` to the new server name: -[source, xml, ] +[source, xml] ---- ---- * For all connectors for the new server change the `refid` in the server argument: -[source, xml, ] +[source, xml] ---- ---- @@ -55,14 +55,14 @@ When creating new configurations for alternative server: The following example creates another server instance and configures it with a connector and deployer: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/examples/embedded/src/main/resources/jetty-otherserver.xml[] ---- To run the other server, add the extra configuration file(s) to the command line: -[source, screen, ] +[source, screen] ---- java -jar start.jar jetty-otherserver.xml ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc index c1c399ed475c..a328ab0738cd 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-context-path.adoc @@ -45,7 +45,7 @@ If a web application is deployed using the WebAppProvider of the DeploymentManag If a web application is deployed using the `WebAppProvider` of the `DeploymentManager` with an XML IoC file to configure the context, then the `setContextPath` method can be called within that file. For example: -[source, xml, ] +[source, xml] ---- /test diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc index 4b662f2e0fb2..134a123f2864 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc @@ -32,7 +32,7 @@ This can be done either in a context XML deployment descriptor external to the w In either case the syntax of the XML file is the same: -[source, xml, ] +[source, xml] ---- @@ -46,7 +46,7 @@ In either case the syntax of the XML file is the same: Set an attribute in `jetty.xml` on the Server instance for which you want to modify the maximum form content size: -[source, xml, ] +[source, xml] ---- @@ -69,7 +69,7 @@ Use the system property `org.eclipse.jetty.server.Request.maxFormContentSize`. This can be set on the command line or in the `$JETTY_BASE\start.ini` or any `$JETTY_BASE\start.d\*.ini` link:#startup-modules[module ini file.] Using `$JETTY_BASE\start.d\server.ini` as an example: -[source, console, ] +[source, console] ---- # --------------------------------------- # Module: server diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc index d4c2e58fffe3..9d07cdf0187b 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc @@ -51,7 +51,7 @@ As usual with Jetty, you can either set this attribute in a context xml file, or Here's an example of setting it in an xml file: -[source, xml, ] +[source, xml] ---- @@ -67,7 +67,7 @@ Here's an example of setting it in an xml file: The equivalent in code is: -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -83,7 +83,7 @@ There are several ways to use a particular directory as the temporary directory: As before this can be accomplished with an XML file or directly in code. Here is an example of setting the temp directory in XML: -[source, xml, ] +[source, xml] ---- @@ -96,7 +96,7 @@ Here is an example of setting the temp directory in XML: And here is an example of doing it with java code: -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -108,7 +108,7 @@ context.setTempDirectory(new File("/some/dir/foo")); You should set this context attribute with the name of directory you want to use as the temp directory. Again, you can do this in XML: -[source, xml, ] +[source, xml] ---- @@ -125,7 +125,7 @@ Again, you can do this in XML: Or in java: -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setContextPath("/test"); @@ -145,7 +145,7 @@ ____ You can set the location of the temp directory on the command line when Jetty starts up in two ways. First is the most straightforward, simply add it to your command line when starting Jetty. -[source, screen, ] +[source, screen] ---- java -jar ../start.jar -Djava.io.tmpdir=/path/to/desired/directory ---- @@ -156,7 +156,7 @@ After enabling the module (using the `--add-to-start=jvm` command), edit the `jv You will also need verify the line including the `--exec` command is not commented out, as this is required for Jetty to start a new, forked JVM. Below is an example of the standard `jvm.ini` file altered to include a reference to a temp directory. -[source, screen, ] +[source, screen] .... # --------------------------------------- # Module: jvm diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc index 76e643764184..4001e382fdcb 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc @@ -43,7 +43,7 @@ contextPath:: For example, here is a descriptor file that deploys the file `/opt/myapp/myapp.war` to the context path `/wiki`: -[source, xml, ] +[source, xml] ---- @@ -57,7 +57,7 @@ For example, here is a descriptor file that deploys the file `/opt/myapp/myapp.w Both `SystemProperty` and `Property` elements can be used in the descriptor file. For example, if the system property is set to `myapp.home=/opt/myapp`, the previous example can be rewritten as: -[source, xml, ] +[source, xml] ---- @@ -85,7 +85,7 @@ Here are some examples that configure advanced options in the descriptor file. This first example tells Jetty not to expand the WAR file when deploying it. This can help make it clear that users should not make changes to the temporary unpacked WAR because such changes do not persist, and therefore do not apply the next time the web application deploys. -[source, xml, ] +[source, xml] ---- @@ -101,7 +101,7 @@ The next example retrieves the JavaEE Servlet context and sets an initialization The `setAttribute` method can also be used to set a Servlet context attribute. However, since the `web.xml` for the web application is processed after the deployment descriptor, the `web.xml` values overwrite identically named attributes from the deployment descriptor. -[source, xml, ] +[source, xml] ---- @@ -122,7 +122,7 @@ The following example sets a special `web.xml` override descriptor. This descriptor is processed after the web application's `web.xml`, so it may override identically named attributes. This feature is useful when adding parameters or additional Servlet mappings without breaking open a packed WAR file. -[source, xml, ] +[source, xml] ---- @@ -137,7 +137,7 @@ This feature is useful when adding parameters or additional Servlet mappings wit The next example configures not only the web application context, but also a database connection pool (see xref:jndi-datasource-examples[]) that the application can then use. If the `web.xml` does not include a reference to this data source, an override descriptor mechanism (as shown in the previous example) can be used to include it. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc index ca44abcca4a5..aafe0a3f16b2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-architecture.adoc @@ -81,7 +81,7 @@ The format for the XML file is the same as any context XML file and can be used To use this binding, you can either modify the existing `jetty-deploy.xml` which comes with the Jetty distribution (be sure to link:#startup-base-and-home[copy it to your $JETTY_BASE/etc directory first]), or by link:#custom-modules[creating a new module] file which calls to an additional XML file. -[source, xml, ] +[source, xml] ---- @@ -101,7 +101,7 @@ It supports hot (re)deployment. The basic operation of the `WebAppProvider` is to periodically scan a directory for deployables. In the standard Jetty Distribution, this is configured in the `${jetty.home}/etc/jetty-deploy.xml` file. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc index 8c267d82458f..fe55c72f2de2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/deployment-processing-webapps.adoc @@ -132,7 +132,7 @@ If you have only one webapp that you wish to affect, this may be the easiest opt You will, however, either need to have a context xml file that represents your web app, or you need to call the equivalent in code. Let's see an example of how we would add in the Configurations for both JNDI _and_ annotations: -[source, xml, ] +[source, xml] ---- @@ -164,7 +164,7 @@ Of course, you can also use this method to reduce the Configurations applied to If you use the link:#deployment-architecture[deployer], you can set up the list of Configuration classes on the link:#default-web-app-provider[WebAppProvider]. They will then be applied to each `WebAppContext` deployed by the deployer: -[source, xml, ] +[source, xml] ---- @@ -208,7 +208,7 @@ Instead of having to enumerate the list in its entirety, you can simply nominate Let's look at an example of using this method to add in Configuration support for JNDI - as usual you can either do this in an xml file, or via equivalent code. This example uses an xml file, in fact it is the `$JETTY_HOME/etc/jetty-plus.xml` file from the Jetty distribution: -[source, xml, ] +[source, xml] ---- @@ -258,7 +258,7 @@ The value of this attribute is a regexp that defines which _jars_ and _class dir Here's an example from a context xml file (although as always, you could have accomplished the same in code), which would match any jar whose name starts with "foo-" or "bar-", or a directory named "classes": -[source, xml, ] +[source, xml] ---- @@ -284,7 +284,7 @@ This can be particularly useful when you have dozens of jars in `WEB-INF/lib`, b Here's an example in a xml file of a pattern that matches any jar that starts with `spring-`: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc index a9a3ec4a6a6f..97483cb00797 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/hot-deployment.adoc @@ -36,7 +36,7 @@ The default location for this configuration is in the `${jetty.home}/etc/jetty-d To modify it as part of the Jetty distribution, first enable the `deploy` module. Once it is enabled, you can edit these properties in either the `$JETTY_BASE/start.d/deploy.ini` or `$JETTY_BASE/start.ini` file, depending on link:#start-vs-startd[how your implementation is configured.] -[source, screen, ] +[source, screen] ---- # --------------------------------------- diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc index ed6186170d1f..fefc5be3dfa4 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc @@ -42,7 +42,7 @@ Tests have shown that webapps that took many seconds to scan and deploy can now In a standard Jetty distribution the quickstart module can be configured with the following command: -[source, screen, ] +[source, screen] ---- $ java -jar $JETTY_HOME/start.jar --add-to-start=quickstart ---- @@ -51,7 +51,7 @@ $ java -jar $JETTY_HOME/start.jar --add-to-start=quickstart In a Maven project you add a dependency on the artifact `jetty-quickstart`. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -90,7 +90,7 @@ The origin is either a descriptor eg web.xml,web-fragment.xml,override-web.xml f For xml validation each attribute must be unique, and therefore an integer counter is appended to each value. Some examples of elements with origin attribute information are: -[source, xml, ] +[source, xml] ---- @@ -102,7 +102,7 @@ Some examples of elements with origin attribute information are: If a web application already has a context xml file, eg `webapps/myapp.xml` file, simply change the class in the `Configure` element. Otherwise, create a context xml file with the following information (in addition to the usual setting of contextPath, war etc): -[source, xml, ] +[source, xml] ---- @@ -131,7 +131,7 @@ Note that you will need to provide all necessary jetty jars on the command line This will unpack the war if necessary, and create the `quickstart-web.xml` before the first deployment: -[source, screen, ] +[source, screen] ---- $ java -cp [jetty classpath] org.eclipse.jetty.quickstart.PreconfigureQuickStartWar myapp.war ---- @@ -158,7 +158,7 @@ Of course precompiling JSPs is an excellent way to improve the start time of a w As of Jetty 9.2 the Apache Jasper JSP implementation has been used and has been augmented to allow the TLD scan to be skipped. This can be done by adding a `context-param` to the `web.xml` file (this is done automatically by the Jetty Maven JSPC plugin): -[source, xml, ] +[source, xml] ---- org.eclipse.jetty.jsp.precompiled @@ -172,7 +172,7 @@ The Jetty `start.jar` mechanism is a very powerful and flexible mechanism for co However, this mechanism does take some time to build the `classpath`. The start.jar mechanism can be bypassed by using the `–dry-run` option to generate and reuse a complete command line to start Jetty at a later time: -[source, screen, ] +[source, screen] ---- $ RUN=$(java -jar $JETTY_HOME/start.jar --dry-run) $ eval $RUN diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc index 69aedd15120d..8c9397138f79 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/static-content-deployment.adoc @@ -22,7 +22,7 @@ To serve purely static content, the Jetty Deployment Descriptor XML concepts and the internal `ResourceHandler` can be used. Create a file called `scratch.xml` in the `${jetty.base}/webapps` directory and paste the following file contents in it. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc index 10ed0c4055cc..c4d076008ea2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc @@ -28,7 +28,7 @@ Jetty uses Jasper from http://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html By default the Jetty distribution enables the JSP link:#startup-modules[module], and by default, this module is set to Apache Jasper. -[source, plain, ] +[source, plain] ---- include::{SRCDIR}/jetty-home/src/main/resources/modules/jsp.mod[] ---- @@ -55,7 +55,7 @@ You can do this using a servlet context init-param called `org.eclipse.jetty.ser For example, suppose you have precompiled your JSPs with the custom package prefix of `com.acme`, then you would add the following lines to your `web.xml` file: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty.servlet.jspPackagePrefix @@ -175,7 +175,7 @@ ____ You can make a copy of the link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] that ships with Jetty, apply your changes, and use it instead of the shipped version. The example below shows how to do this when using the Jetty Maven plugin. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -189,7 +189,7 @@ The example below shows how to do this when using the Jetty Maven plugin. If you are using the Jetty distribution, and you want to change the JSP settings for just one or a few of your webapps, copy the `{$jetty.home}/etc/webdefault.xml` file somewhere, modify it, and then use a link:#intro-jetty-configuration-contexts[context xml] file to set this file as the `defaultsDescriptor` for your webapp. Here's a snippet: -[source, xml, ] +[source, xml] ---- /foo @@ -207,7 +207,7 @@ Another option is to add an entry for the JSPServlet to the `WEB-INF/web.xml` fi You may also add (but not remove) servlet-mappings. You can use the entry in link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] as a starting point. -[source, xml, ] +[source, xml] ---- jsp @@ -253,7 +253,7 @@ You can use the entry in link:#webdefault-xml[{$jetty.home}/etc/webdefault.xml] By default, Jetty does not enable async support for the JSP servlet. Configuring the JSP servlet for async is relatively easy - simply define the `async-supported` parameter as `true` in either your `webdefault.xml` or the `web.xml` for a specific context. -[source, xml, ] +[source, xml] ---- jsp @@ -284,7 +284,7 @@ To take advantage of this efficiency enhancement, set up the link:#container-inc The link:#embedded-examples[Embedded Examples] section includes a link:#embedded-webapp-jsp[worked code example] of how to do this. Below is a snippet from the example: -[source, java, ] +[source, java] ---- webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*taglibs.*\\.jar$"); ---- @@ -306,7 +306,7 @@ You can either put them into the lib directory for Apache `{$jetty.home}/lib/apa You should make your JSF jars dependencies of the plugin and _not_ the webapp itself. For example: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc index c5da236814c7..8d202792290a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/authentication.adoc @@ -35,7 +35,7 @@ Internally, configuring an authentication mechanism is done by setting an instan Below is an example taken from the link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB-INF/web.xml?h=release-9[jetty-test-webapp web.xml] that configures BASIC authentication: -[source, xml, ] +[source, xml] ---- BASIC @@ -46,7 +46,7 @@ Below is an example taken from the link:{GITBROWSEURL}/tests/test-webapps/test-j The link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB-INF/web.xml?h=release-9[jetty-test-webapp web.xml] also includes commented out examples of other DIGEST and FORM configuration: -[source, xml, ] +[source, xml] ---- FORM @@ -62,7 +62,7 @@ The link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/WEB With FORM Authentication, you must also configure URLs of pages to generate a login form and handle errors. Below is a simple HTML form from the link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/webapp/logon.html?h=release-9[test webapp logon.html]: -[source, xml, ] +[source, xml] ----

FORM Authentication demo

@@ -129,7 +129,7 @@ A LoginService is available to all web applications on a Server instance if you Such a definition would go into an xml file in your `${jetty.base}/etc` directory, e.g. `${jetty.base}/etc/my-realm.xml` and you would add this xml file to the execution path via `start.ini` or `start.d` (you may want to review the material in the link:#startup[Starting Jetty] chapter). Here's an example of an xml file that defines an in-memory type of LoginService called the link:{JDURL}/org/eclipse/jetty/security/HashLoginService.html[HashLoginService]: -[source, xml, ] +[source, xml] ---- @@ -151,7 +151,7 @@ If you define more than one `LoginService` on a Server, you will need to specify You can do that by telling the context the name of the `LoginService`, or passing it the `LoginService` instance. Here's an example of doing both of these, using a link:#deployable-descriptor-file[context xml file]: -[source, xml, ] +[source, xml] ---- @@ -176,7 +176,7 @@ Here's an example of doing both of these, using a link:#deployable-descriptor-fi Alternatively, you can define a `LoginService` for just a single web application. Here's how to define the same HashLoginService, but inside a link:#deployable-descriptor-file[context xml file]: -[source, xml, ] +[source, xml] ---- @@ -254,7 +254,7 @@ guest: guest,read-only You configure the `HashLoginService` with a name and a reference to the location of the properties file: -[source, xml, ] +[source, xml] ---- @@ -268,7 +268,7 @@ You configure the `HashLoginService` with a name and a reference to the location You can also configure it to reload the configuration file when changes to it are detected. -[source, xml, ] +[source, xml] ---- @@ -362,7 +362,7 @@ If you want to use obfuscated, MD5 hashed or encrypted passwords the `pwd` colum You define a `JDBCLoginService` with the name of the realm and the location of the properties file describing the database: -[source, xml, ] +[source, xml] ---- Test JDBC Realm @@ -380,7 +380,7 @@ Until Servlet 3.1, role-based authorization could define: * Access granted to a set of named roles: -[source, xml, ] +[source, xml] ---- @@ -396,7 +396,7 @@ Until Servlet 3.1, role-based authorization could define: * Access totally forbidden, regardless of role: -[source, xml, ] +[source, xml] ---- @@ -410,7 +410,7 @@ Until Servlet 3.1, role-based authorization could define: * Access granted to a user in any of the roles defined in the effective `web.xml`. This is indicated by the special value of `*` for the `` of a `` in the ``: -[source, xml, ] +[source, xml] ---- @@ -428,7 +428,7 @@ Servlet 3.1 introduced an additional authorization: * Access granted to any user who is authenticated, regardless of roles. This is indicated by the special value of `**` for the `` of a `` in the ``: -[source, xml, ] +[source, xml] ---- @@ -445,7 +445,7 @@ Additionally, when configuring your security constraints you can protect various This is done by adding the method you want to protect as a `` in the ``. You can then define roles that should be able to perform these protected methods in an ``: -[source, xml, ] +[source, xml] ---- @@ -470,7 +470,7 @@ This is especially helpful if authorization needs change over time and need upda To do this, we add a section for security constraints into the context xml file for our web app as part of the `securityHandler`. In the example below, a `HashLoginService` is defined with authorization being granted too `foo/*` paths to users with the `admin` and `manager` roles. -[source, xml, ] +[source, xml] ---- @@ -512,7 +512,7 @@ If roles changed in the future, administrators could easily change this context In addition to the distribution, security can be defined as part of an embedded implementation as well. Below is an example which, like the one above, sets up a server with a `HashLoginService` and adds security constraints to restrict access based on roles. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc index 52d0dc41e94d..03834696b12a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc @@ -65,7 +65,7 @@ ContextHandler.setMaxFormKeys(int formKeys); These methods may be called directly when embedding Jetty, but more commonly are configured from a context XML file or WEB-INF/jetty-web.xml file: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc index 83b474d50fef..978fea41499a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc @@ -54,7 +54,7 @@ Let's look at an example. Configure a Jetty `org.eclipse.jetty.jaas.JAASLoginService` to match the `` in your `web.xml` file. For example, if the `web.xml` contains a realm called "Test JAAS Realm" like so: -[source, xml, ] +[source, xml] ---- FORM @@ -68,7 +68,7 @@ Configure a Jetty `org.eclipse.jetty.jaas.JAASLoginService` to match the ` Test JAAS Realm @@ -87,7 +87,7 @@ You can declare your `JAASLoginService` in a couple of different ways: 1. If you have more than one webapp that you would like to use the same security infrastructure, then you can declare your `JAASLoginService` in a top-level Jetty xml file as a bean that is added to the `org.eclipse.jetty.server.Server`. An example: + -[source, xml, ] +[source, xml] ---- @@ -104,7 +104,7 @@ An example: ---- 2. Alternatively, you can use a `JAASLoginService` with just a specific webapp by creating a link:#deployable-descriptor-file[context xml] file for the webapp, and specifying the `JAASLoginService` in it: + -[source, xml, ] +[source, xml] ---- @@ -151,7 +151,7 @@ There are 2 aspects to this: To accomplish the above, use the Jetty link:#startup-overview[startup] link:#startup-modules[modules mechanism] to add the JAAS link:#startup-modules[module]: -[source, screen, ] +[source, screen] .... java -jar start.jar --add-to-start=jaas .... @@ -185,7 +185,7 @@ However, should you need to, you can configure: Here's an example of setting each of these (to their default values): -[source, xml, ] +[source, xml] ---- Test JAAS Realm @@ -376,7 +376,7 @@ This callback gives you access to all parameters that were passed in the form su To use it, in the `login()` method of your custom login module, add the `RequestParameterCallback` to the list of callback handlers the login module uses, tell it which params you are interested in, and then get the value of the parameter back. Here is an example: -[source, java, ] +[source, java] ---- public class FooLoginModule extends AbstractLoginModule diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc index 77466d7b2619..1c9c79710cb2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc @@ -53,7 +53,7 @@ It also assumes you are using `start.ini` to configure your server features. 1. Create a base directory anywhere. + -[source, screen, ] +[source, screen] .... [/home/user]$ mkdir my-base [/home/user]$ cd my-base @@ -61,7 +61,7 @@ It also assumes you are using `start.ini` to configure your server features. 2. Add the modules for SSL, HTTP, and webapp deployment. Adding modules in this way will append the associated module properties to the `${jetty.base}/start.ini` file. + -[source, screen, ] +[source, screen] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --add-to-start=http,https,deploy @@ -82,7 +82,7 @@ INFO : Base directory was modified .... 3. Look at your directory. + -[source, screen, ] +[source, screen] .... [my-base]$ ls -la total 20 @@ -94,20 +94,20 @@ drwxrwxr-x 2 user group 4096 Oct 8 06:55 webapps/ .... 4. Copy your WAR files into webapps. + -[source, screen, ] +[source, screen] .... [my-base]$ ls -la [my-base]$ cp ~/code/project/target/gadget.war webapps/ .... 5. Copy your keystore into place. + -[source, screen, ] +[source, screen] .... [my-base]$ cp ~/code/project/keystore etc/keystore .... 6. Edit the `start.ini` to configure your SSL settings. + -[source, screen, ] +[source, screen] .... [my-base]$ cat start.ini .... @@ -160,7 +160,7 @@ http.timeout=30000 Look at the configuration you have at this point. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-config @@ -233,7 +233,7 @@ Jetty Active XMLs: Now start Jetty. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar 2013-10-08 07:06:55.837:INFO:oejs.Server:main: jetty-{VERSION} @@ -261,7 +261,7 @@ Notice that you have `--module=` here and there; you have wrapped up the g You can see the list of modules: -[source, screen, ] +[source, screen] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-modules @@ -448,7 +448,7 @@ While you can manage the list of active modules yourself, it is much easier to e If you want to start using a new module: -[source, screen, ] +[source, screen] .... [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --add-to-start=https .... @@ -482,7 +482,7 @@ For more information on the `start.jar` in 9.1, see xref:start-jar[]. 1. Download and unpack Jetty into `/home/user/jetty-distribution-{VERSION}`. 2. Go to your base directory and just use the distribution, no editing. + -[source, screen, ] +[source, screen] .... [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar .... @@ -506,7 +506,7 @@ By default, the module system keeps things sane, and transitively includes all d You can see what the configuration looks like, after all of the modules are resolved, without starting Jetty via: -[source, screen, ] +[source, screen] .... [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --list-config .... @@ -518,7 +518,7 @@ Use the `--list-config` to see the configuration. Notice that only a subset of the JARs from the distribution are in use. The modules you have enabled determine that subset. -[source, screen, ] +[source, screen] .... [my-base]$ java -jar ~/jetty-distribution-{VERSION}/start.jar --list-config .... diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc index 80da659ad0fc..be406b2a2a3d 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/openid-support.adoc @@ -37,7 +37,7 @@ These may look like ===== OpenID Provider Configuration To enable OpenID support, you first need to activate the `openid` module in your implementation. -[source, screen, ] +[source, screen] ---- java -jar {JETTY_HOME}/start.jar --add-to-start=openid ---- @@ -55,7 +55,7 @@ To set the error page, an init param is set at `"org.eclipse.jetty.security.open Example: -[source, xml, ] +[source, xml] ---- OPENID @@ -73,27 +73,27 @@ Example: If the OpenID Provider allows metadata discovery then you can use. -[source, java, ] +[source, java] ---- OpenIdConfiguration openIdConfig = new OpenIdConfiguration(ISSUER, CLIENT_ID, CLIENT_SECRET); ---- Otherwise you can manually enter the necessary information: -[source, java, ] +[source, java] ---- OpenIdConfiguration openIdConfig = new OpenIdConfiguration(ISSUER, TOKEN_ENDPOINT, AUTH_ENDPOINT, CLIENT_ID, CLIENT_SECRET); ---- ===== Configuring an `OpenIdLoginService` -[source, java, ] +[source, java] ---- LoginService loginService = new OpenIdLoginService(openIdConfig); securityHandler.setLoginService(loginService); ---- ===== Configuring an `OpenIdAuthenticator` with `OpenIdConfiguration` and Error Page Redirect -[source, java, ] +[source, java] ---- Authenticator authenticator = new OpenIdAuthenticator(openIdConfig, "/error"); securityHandler.setAuthenticator(authenticator); @@ -106,7 +106,7 @@ servletContextHandler.setSecurityHandler(securityHandler); Claims about the user can be found using attributes on the session attribute `"org.eclipse.jetty.security.openid.claims"`, and the full response containing the OAuth 2.0 Access Token can be found with the session attribute `"org.eclipse.jetty.security.openid.response"`. Example: -[source, java, ] +[source, java] ---- Map claims = (Map)request.getSession().getAttribute("org.eclipse.jetty.security.openid.claims"); String userId = claims.get("sub"); @@ -127,7 +127,7 @@ If security roles are required they can be configured through a wrapped `LoginSe This can be configured in XML through `etc/openid-baseloginservice.xml` in the Distribution, or in embedded code using the constructor for the `OpenIdLoginService`. -[source, java, ] +[source, java] ---- LoginService wrappedLoginService = ...; // Optional LoginService for Roles LoginService loginService = new OpenIdLoginService(openIdConfig, wrappedLoginService); diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc index 41c77cccdb1d..1b52240c67b2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc @@ -32,7 +32,7 @@ The class `org.eclipse.jetty.util.security.Password` can be used to generate all Run it without arguments to see usage instructions: -[source, screen, ] +[source, screen] .... $ java -cp lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password @@ -42,7 +42,7 @@ If the password is ?, the user will be prompted for the password For example, to generate a secured version of the password `password` for the user `username`: -[source, screen, ] +[source, screen] .... $ java -cp ../lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password username password 2017-12-13 11:19:27.928:INFO::main: Logging initialized @95ms to org.eclipse.jetty.util.log.StdErrLog @@ -55,7 +55,7 @@ CRYPT:usjRS48E8ZADM If using a external tool to create/verify the MD5 hash (such as `md5sum` or `md5`), be sure to verify a carriage return (CR) or new line is not added. For example: -[source, screen, ] +[source, screen] .... //With a CR included $ echo password | md5sum @@ -71,7 +71,7 @@ ____ When using the `DIGEST` method in tandem with an MD5 hash, you must hash the entire `user:realm:password` string or you will encounter issues with authenticating. ____ -[source, screen, ] +[source, screen] .... $ java -cp ../lib/jetty-util-9.4.7.v20170914.jar org.eclipse.jetty.util.security.Password username username:realm:password 2017-12-13 11:34:33.263:INFO::main: Logging initialized @97ms to org.eclipse.jetty.util.log.StdErrLog @@ -106,7 +106,7 @@ ____ You can also use obfuscated passwords in Jetty xml files where a plain text password is required. Here's an example setting the password for a JDBC Datasource with obfuscation: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc index 7938d9506111..315ae7d05cdb 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc @@ -80,7 +80,7 @@ ____ An application is free to implement its own Alias checking. Alias Checkers can be installed in a context via the following XML used in a context deployer file or `WEB-INF/jetty-web.xml`: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc index 9b92351d8019..af33e226a556 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc @@ -27,7 +27,7 @@ This page presents several options to access port 80 as a non-root user, includi On some Linux systems you can use the _ipchains REDIRECT_ mechanism to redirect from one port to another inside the kernel (if `ipchains` is not available, then `iptables` usually is): -[source, screen, ] +[source, screen] ---- # /sbin/ipchains -I input --proto TCP --dport 80 -j REDIRECT 8080 ---- @@ -44,7 +44,7 @@ On many Linux systems you can use the `iptables` REDIRECT mechanism to redirect You need to add something like the following to the startup scripts or your firewall rules: -[source, screen, ] +[source, screen] ---- # /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ---- @@ -70,7 +70,7 @@ The `http.mod` is enabled by default in the distribution, while the link:#quicks . Ensure that you have link:#quickstart-changing-jetty-port[changed the http port] to 80 (and link:#quickstart-changing-https-port[changed the https port] to 443 if you are using SSL). . Enable the `setuid.mod` module: + -[source, screen, ] +[source, screen] ---- # java -jar start.jar --add-to-start=setuid ---- @@ -86,16 +86,16 @@ ____ If your server instance has a `${jetty.base/start.d}` directory, this configuration is in the `start.d/setuid.ini` file instead. Otherwise. this configuration is in the `${jetty.base}start.ini` file. - Below are the lines to configure: -+ -[source, text, ]] +Below are the lines to configure: + +[source, text] ---- jetty.startServerAsPrivileged=false jetty.username=foo jetty.groupname=bar jetty.umask=002 ---- -+ + ____ [NOTE] As well as opening the connectors as `root`, you can also have Jetty start the Server as `root` before changing to the non-`root` user. @@ -106,7 +106,7 @@ This code is hosted as part of the https://github.com/eclipse/jetty.toolchain[Je You can find the source code in the https://github.com/eclipse/jetty.toolchain/tree/master/jetty-setuid[eclipse/jetty.toolchain/jetty-setuid] project. Build it locally, which will produce a native library appropriate for the operating system: + -[source, screen, ] +[source, screen] ---- # mvn clean install ---- @@ -118,7 +118,7 @@ You may want copy this file into your Jetty distribution's lib directory. . Start Jetty as the `root` user in your base directory, providing the location of the native library to Java. Below is an example of how to do it from the command line, assuming you are in the link:#demo-webapps-base[demo-base] directory: + -[source, screen, ] +[source, screen] ---- # sudo java -Djava.library.path=libsetuid-linux -jar $JETTY_HOME/start.jar ---- @@ -129,7 +129,7 @@ Below is an example of how to do it from the command line, assuming you are in t Solaris 10 provides a User Rights Management framework that can permit users and processes superuser-like abilities: -[source, screen, ] +[source, screen] ---- usermod -K defaultpriv=basic,net_privaddr myself ---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc index b85a875543fb..66f84f3ad77b 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/spnego-support.adoc @@ -29,7 +29,7 @@ There is a substantial amount of configuration and testing required to enable th To run with SPNEGO enabled the following command line options are required: -[source,screen, ] +[source,screen] ---- -Djava.security.krb5.conf=/path/to/jetty/etc/krb5.ini \ -Djava.security.auth.login.config=/path/to/jetty/etc/spnego.conf \ @@ -38,7 +38,7 @@ To run with SPNEGO enabled the following command line options are required: For debugging the SPNEGO authentication the following options are very helpful: -[source,screen, ] +[source,screen] ---- -Dorg.eclipse.jetty.LEVEL=debug \ -Dsun.security.spnego.debug=all @@ -47,7 +47,7 @@ For debugging the SPNEGO authentication the following options are very helpful: SPNEGO Authentication must be enabled in the webapp in the following way. The name of the role will be different for your network. -[source, xml, ] +[source, xml] ---- @@ -75,7 +75,7 @@ A corresponding `UserRealm` needs to be created either programmatically if embed This is what the configuration within a Jetty xml file would look like. -[source, xml, ] +[source, xml] ---- @@ -91,7 +91,7 @@ This is what the configuration within a Jetty xml file would look like. This is what the configuration within a context xml file would look like. -[source, xml, ] +[source, xml] ---- @@ -124,14 +124,14 @@ To do this use a process similar to this: On the Windows Active Domain Controller run: -[source, screen, ] +[source, screen] ---- $ setspn -A HTTP/linux.mortbay.org ADUser ---- To create the keytab file use the following process: -[source, screen, ] +[source, screen] ---- $ ktpass -out c:\dir\krb5.keytab -princ HTTP/linux.mortbay.org@MORTBAY.ORG -mapUser ADUser -mapOp set -pass ADUserPWD -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL ---- diff --git a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc index 0e5454218fd8..8ab7a9a0dc89 100644 --- a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc +++ b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc @@ -23,7 +23,7 @@ The Ant Jetty plugin is a part of Jetty 9 under the `jetty-ant` module. This plugin makes it possible to start a Jetty web server directly from the Ant build script, and to embed the Jetty web server inside your build process. Its purpose is to provide almost the same functionality as the Jetty plugin for Maven: dynamic application reloading, working directly on web application sources, and tightly integrating with the build system. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -51,7 +51,7 @@ Now you're ready to edit or create your Ant `build.xml` file. Begin with an empty `build.xml`: -[source, xml, ] +[source, xml] ---- @@ -60,7 +60,7 @@ Begin with an empty `build.xml`: Add a `` that imports all available Jetty tasks: -[source, xml, ] +[source, xml] ---- @@ -76,7 +76,7 @@ Add a `` that imports all available Jetty tasks: Now you are ready to add a new target for running Jetty: -[source, xml, ] +[source, xml] ---- @@ -100,7 +100,7 @@ This is the minimal configuration you need. You can now start Jetty on the defau At the command line enter: -[source, screen, ] +[source, screen] .... > ant jetty.run .... @@ -113,7 +113,7 @@ ports and connectors::: To configure the port that Jetty starts on you need to define a connector. First you need to configure a `` for the Connector class and then define the connector in the Jetty tags: + -[source, xml, ] +[source, xml] ---- @@ -148,7 +148,7 @@ login services::: If your web application requires authentication and authorization services, you can configure these on the Jetty container. Here's an example of how to set up an link:{JDURL}/org/eclipse/jetty/security/HashLoginService.html[org.eclipse.jetty.security.HashLoginService]: + -[source, xml, ] +[source, xml] ---- @@ -176,7 +176,7 @@ request log::: The `requestLog` option allows you to specify a request logger for the Jetty instance. You can either use the link:{JDURL}/org/eclipse/jetty/server/NCSARequestLog.html[org.eclipse.jetty.server.NCSARequestLog] class, or supply the name of your custom class: + -[source, xml, ] +[source, xml] ---- @@ -197,7 +197,7 @@ request log::: temporary directory::: You can configure a directory as a temporary file store for uses such as expanding files and compiling JSPs by supplying the `tempDirectory` option: + -[source, xml, ] +[source, xml] ---- @@ -220,7 +220,7 @@ other context handlers::: You can specify these other context handlers using the `` element. You need to supply a `` for it before you can use it: + -[source, xml, ] +[source, xml] ---- @@ -249,7 +249,7 @@ system properties::: As a convenience, you can configure system properties by using the `` element. Be aware that, depending on the purpose of the system property, setting it from within the Ant execution may mean that it is evaluated too late, as the JVM evaluates some system properties on entry. + -[source, xml, ] +[source, xml] ---- @@ -273,7 +273,7 @@ system properties::: jetty XML file::: If you have a lot of configuration to apply to the Jetty container, it can be more convenient to put it into a standard Jetty XML configuration file and have the Ant plugin apply it before starting Jetty: + -[source, xml, ] +[source, xml] ---- @@ -297,7 +297,7 @@ scanning for changes::: The `scanIntervalSeconds` option controls how frequently the `` task scans your web application/WAR file for changes. The default value of `0` disables scanning. Here's an example where Jetty checks for changes every five seconds: + -[source, xml, ] +[source, xml] ---- @@ -323,7 +323,7 @@ stopping::: The `` task sends this stop message. You can also optionally provide a `stopWait` value (in seconds), which is the length of time the `` task waits for confirmation that the stop succeeded: + -[source, xml, ] +[source, xml] ---- @@ -348,7 +348,7 @@ stopping::: + To stop jetty via Ant, enter: + -[source, screen, ] +[source, screen] .... > ant jetty.stop .... @@ -361,7 +361,7 @@ execution without pausing ant::: This defaults to `false`. For `true`, Ant continues to execute after starting Jetty. If Ant exits, so does Jetty. Understand that this option does _not_ fork a new process for Jetty. + -[source, xml, ] +[source, xml] ---- @@ -385,7 +385,7 @@ execution without pausing ant::: Add a `` for the `org.eclipse.jetty.ant.AntWebAppContext` class with name __webApp__, then add a `` element to `` to describe your web application. The following example deploys a web application that is expanded in the local directory `foo/` to context path ` / `: -[source, xml, ] +[source, xml] ---- @@ -412,7 +412,7 @@ deploying a WAR file::: It is not necessary to expand the web application into a directory. It is fine to deploy it as a WAR file: + -[source, xml, ] +[source, xml] ---- @@ -438,7 +438,7 @@ deploying a WAR file::: deploying more than one web application::: You can also deploy more than one web application: + -[source, xml, ] +[source, xml] ---- @@ -473,7 +473,7 @@ class, you can configure it by adding attributes of the same name Here's an example that specifies the location of the `web.xml` file (equivalent to method link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setDescriptor%28java.lang.String%29[`AntWebAppContext.setDescriptor()`]) and the web application's temporary directory (equivalent to method link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setTempDirectory%28java.io.File%29[`AntWebAppContext.setTempDirectory()`]): -[source, xml, ] +[source, xml] ---- @@ -501,7 +501,7 @@ Other extra configuration options for the AntWebAppContext include: extra classes and Jars::: If your web application's classes and Jars do not reside inside `WEB-INF` of the resource base directory, you can use the and elements to tell Ant where to find them. Here's an example: + -[source, xml, ] +[source, xml] ---- @@ -538,7 +538,7 @@ context attributes::: For convenience, the Ant plugin permits you to configure these directly in the build file. Here's an example: + -[source, xml, ] +[source, xml] ---- @@ -567,7 +567,7 @@ context attributes::: `jetty-env.xml` file::: If you are using features such as link:#configuring_jndi[JNDI] with your web application, you may need to configure a link:#using_jndi[`WEB-INF/jetty-env.xml`] file to define resources. If the structure of your web application project is such that the source of `jetty-env.xml` file resides somewhere other than `WEB-INF`, you can use the `jettyEnvXml` attribute to tell Ant where to find it: + -[source, xml, ] +[source, xml] ---- @@ -596,7 +596,7 @@ context XML file::: In this case, you can use a standard context XML configuration file which the Ant plugin applies to your web application before it is deployed. Be aware that the settings from the context XML file _override_ those of the attributes and nested elements you defined in the build file. + -[source, xml, ] +[source, xml] ---- project name="Jetty-Ant integration test" basedir="."> diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc index e01f6114ca36..cea1ca578c51 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-api.adoc @@ -24,7 +24,7 @@ The simple way to perform a HTTP request is the following: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.GET("http://domain.com/path?query"); ---- @@ -36,7 +36,7 @@ The content length is limited by default to 2 MiB; for larger content see xref:h If you want to customize the request, for example by issuing a `HEAD` request instead of a `GET`, and simulating a browser user agent, you can do it in this way: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path?query") .method(HttpMethod.HEAD) @@ -46,7 +46,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/path?query") This is a shorthand for: -[source, java, ] +[source, java] ---- Request request = httpClient.newRequest("http://domain.com/path?query"); request.method(HttpMethod.HEAD); @@ -59,7 +59,7 @@ When the request object is customized, you call `request.send()` that produces t Simple `POST` requests also have a shortcut method: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.POST("http://domain.com/entity/1") .param("p", "value") @@ -73,7 +73,7 @@ Following redirects is a feature that you can enable/disable on a per-request ba File uploads also require one line, and make use of JDK 7′s `java.nio.file` classes: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -83,7 +83,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") It is possible to impose a total timeout for the request/response conversation using the `Request.timeout(...)` method as follows: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path?query") .timeout(5, TimeUnit.SECONDS) @@ -123,7 +123,7 @@ When the request and the response are both fully processed, the thread that fini A simple asynchronous `GET` request that discards the response content can be written in this way: -[source, java, ] +[source, java] ---- httpClient.newRequest("http://domain.com/path") .send(new Response.CompleteListener() @@ -140,7 +140,7 @@ Method `Request.send(Response.CompleteListener)` returns `void` and does not blo You can write the same code using JDK 8′s lambda expressions: -[source, java, ] +[source, java] ---- httpClient.newRequest("http://domain.com/path") .send(result -> { /* Your logic here */ }); @@ -148,7 +148,7 @@ httpClient.newRequest("http://domain.com/path") You can impose a total timeout for the request/response conversation in the same way used by the synchronous API: -[source, java, ] +[source, java] ---- httpClient.newRequest("http://domain.com/path") .timeout(3, TimeUnit.SECONDS) @@ -159,7 +159,7 @@ The example above will impose a total timeout of 3 seconds on the request/respon The HTTP client APIs use listeners extensively to provide hooks for all possible request and response events, and with JDK 8′s lambda expressions they are even more fun to use: -[source, java, ] +[source, java] ---- httpClient.newRequest("http://domain.com/path") // Add request hooks @@ -191,7 +191,7 @@ Jetty's HTTP client provides a number of utility classes off the shelf to handle You can provide request content as `String`, `byte[]`, `ByteBuffer`, `java.nio.file.Path`, `InputStream`, and provide your own implementation of `org.eclipse.jetty.client.api.ContentProvider`. Here’s an example that provides the request content using `java.nio.file.Paths`: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -201,7 +201,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") This is equivalent to using the `PathContentProvider` utility class: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -211,7 +211,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") Alternatively, you can use `FileInputStream` via the `InputStreamContentProvider` utility class: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/upload") .method(HttpMethod.POST) @@ -223,7 +223,7 @@ Since `InputStream` is blocking, then also the send of the request will block if If you have already read the content in memory, you can pass it as a `byte[]` using the `BytesContentProvider` utility class: -[source, java, ] +[source, java] ---- byte[] bytes = ...; ContentResponse response = httpClient.newRequest("http://domain.com/upload") @@ -234,7 +234,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/upload") If the request content is not immediately available, but your application will be notified of the content to send, you can use `DeferredContentProvider` in this way: -[source, java, ] +[source, java] ---- DeferredContentProvider content = new DeferredContentProvider(); httpClient.newRequest("http://domain.com/upload") @@ -270,7 +270,7 @@ This allows fine-grained control of the request/response conversation: for examp Another way to provide request content is by using an `OutputStreamContentProvider`, which allows applications to write request content when it is available to the `OutputStream` provided by `OutputStreamContentProvider`: -[source, java, ] +[source, java] ---- OutputStreamContentProvider content = new OutputStreamContentProvider(); @@ -306,7 +306,7 @@ The first way is to buffer the response content in memory; this is done when usi If you want to control the length of the response content (for example limiting to values smaller than the default of 2 MiB), then you can use a `org.eclipse.jetty.client.util.FutureResponseListener` in this way: -[source, java, ] +[source, java] ---- Request request = httpClient.newRequest("http://domain.com/path"); @@ -322,7 +322,7 @@ If the response content length is exceeded, the response will be aborted, and an If you are using the asynchronous APIs (see xref:http-client-async[]), you can use the `BufferingResponseListener` utility class: -[source, java, ] +[source, java] ---- httpClient.newRequest("http://domain.com/path") // Buffer response content up to 8 MiB @@ -344,7 +344,7 @@ The second way is the most efficient (because it avoids content copies) and allo In the example below, `Response.Listener.Adapter` is a class that implements both `Response.ContentListener` and `Response.CompleteListener` and can be passed to `Request.send()`. Jetty's HTTP client will invoke the `onContent()` method zero or more times (until there is content), and finally invoke the `onComplete()` method. -[source, java, ] +[source, java] ---- httpClient .newRequest("http://domain.com/path") .send(new Response.Listener.Adapter() @@ -359,7 +359,7 @@ httpClient .newRequest("http://domain.com/path") The third way allows you to wait for the response and then stream the content using the `InputStreamResponseListener` utility class: -[source, java, ] +[source, java] ---- InputStreamResponseListener listener = new InputStreamResponseListener(); diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc index b6827f159801..708a088c0401 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-authentication.adoc @@ -23,7 +23,7 @@ Jetty's HTTP client supports the `BASIC` and `DIGEST` authentication mechanisms You can configure authentication credentials in the HTTP client instance as follows: -[source, java, ] +[source, java] ---- URI uri = new URI("http://domain.com/secure"); String realm = "MyRealm"; @@ -61,14 +61,14 @@ The application does not receive events related to the response with code 401, t Successful authentications are cached, but it is possible to clear them in order to force authentication again: -[source, java, ] +[source, java] ---- httpClient.getAuthenticationStore().clearAuthenticationResults(); ---- Authentications may be preempted to avoid the additional roundtrip due to the server challenge in this way: -[source, java, ] +[source, java] ---- AuthenticationStore auth = httpClient.getAuthenticationStore(); URI uri = URI.create("http://domain.com/secure"); @@ -79,7 +79,7 @@ In this way, requests for the given URI are enriched by `HttpClient` immediately It is also possible to preempt the authentication for a single request only, in this way: -[source, java, ] +[source, java] ---- URI uri = URI.create("http://domain.com/secure"); Authentication.Result authn = new BasicAuthentication.BasicResult(uri, "username", "password") diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc index 230a26e99e6a..93ddf646f7de 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-cookie.adoc @@ -25,7 +25,7 @@ When new requests are made, the cookie store is consulted and if there are match Applications can programmatically access the cookie store to find the cookies that have been set: -[source, java, ] +[source, java] ---- CookieStore cookieStore = httpClient.getCookieStore(); List cookies = cookieStore.get(URI.create("http://domain.com/path")); @@ -33,7 +33,7 @@ List cookies = cookieStore.get(URI.create("http://domain.com/path")) Applications can also programmatically set cookies as if they were returned from a HTTP response: -[source, java, ] +[source, java] ---- CookieStore cookieStore = httpClient.getCookieStore(); HttpCookie cookie = new HttpCookie("foo", "bar"); @@ -45,7 +45,7 @@ cookieStore.add(URI.create("http://domain.com"), cookie); Cookies may be added only for a particular request: -[source, java, ] +[source, java] ---- ContentResponse response = httpClient.newRequest("http://domain.com/path") .cookie(new HttpCookie("foo", "bar")) @@ -54,7 +54,7 @@ ContentResponse response = httpClient.newRequest("http://domain.com/path") You can remove cookies that you do not want to be sent in future HTTP requests: -[source, java, ] +[source, java] ---- CookieStore cookieStore = httpClient.getCookieStore(); URI uri = URI.create("http://domain.com"); @@ -65,14 +65,14 @@ for (HttpCookie cookie : cookies) If you want to totally disable cookie handling, you can install a `HttpCookieStore.Empty` instance in this way: -[source, java, ] +[source, java] ---- httpClient.setCookieStore(new HttpCookieStore.Empty()); ---- You can enable cookie filtering by installing a cookie store that performs the filtering logic in this way: -[source, java, ] +[source, java] ---- httpClient.setCookieStore(new GoogleOnlyCookieStore()); @@ -94,14 +94,14 @@ Jetty is compliant with link:https://tools.ietf.org/html/rfc6265[RFC6265], and a Previously, Version=1 cookies defined in link:https://tools.ietf.org/html/rfc2109[RFC2109] (and continued in link:https://tools.ietf.org/html/rfc2965[RFC2965]) allowed for special/reserved characters to be enclosed within double quotes when declared in a `Set-Cookie` response header: -[source, java, ] +[source, java] ---- Set-Cookie: foo="bar;baz";Version=1;Path="/secur" ---- This was added to the HTTP Response header as follows: -[source, java, ] +[source, java] ---- Cookie cookie = new Cookie("foo", "bar;baz"); cookie.setPath("/secur"); @@ -111,7 +111,7 @@ response.addCookie(cookie); The introduction of RFC6265 has rendered this approach no longer possible; users are now required to encode cookie values that use these special characters. This can be done utilizing `javax.servlet.http.Cookie` as follows: -[source, java, ] +[source, java] ---- Cookie cookie = new Cookie("foo", URLEncoder.encode("bar;baz", "utf-8")); ---- diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc index 173f9ec6df25..75b64b951069 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-intro.adoc @@ -54,7 +54,7 @@ it provides you with the responses to the requests you make. In order to use `HttpClient`, you must instantiate it, configure it, and then start it: -[source, java, ] +[source, java] ---- // Instantiate HttpClient HttpClient httpClient = new HttpClient(); @@ -78,7 +78,7 @@ When you create a `HttpClient` instance using the parameterless constructor, you In order to perform HTTPS requests, you should create first a link:{JDURL}/org/eclipse/jetty/util/ssl/SslContextFactory.Client.html[`SslContextFactory.Client`], configure it, and pass it to the `HttpClient` constructor. When created with a `SslContextFactory`, the `HttpClient` will be able to perform both HTTP and HTTPS requests to any domain. -[source, java, ] +[source, java] ---- // Instantiate and configure the SslContextFactory SslContextFactory.Client sslContextFactory = new SslContextFactory.Client(); @@ -97,7 +97,7 @@ httpClient.start(); It is recommended that when your application stops, you also stop the `HttpClient` instance (or instances) that you are using. -[source, java, ] +[source, java] ---- httpClient.stop(); ---- diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc index 02f8bb1995c5..22c223164903 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-proxy.adoc @@ -26,7 +26,7 @@ Other implementations may be written by subclassing `ProxyConfiguration.Proxy`. The following is a typical configuration: -[source, java, ] +[source, java] ---- ProxyConfiguration proxyConfig = httpClient.getProxyConfiguration(); HttpProxy proxy = new HttpProxy("proxyHost", proxyPort); @@ -51,7 +51,7 @@ Jetty's HTTP client support proxy authentication in the same way it supports lin In the example below, the proxy requires Basic authentication, but the server requires Digest authentication, and therefore: -[source, java, ] +[source, java] ---- URI proxyURI = new URI("http://proxy.net:8080"); URI serverURI = new URI("http://domain.com/secure"); diff --git a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc index 0a838fc514aa..705c49de8fcc 100644 --- a/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc +++ b/jetty-documentation/src/main/asciidoc/development/clients/http/http-client-transport.adoc @@ -30,7 +30,7 @@ This allows them to write their logic against a high-level API that hides the de The most common protocol format is HTTP/1.1, a text-based protocol with lines separated by `\r\n`: -[source, screen, ] +[source, screen] ---- GET /index.html HTTP/1.1\r\n Host: domain.com\r\n @@ -40,7 +40,7 @@ Host: domain.com\r\n However, the same request can be made using FastCGI, a binary protocol: -[source, screen, ] +[source, screen] ---- x01 x01 x00 x01 x00 x08 x00 x00 x00 x01 x01 x00 x00 x00 x00 x00 @@ -58,7 +58,7 @@ Similarly, HTTP/2 is a binary protocol that transports the same information in a HTTP/1.1 is the default transport. -[source, java, ] +[source, java] ---- // No transport specified, using default. HttpClient client = new HttpClient(); @@ -67,7 +67,7 @@ client.start(); If you want to customize the HTTP/1.1 transport, you can explicitly configure `HttpClient` in this way: -[source, java, ] +[source, java] ---- int selectors = 1; HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP(selectors); @@ -82,7 +82,7 @@ The example above allows you to customize the number of NIO selectors that `Http The HTTP/2 transport can be configured in this way: -[source, java, ] +[source, java] ---- HTTP2Client h2Client = new HTTP2Client(); h2Client.setSelectors(1); @@ -100,7 +100,7 @@ client.start(); The FastCGI transport can be configured in this way: -[source, java, ] +[source, java] ---- int selectors = 1; String scriptRoot = "/var/www/wordpress"; diff --git a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc index 4ce48e9a2ff5..07af69c5bea8 100644 --- a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc +++ b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-patterns.adoc @@ -24,7 +24,7 @@ The suspend/resume style is used when a servlet and/or filter is used to generate the response after an asynchronous wait that is terminated by an asynchronous handler. Typically a request attribute is used to pass results and to indicate if the request has already been suspended. -[source, java, ] +[source, java] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { @@ -69,7 +69,7 @@ This style is very good when the response needs the facilities of the servlet co The suspend/complete style is used when an asynchronous handler is used to generate the response: -[source, java, ] +[source, java] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { diff --git a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc index bd9478335dd3..a61a2f2a285e 100644 --- a/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc +++ b/jetty-documentation/src/main/asciidoc/development/continuations/continuations-using.adoc @@ -33,7 +33,7 @@ The link:{JDURL}/org/eclipse/jetty/continuation/ContinuationSupport.html[Continu To suspend a request, the suspend method can be called on the continuation: -[source, java, ] +[source, java] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { @@ -62,7 +62,7 @@ If an exception is desirable (to bypass code that is unaware of continuations an Once an asynchronous event has occurred, the continuation can be resumed: -[source, java, ] +[source, java] ---- void myAsyncCallback(Object results) { @@ -80,7 +80,7 @@ Continuation resume is analogous to Servlet 3.0 `AsyncContext.dispatch()`. As an alternative to resuming a request, an asynchronous handler may write the response itself. After writing the response, the handler must indicate the request handling is complete by calling the complete method: -[source, java, ] +[source, java] ---- void myAsyncCallback(Object results) { @@ -95,7 +95,7 @@ After complete is called, the container schedules the response to be committed An application may monitor the status of a continuation by using a ContinuationListener: -[source, java, ] +[source, java] ---- void doGet(HttpServletRequest request, HttpServletResponse response) { diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc index 368725afe361..517fa20b42a5 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc @@ -42,7 +42,7 @@ This example is very similar to the one in the previous section, although it ena As of jetty-9.2, we use the JSP engine from Apache, which relies on a Servlet Specification 3.1 style `ServletContainerInitializer` to initialize itself. To get this to work with Jetty, you need to enable annotations processing, as shown in this example code: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebAppWithJsp.java[] @@ -56,7 +56,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project, you will need the following Maven dependencies declared, in addition to those from the previous section: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc index 7d1b5ce0d8e1..2cc5bd0c4f9f 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc @@ -80,7 +80,7 @@ The handler sets the response status, content-type, and marks the request as han To allow a Handler to handle HTTP requests, you must add it to a Server instance. The following code from OneHandler.java shows how a Jetty server can use the HelloWorld handler: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneHandler.java[] ---- @@ -132,7 +132,7 @@ Thus when the `ContextHandler` handles the request, it does so within the scope The link:{JDURL}/org/eclipse/jetty/embedded/FileServer.html[FileServer example] shows how you can use a `ResourceHandler` to serve static content from the current working directory: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java[] ---- @@ -149,7 +149,7 @@ However, often when embedding Jetty it is desirable to explicitly instantiate an The following example, link:{JDURL}/org/eclipse/jetty/embedded/OneConnector.html[OneConnector.java], instantiates, configures, and adds a single HTTP connector instance to the server: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java[] ---- @@ -173,7 +173,7 @@ It uses standard path mappings to match a Servlet to a request; sets the request The link:{JDURL}/org/eclipse/jetty/embedded/MinimalServlets.html[MinimalServlets example] creates a `ServletHandler` instance and configures a single HelloServlet: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java[] ---- @@ -191,7 +191,7 @@ Requests that match the context path have their path methods updated accordingly The following link:{JDURL}/org/eclipse/jetty/embedded/OneContext.html[OneContext example] shows a context being established that wraps the link:{JDURL}/org/eclipse/jetty/embedded/HelloHandler.html[HelloHandler]: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java[] ---- @@ -199,7 +199,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/One When many contexts are present, you can embed a `ContextHandlerCollection` to efficiently examine a request URI to then select the matching `ContextHandler`(s) for the request. The link:{JDURL}/org/eclipse/jetty/embedded/ManyContexts.html[ManyContexts example] shows how many such contexts you can configure: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java[] ---- @@ -209,7 +209,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/Man A link:{JDURL}/org/eclipse/jetty/servlet/ServletContextHandler.html[`ServletContextHandler`] is a specialization of `ContextHandler` with support for standard sessions and Servlets. The following link:{JDURL}/org/eclipse/jetty/embedded/OneServletContext.html[OneServletContext example] instantiates a link:{JDURL}/org/eclipse/jetty/servlet/DefaultServlet.html[`DefaultServlet`] to server static content from /tmp/ and a `DumpServlet` that creates a session and dumps basic details about the request: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java[] ---- @@ -220,7 +220,7 @@ A link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html[`WebAppContext`] is a The following link:{JDURL}/org/eclipse/jetty/embedded/OneWebApp.html[OneWebApp example] configures the Jetty test webapp. Web applications can use resources the container provides, and in this case a `LoginService` is needed and also configured: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java[] ---- @@ -241,7 +241,7 @@ The link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedd * link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-lowresources.xml[jetty-lowresources.xml] * link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/config/etc/test-realm.xml[test-realm.xml] -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc index 3957515867b2..9ac9ef39b7c3 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-file-server.adoc @@ -24,7 +24,7 @@ It is perfectly suitable for test cases where you need an actual web server to o Note that this does not have any logic for caching of files, either within the server or setting the appropriate headers on the response. It is simply a few lines that illustrate how easy it is to serve out some files. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java[] @@ -38,7 +38,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc index 5bdf48a86c0d..7010d0e18a4e 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-many-connectors.adoc @@ -22,7 +22,7 @@ This example shows how to configure Jetty to use multiple connectors, specifically so it can process both http and https requests. Since the meat of this example is the server and connector configuration it only uses a simple HelloHandler but this example should be easily merged with other examples like those deploying servlets or webapps. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java[] @@ -38,7 +38,7 @@ See link:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join To use this example in your project you will need the following Maven dependencies declared. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc index 52505dcef17d..ccd21a0527ae 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-minimal-servlet.adoc @@ -24,7 +24,7 @@ Note that this is strictly a servlet, not a servlet in the context of a web appl This is purely just a servlet deployed and mounted on a context and able to process requests. This example is excellent for situations where you have a simple servlet that you need to unit test, just mount it on a context and issue requests using your favorite http client library (like our Jetty client found in xref:http-client[]). -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java[] @@ -43,7 +43,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc index 182413e2be67..29413a95dc49 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-one-webapp.adoc @@ -23,7 +23,7 @@ This example shows how to deploy a simple webapp with an embedded instance of Je This is useful when you want to manage the lifecycle of a server programmatically, either within a production application or as a simple way to deploying and debugging a full scale application deployment. In many ways it is easier then traditional deployment since you control the classpath yourself, making this easy to wire up in a test case in Maven and issue requests using your favorite http client library (like our Jetty client found in xref:http-client[]). -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java[] @@ -37,7 +37,7 @@ After you have started things up you should be able to navigate to http://localh To use this example in your project you will need the following Maven dependencies declared. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc index 8360b4089c43..5a2ddf5e0f07 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-secured-hello-handler.adoc @@ -24,7 +24,7 @@ We have a simple Hello Handler that just return a greeting but add on the restri Another thing to remember is that this example uses the `ConstraintSecurityHandler` which is what supports the security mappings inside of the servlet api, it could be easier to show just the `SecurityHandler` usage, but the constraint provides more configuration power. If you don't need that you can drop the Constraint bits and use just the `SecurityHandler`. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SecuredHelloHandler.java[] @@ -46,7 +46,7 @@ include::{SRCDIR}/examples/embedded/src/test/resources/realm.properties[] To use this example in your project you will need the following Maven dependencies declared. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc index a2ad0ec189b7..59e9dc575f80 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/examples/embedded-split-file-server.adoc @@ -21,7 +21,7 @@ This example builds on the link:#emebedded-file-server[Simple File Server] to show how chaining multiple `ResourceHandlers` together can let you aggregate multiple directories to serve content on a single path and how you can link these together with `ContextHandlers`. -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SplitFileServer.java[] @@ -38,7 +38,7 @@ Any requests for files will be looked for in the first resource handler, then th To use this example as is in your project you will need the following maven dependencies declared. We would recommend not using the toolchain dependency in your actual application. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index 3cfc388b81d6..41e20e437839 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -42,7 +42,7 @@ ____ Use curl as follows: -[source, screen, ] +[source, screen] .... > mkdir Demo > cd Demo @@ -56,7 +56,7 @@ The link:#embedding[Embedding Jetty] section contains many examples of writing a This tutorial uses a simple HelloWorld handler with a main method to run the server. You can either link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java[download] or create in an editor the file `HelloWorld.java` with the following content: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/HelloWorld.java[] ---- @@ -66,7 +66,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/Hel The following command compiles the HelloWorld class: -[source, screen, ] +[source, screen] .... > mkdir classes > javac -d classes -cp jetty-all-uber.jar HelloWorld.java @@ -77,7 +77,7 @@ The following command compiles the HelloWorld class: The following command runs the HelloWorld example: -[source, screen, ] +[source, screen] .... > java -cp classes:jetty-all-uber.jar org.eclipse.jetty.embedded.HelloWorld .... diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc index 60a6a11c4563..42ea9b3fce6b 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc @@ -31,7 +31,7 @@ We'll refer to the unpacked location as `$metro.home`. 3. Copy the jars from $metro.home/lib to `$jetty.home/lib/metro` 4. Edit the start.ini file and add an OPTION line for metro near the end. + -[source, plain, ] +[source, plain] ---- OPTIONS=metro ---- @@ -43,7 +43,7 @@ The Metro distribution you downloaded should also contain several example web ap Here's an example of the log output from Jetty when one of the sample Metro wars (from `$metro.home/samples/async`) is deployed to Jetty: -[source, screen, ] +[source, screen] .... [2093] java -jar start.jar diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index f09c1b4f0617..9771962025be 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -93,7 +93,7 @@ Either this property _or_ the *jetty.home.bundle* _must_ be specified. This property should point to a file system location that has an `etc/` directory containing xml files to configure the Jetty container on startup. For example: + -[source, plain, ] +[source, plain] ---- jetty.home=/opt/custom/jetty @@ -102,7 +102,7 @@ jetty.home=/opt/custom/jetty + Where `/opt/custom/jetty` contains: + -[source, plain, ] +[source, plain] ---- etc/jetty.xml @@ -118,7 +118,7 @@ The `jettyhome/` directory should have a subdirectory called `etc/` that contain The jetty-osgi-boot.jar contains a `jettyhome/` directory with a default set of xml configuration files. Here's how you would specify it: + -[source, plain, ] +[source, plain] ---- jetty.home.bundle=org.eclipse.jetty.osgi.boot ---- @@ -126,7 +126,7 @@ jetty.home.bundle=org.eclipse.jetty.osgi.boot + Here's a partial listing of that jar that shows you the names of the xml files contained within it: + -[source, plain, ] +[source, plain] ---- META-INF/MANIFEST.MF jettyhome/etc/jetty.xml @@ -138,7 +138,7 @@ jetty.etc.config.urls:: This specifies the paths of the xml files that are to be used. If not specified, they default to: + -[source, plain, ] +[source, plain] ---- etc/jetty.xml,etc/jetty-http.xml,etc/jetty-deploy.xml ---- @@ -163,7 +163,7 @@ You can now go ahead and deploy the jetty-osgi-boot.jar into your OSGi container A Jetty server instance will be created, the xml config files applied to it, and then published as an OSGi service. Normally, you will not need to interact with this service instance, however you can retrieve a reference to it using the usual OSGi API: -[source, java, ] +[source, java] ---- org.osgi.framework.BundleContext bc; org.osgi.framework.ServiceReference ref = bc.getServiceReference("org.eclipse.jetty.server.Server"); @@ -187,7 +187,7 @@ the Server's name. Here's an example of how to create a new Server instance and register it with OSGi so that the jetty-osgi-boot code will find it and configure it so it can be a deployment target: -[source, java, ] +[source, java] ---- public class Activator implements BundleActivator { @@ -213,7 +213,7 @@ public class Activator implements BundleActivator Now that we have created a new Server called "fooServer", we can deploy webapps and `ContextHandlers` as Bundles or Services to it (see below for more information on this). Here's an example of deploying a webapp as a Service and targeting it to the "fooServer" Server we created above: -[source, java, ] +[source, java] ---- public class Activator implements BundleActivator { @@ -248,7 +248,7 @@ Here's an example of a bundle where the resources of the webapp are not located + `MANIFEST`: + -[source, plain, ] +[source, plain] ---- Bundle-Name: Web Jetty-WarResourcePath: web @@ -260,7 +260,7 @@ Bundle-SymbolicName: com.acme.sample.web + Bundle contents: + -[source, plain, ] +[source, plain] ---- META-INF/MANIFEST.MF web/index.html @@ -277,7 +277,7 @@ Here's an example based on the previous one where we use the `Web-ContextPath` h + `MANIFEST`: + -[source, plain, ] +[source, plain] ---- Bundle-Name: Web Jetty-WarResourcePath: web @@ -324,14 +324,14 @@ If the `MANIFEST` does not contain that header, then Jetty will concoct a contex For example, suppose we have a bundle whose location is: -[source, plain, ] +[source, plain] ---- file://some/where/over/the/rainbow/oz.war ---- The corresponding synthesized context path would be: -[source, plain, ] +[source, plain] ---- /oz ---- @@ -343,7 +343,7 @@ This xml file must be placed in `META-INF` of the bundle, and must be called `je Here's an example of a webapp bundle listing containing such a file: -[source, plain, ] +[source, plain] ---- META-INF/MANIFEST.MF META-INF/jetty-webapp-context.xml @@ -356,7 +356,7 @@ com/acme/sample/web/MyOtherStuff.class Here's an example of the contents of a `META-INF/jetty-webapp-context.xml` file: -[source, xml, ] +[source, xml] ---- @@ -388,28 +388,28 @@ The context files can be inside the bundle, external to the bundle somewhere on + A context file that is inside the bundle: + -[source, plain, ] +[source, plain] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml ---- + A context file that is on the file system: + -[source, plain, ] +[source, plain] ---- Jetty-ContextFilePath: /opt/app/contexts/foo.xml ---- + A context file that is relative to jetty.home: + -[source, plain, ] +[source, plain] ---- Jetty-ContextFilePath: contexts/foo.xml ---- + A number of different context files: + -[source, plain, ] +[source, plain] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml,/opt/app/contexts/foo.xml,contexts/foo.xml ---- @@ -437,7 +437,7 @@ Note that this could be either a directory in the file system if the OSGi contai Here's an example of a context xml file that makes use of these properties: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] ---- @@ -452,7 +452,7 @@ Here's an example of doing that with a simple bundle that serves static content, The bundle contents: -[source, plain, ] +[source, plain] ---- META-INF/MANIFEST.MF index.html @@ -461,7 +461,7 @@ com/acme/osgi/Activator.class The `MANIFEST.MF`: -[source, plain, ] +[source, plain] ---- Bundle-Classpath: . Bundle-Name: Jetty OSGi Test WebApp @@ -481,7 +481,7 @@ Bundle-SymbolicName: com.acme.testwebapp The Activator code: -[source, java, ] +[source, java] ---- public void start(BundleContext context) throws Exception { @@ -532,7 +532,7 @@ Here's an example of doing that with a simple bundle that serves static content The bundle contents: -[source, plain, ] +[source, plain] ---- META-INF/MANIFEST.MF static/index.html @@ -543,7 +543,7 @@ com/acme/osgi/Activator$1.class The `MANIFEST`: -[source, plain, ] +[source, plain] ---- Bundle-Classpath: . Bundle-Name: Jetty OSGi Test Context @@ -564,7 +564,7 @@ Bundle-SymbolicName: com.acme.testcontext The Activator code: -[source, java, ] +[source, java] ---- public void start(final BundleContext context) throws Exception { @@ -593,7 +593,7 @@ public void start(final BundleContext context) throws Exception The contents of the `acme.xml` context file: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] ---- @@ -751,7 +751,7 @@ This is necessary because the classloading regime used by the OSGi container is Firstly, lets look at an example of a web bundle's modified `MANIFEST` file so you get an idea of what is required. This example is a web bundle that uses the Spring servlet framework: -[source, plain, ] +[source, plain] ---- Bundle-SymbolicName: com.acme.sample Bundle-Name: WebSample @@ -782,7 +782,7 @@ org.eclipse.jetty.osgi.tldbundles:: System property defined on the OSGi environment that is a comma separated list of symbolic names of bundles containing taglibs that will be treated as if they are on the container's classpath for web bundles. For example: + -[source, plain, ] +[source, plain] ---- org.eclipse.jetty.osgi.tldbundles=com.acme.special.tags,com.foo.web,org.bar.web.framework ---- @@ -798,7 +798,7 @@ In that case, it can be specified on the `org.eclipse.jetty.deploy.DeploymentMan The `jetty-osgi-boot.jar` contains the default `jettyhome/etc/jetty-deploy.xml` file where the `DeploymentManager` is defined. To set the pattern, you will need to provide your own etc files - see the section on link:#customize-jetty-container[customizing the jetty container] for how to do this. Here's how the `jetty-deploy.xml` file would look if we defined a pattern that matched all bundle symbolic names ending in "tag" and "web": + -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc index ea911fd6fd99..ec3ba3619621 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc @@ -28,7 +28,7 @@ If you want to replace the jetty-xml being used to start the normal Jetty distri The skeleton of a jetty spring module can be enabled from the jetty-distribution via the link:#startup-modules[module mechanism]. For example: -[source, screen, ] +[source, screen] .... $ java -jar start.jar --add-to-start=spring .... @@ -42,7 +42,7 @@ You will need to download these and place them into jetty's classpath - you can Configuring Jetty via Spring is simply a matter of calling the API as Spring beans. The following is an example mimicking the default jetty startup configuration. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc index 03385f5fe822..48275308c9df 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc @@ -30,19 +30,19 @@ This can be accomplished either by enabling one of the startup link:#startup-mod * the `cdi-decorate` module is the preferred Weld integration. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, ] +[source, screen] .... INFO: WELD-ENV-001212: Jetty CdiDecoratingListener support detected, CDI injection will be available in Listeners, Servlets and Filters. .... * the `cdi-spi` module works with Weld, but may restrict some non standard features. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, ] +[source, screen] .... INFO: WELD-ENV-001213: Jetty CDI SPI support detected, CDI injection will be available in Listeners, Servlets and Filters. .... * the deprecated `cdi2` module works with Weld prior to 3.1.2.Final. The activation of this module by Weld can be confirmed by the following Weld log: -[source, screen, ] +[source, screen] .... INFO: WELD-ENV-001201: Jetty 7.2+ detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported. .... diff --git a/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc b/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc index f5d4610f9cc3..9db86b46fbdd 100644 --- a/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc +++ b/jetty-documentation/src/main/asciidoc/development/handlers/writing-custom-handlers.adoc @@ -36,7 +36,7 @@ Classes that implement this interface are used to coordinate requests, filter re The core API of the Handler interface is: -[source, java, ] +[source, java] ---- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException @@ -69,7 +69,7 @@ More often than not, access to the Jetty implementations of these classes is req However, as the request and response may be wrapped by handlers, filters and servlets, it is not possible to pass the implementation directly. The following mantra retrieves the core implementation objects from under any wrappers: -[source, java, ] +[source, java] ---- Request base_request = request instanceof Request ? (Request)request : HttpConnection.getCurrentConnection().getHttpChannel().getRequest(); Response base_response = response instanceof Response ? (Response)response : HttpConnection.getCurrentConnection().getHttpChannel().getResponse(); @@ -107,7 +107,7 @@ The link:{JDURL}/org/eclipse/jetty/embedded/OneHandler.html[`OneHandler`] embedd You can use the standard servlet response API, which will typically set some status, content headers and then write out the content: -[source, java, ] +[source, java] ---- response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); @@ -116,7 +116,7 @@ You can use the standard servlet response API, which will typically set some sta It is also very important that a handler indicate that it has completed handling the request and that the request should not be passed to other handlers: -[source, java, ] +[source, java] ---- Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getHttpChannel().getRequest(); base_request.setHandled(true); @@ -141,7 +141,7 @@ You can also update the context of the request: Typically Jetty passes a modified request to another handler and undoes modifications in a finally block afterwards: -[source, java, ] +[source, java] ---- try { diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc index b207b3da702c..58d7e7344b9d 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc @@ -26,7 +26,7 @@ This plugin will help you pre-compile your jsps and works in conjunction with th Here's the basic setup required to put the jspc plugin into your build: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -117,7 +117,7 @@ You can download the javadoc https://repo1.maven.org/maven2/org/glassfish/web/ja Taking all the default settings, here's how to configure the war plugin to use the generated `web.xml` that includes all of the jsp servlet declarations: -[source, xml, ] +[source, xml] ---- org.apache.maven.plugins @@ -135,7 +135,7 @@ As compiling jsps is usually done during preparation for a production release an For example, the following profile will only be invoked if the flag `-Dprod` is present on the run line: -[source, xml, ] +[source, xml] ---- @@ -164,7 +164,7 @@ For example, the following profile will only be invoked if the flag `-Dprod` is The following invocation would cause your code to be compiled, the jsps to be compiled, the and s inserted in the `web.xml` and your webapp assembled into a war: -[source, screen, ] +[source, screen] .... $ mvn -Dprod package .... @@ -181,7 +181,7 @@ We will unpack the overlaid war file, compile the jsps and merge their servlet d Here's an example configuration of the war plugin that separate those phases into an unpack phase, and then a packing phase: -[source, xml, ] +[source, xml] ---- maven-war-plugin @@ -218,7 +218,7 @@ Now you also need to configure the `jetty-jspc-maven-plugin` so that it can use This is in `target/foo/WEB-INF/web.xml`. Using the default settings, the `web.xml` merged with the jsp servlet definitions will be put into `target/web.xml`. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc index 0ffa53c65917..15fe33963130 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc @@ -45,7 +45,7 @@ To understand the basic operations of building and running against Jetty, first Maven uses convention over configuration, so it is best to use the project structure Maven recommends. You can use _link:#archetypes[http://maven.apache.org/guides/introduction/introduction-to-archetypes.html[archetypes]]_ to quickly setup Maven projects, but we will set up the structure manually for this simple tutorial example: -[source, screen, ] +[source, screen] .... > mkdir JettyMavenHelloWorld > cd JettyMavenHelloWorld @@ -57,7 +57,7 @@ You can use _link:#archetypes[http://maven.apache.org/guides/introduction/introd Use an editor to create the file `src/main/java/org/example/HelloWorld.java` with the following contents: -[source, java, ] +[source, java] ---- package org.example; @@ -100,7 +100,7 @@ public class HelloWorld extends AbstractHandler The `pom.xml` file declares the project name and its dependencies. Use an editor to create the file `pom.xml` in the `JettyMavenHelloWorld` directory with the following contents: -[source, xml, ] +[source, xml] ---- mvn clean compile exec:java .... @@ -159,7 +159,7 @@ You can now compile and execute the HelloWorld class by using these commands: You can point your browser to `http://localhost:8080` to see the _Hello World_ page. You can observe what Maven is doing for you behind the scenes by using the `mvn dependency:tree` command, which reveals the transitive dependency resolved and downloaded as: -[source, screen, ] +[source, screen] .... > mvn dependency:tree [INFO] Scanning for projects... @@ -193,7 +193,7 @@ The previous section demonstrated how to use Maven with an application that embe Now we will examine instead how to develop a standard webapp with Maven and Jetty. First create the Maven structure (you can use the maven webapp archetype instead if you prefer): -[source, screen, ] +[source, screen] .... > mkdir JettyMavenHelloWarApp > cd JettyMavenHelloWebApp @@ -206,7 +206,7 @@ First create the Maven structure (you can use the maven webapp archetype instead Use an editor to create the file `src/main/java/org/example/HelloServlet.java` with the following contents: -[source, java, ] +[source, java] ---- package org.example; @@ -230,7 +230,7 @@ public class HelloServlet extends HttpServlet You need to declare this servlet in the deployment descriptor, so create the file `src/main/webapp/WEB-INF/web.xml` and add the following contents: -[source, xml, ] +[source, xml] ---- mvn jetty:run .... @@ -317,7 +317,7 @@ The full reference is at link:#jetty-maven-plugin[Configuring the Jetty Maven Pl You can create a Web Application Archive (WAR) file from the project with the command: -[source, screen, ] +[source, screen] .... > mvn package .... diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc index 8c32a92dc9c3..87d9a7bcf813 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc @@ -38,7 +38,7 @@ We recommend either the traditional distribution deployment approach or using li First, add `jetty-maven-plugin` to your `pom.xml` definition: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -49,7 +49,7 @@ First, add `jetty-maven-plugin` to your `pom.xml` definition: Then, from the same directory as your root `pom.xml`, type: -[source, screen, ] +[source, screen] .... mvn jetty:run .... @@ -79,14 +79,14 @@ There are different goals to accomplish these tasks, as well as several others. To see a list of all goals supported by the Jetty Maven plugin, do: -[source, screen, ] +[source, screen] .... mvn jetty:help .... To see the detailed list of parameters that can be configured for a particular goal, in addition to its description, do: -[source, screen, ] +[source, screen] .... mvn jetty:help -Ddetail=true -Dgoal= .... @@ -200,7 +200,7 @@ Sets up various characteristics of the link:{GITBROWSEURL}/jetty-server/src/main Importantly, it sets up the link:{GITBROWSEURL}/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConfiguration.java[`org.eclipse.jetty.server.HttpConfiguration`] element that we can refer to in subsequent xml files that configure the connectors. Below is the relevant section taken from link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty.xml[jetty.xml]. + -[source, xml, ] +[source, xml] ---- ... @@ -233,21 +233,21 @@ jetty-ssl.xml:: Sets up ssl which will be used by the https connector. Here's the `jetty-ssl.xml` file from the jetty-distribution: + -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-ssl.xml[] ---- jetty-https.xml:: Set up the https connector using the HttpConfiguration from `jetty.xml` and the ssl configuration from `jetty-ssl.xml`: + -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-https.xml[] ---- Now you need to let the plugin know to apply the files above: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -267,14 +267,14 @@ ____ You can also use Jetty xml files to configure a http connector for the plugin to use. Here we use the same `jetty-http.xml` file from the Jetty distribution: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/jetty-server/src/main/config/etc/jetty-http.xml[] ---- Now we add it to the list of configs for the plugin to apply: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -362,7 +362,7 @@ ____ Here is an example, which turns on scanning for changes every ten seconds, and sets the webapp context path to `/test`: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -418,7 +418,7 @@ Patterns are specified as a relative path using a glob-like syntax as described Here's an example: -[source, xml, ] +[source, xml] ---- ... @@ -482,7 +482,7 @@ If this is not sufficient, set it to your custom location. Here's how to set it: -[source, xml, ] +[source, xml] ---- ... @@ -515,7 +515,7 @@ This defaults to `${project.build.directory}/${project.build.finalName}`, but yo Here's how to set it: -[source, xml, ] +[source, xml] ---- ... @@ -550,7 +550,7 @@ Alternatively, you can set this parameter to false, in which case Jetty will blo Here's the configuration: -[source, xml, ] +[source, xml] ---- @@ -658,7 +658,7 @@ Use the `jvmArgs` parameter to pass system properties to the forked process. To deploy your unassembled web app to Jetty running in a new JVM: -[source, screen, ] +[source, screen] .... mvn jetty:run-forked .... @@ -757,7 +757,7 @@ Not supported. Use the `jvmArgs` parameter to pass system properties to the forked process. Here's an example of using the configuration parameters: -[source, xml, ] +[source, xml] ---- @@ -803,7 +803,7 @@ ____ To deploy your unassembled web app to jetty running as a local distribution: -[source, screen, ] +[source, screen] .... mvn jetty:run-distro .... @@ -820,7 +820,7 @@ For example, you can configure the plugin to start your webapp at the beginning To do this, you need to set up a couple of `execution` scenarios for the Jetty plugin. You use the `pre-integration-test` and `post-integration-test` Maven build phases to trigger the execution and termination of Jetty: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -870,7 +870,7 @@ If false or not specified, the plugin does not wait for confirmation but exits a Here's a configuration example: -[source, xml, ] +[source, xml] ---- @@ -889,7 +889,7 @@ Here's a configuration example: Then, while Jetty is running (in another window), type: -[source, screen, ] +[source, screen] .... mvn jetty:stop .... @@ -917,7 +917,7 @@ The full path name of a file into which you would like the effective web xml gen You can also generate the origin of each element into the effective web.xml file. The origin is either a descriptor eg web.xml,web-fragment.xml,override-web.xml file, or an annotation eg @WebServlet. Some examples of elements with origin attribute information are: -[source, xml, ] +[source, xml] ---- @@ -948,7 +948,7 @@ This is probably best seen by looking at a concrete example. Suppose your webapp depends on the following wars: -[source, xml, ] +[source, xml] ---- com.acme @@ -982,7 +982,7 @@ WebAppY: They are configured for the http://maven.apache.org/plugins/maven-war-plugin/overlays.html[maven-war-plugin]: -[source, xml, ] +[source, xml] ---- org.apache.maven.plugins @@ -1025,7 +1025,7 @@ The configuration parameter `` (see the section on link:#configuri For example, suppose our webapp depends on these two wars: -[source, xml, ] +[source, xml] ---- com.acme @@ -1076,7 +1076,7 @@ Then our webapp has available these additional resources: You can configure LoginServices in the plugin. Here's an example of setting up the HashLoginService for a webapp: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -1107,7 +1107,7 @@ It's a lot like the overlaid war situation, but without the war. Here is a configuration example: -[source, xml, ] +[source, xml] ---- @@ -1129,7 +1129,7 @@ If you want to deploy webapp A, and webapps B and C in the same Jetty instance: Putting the configuration in webapp A's `pom.xml`: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -1163,7 +1163,7 @@ ____ Alternatively, add a `jetty.xml` file to webapp A. Copy the `jetty.xml` file from the Jetty distribution, and then add WebAppContexts for the other 2 webapps: -[source, xml, ] +[source, xml] ---- @@ -1187,7 +1187,7 @@ Copy the `jetty.xml` file from the Jetty distribution, and then add WebAppContex Then configure the location of this `jetty.xml` file into webapp A's jetty plugin: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -1220,7 +1220,7 @@ This feature is useful to tidy up the command line and save a lot of typing. However, *sometimes it is not possible to use this feature to set System properties* - sometimes the software component using the System property is already initialized by the time that maven runs (in which case you will need to provide the System property on the command line), or by the time that Jetty runs. In the latter case, you can use the link:http://www.mojohaus.org/[maven properties plugin] to define the system properties instead. Here's an example that configures the logback logging system as the Jetty logger: -[source, xml, ] +[source, xml] ---- org.codehaus.mojo @@ -1254,7 +1254,7 @@ ____ Here's an example of how to specify System properties in the POM: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -1276,7 +1276,7 @@ Here's an example of how to specify System properties in the POM: To change the default behavior so that these system properties override those on the command line, use the `` parameter: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -1311,7 +1311,7 @@ fooprop=222 This can be configured on the plugin like so: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc index 77f7389cc1c8..a836d5899db5 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc @@ -116,7 +116,7 @@ Completely disable jsr-356 for a particular webapp::: Set the `org.eclipse.jetty.containerInitializerExclusionPattern` link:#context_attributes[context attribute] to include `org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer`. Here's an example of doing this in code, although you can do the link:#intro-jetty-configuration-webapps[same in xml]: + -[source, java, ] +[source, java] ---- WebAppContext context = new WebAppContext(); context.setAttribute("org.eclipse.jetty.containerInitializerExclusionPattern", diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc index 3a48997aba9e..de8c331f75a7 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-adapter.adoc @@ -21,7 +21,7 @@ A basic adapter for managing the Session object on the WebSocketListener. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/AdapterEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc index cfcb001ad875..60ae5421baef 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-annotations.adoc @@ -22,7 +22,7 @@ The most basic form of WebSocket is a marked up POJO with annotations provided by the Jetty WebSocket API. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/AnnotatedEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc index 7df2beb9a088..bc4a84951705 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-listener.adoc @@ -21,7 +21,7 @@ The basic form of a WebSocket using the link:{JDURL}/org/eclipse/jetty/websocket/api/WebSocketListener.html[`org.eclipse.jetty.websocket.api.WebSocketListener`] for incoming events. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-common/src/test/java/examples/echo/ListenerEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc index a79eda46b2a7..1af7b4001745 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-send-message.adoc @@ -28,7 +28,7 @@ With RemoteEndpoint you can choose to send TEXT or BINARY WebSocket messages, or Most calls are blocking in nature, and will not return until the send has completed (or has thrown an exception). -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -47,7 +47,7 @@ catch (IOException e) How to send a simple Binary message using the RemoteEndpoint. This will block until the message is sent, possibly throwing an IOException if unable to send the message. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -71,7 +71,7 @@ This will block until the message is sent, possibly throwing an IOException if u If you have a large message to send, and want to send it in pieces and parts, you can utilize the partial message sending methods of RemoteEndpoint. Just be sure you finish sending your message (`isLast == true`). -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -94,7 +94,7 @@ catch (IOException e) How to send a Binary message in 2 parts, using the partial message support in RemoteEndpoint. This will block until each part of the message is sent, possibly throwing an IOException if unable to send the partial message. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -120,7 +120,7 @@ This will block until each part of the message is sent, possibly throwing an IOE You can also send Ping and Pong control frames using the RemoteEndpoint. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -140,7 +140,7 @@ catch (IOException e) How to send a Ping control frame, with a payload of `"You There?"` (arriving at Remote Endpoint as a byte array payload). This will block until the message is sent, possibly throwing an IOException if unable to send the ping frame. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -172,7 +172,7 @@ However there are also 2 Async send message methods available: Both return a `Future` that can be used to test for success and failure of the message send using standard http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html[`java.util.concurrent.Future`] behavior. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -184,7 +184,7 @@ remote.sendBytesByFuture(buf); How to send a simple Binary message using the RemoteEndpoint. The message will be enqueued for outgoing write, but you will not know if it succeeded or failed. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -205,7 +205,7 @@ catch (ExecutionException | InterruptedException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` to know if the send succeeded or failed. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -237,7 +237,7 @@ catch (TimeoutException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` and waiting only prescribed amount of time for the send to complete, cancelling the message if the timeout occurs. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -248,7 +248,7 @@ remote.sendStringByFuture("Hello World"); How to send a simple Text message using the RemoteEndpoint. The message will be enqueued for outgoing write, but you will not know if it succeeded or failed. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); @@ -268,7 +268,7 @@ catch (ExecutionException | InterruptedException e) How to send a simple Binary message using the RemoteEndpoint, tracking the `Future` to know if the send succeeded or failed. -[source, java, ] +[source, java] ---- RemoteEndpoint remote = session.getRemote(); diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc index c9cb8d47b6d6..8b9ef7b224e2 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-api-session.adoc @@ -23,7 +23,7 @@ The link:{JDURL}/org/eclipse/jetty/websocket/api/Session.html[Session] object ca The Connection State (is it open or not). -[source, java, ] +[source, java] ---- if(session.isOpen()) { // send message @@ -32,7 +32,7 @@ if(session.isOpen()) { Is the Connection Secure. -[source, java, ] +[source, java] ---- if(session.isSecure()) { // connection is using 'wss://' @@ -41,7 +41,7 @@ if(session.isSecure()) { What was in the Upgrade Request and Response. -[source, java, ] +[source, java] ---- UpgradeRequest req = session.getUpgradeRequest(); String channelName = req.getParameterMap().get("channelName"); @@ -52,14 +52,14 @@ String subprotocol = resp.getAcceptedSubProtocol(); What is the Local and Remote Address. -[source, java, ] +[source, java] ---- InetSocketAddress remoteAddr = session.getRemoteAddress(); ---- Get and Set the Idle Timeout -[source, java, ] +[source, java] ---- session.setIdleTimeout(2000); // 2 second timeout ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc index 2b153e2e7e16..df6102f7fa5c 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-client-api.adoc @@ -23,7 +23,7 @@ Jetty also provides a Jetty WebSocket Client Library to write make talking to We To use the Jetty WebSocket Client on your own Java project you will need the following maven artifacts. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty.websocket @@ -36,14 +36,14 @@ To use the Jetty WebSocket Client on your own Java project you will need the fol To use the WebSocketClient you will need to hook up a WebSocket object instance to a specific destination WebSocket URI. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-client/src/test/java/examples/SimpleEchoClient.java[] ---- The above example connects to a remote WebSocket server and hands off a SimpleEchoSocket to perform the logic on the websocket once connected, waiting for the socket to register that it has closed. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-client/src/test/java/examples/SimpleEchoSocket.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc index 1c49204d7b8e..42c4981cea09 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc @@ -29,7 +29,7 @@ This will only work when running within the Jetty Container (unlike past Jetty t To wire up your WebSocket to a specific path via the WebSocketServlet, you will need to extend org.eclipse.jetty.websocket.servlet.WebSocketServlet and specify what WebSocket object should be created with incoming Upgrade requests. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyEchoServlet.java[] ---- @@ -55,7 +55,7 @@ Use link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketServletFactory.htm If you have a more complicated creation scenario, you might want to provide your own WebSocketCreator that bases the WebSocket it creates off of information present in the UpgradeRequest object. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdvancedEchoCreator.java[] ---- @@ -63,7 +63,7 @@ include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdv Here we show a WebSocketCreator that will utilize the http://tools.ietf.org/html/rfc6455#section-1.9[WebSocket subprotocol] information from request to determine what WebSocket type should be created. -[source, java, ] +[source, java] ---- include::{SRCDIR}/jetty-websocket/websocket-servlet/src/test/java/examples/MyAdvancedEchoServlet.java[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc index f1f25aa3b960..609e1972c257 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc @@ -105,7 +105,7 @@ We will work backwards from an ini file to the associated module and then the XM First up, the `http.ini` file. If we take a look at it's contents, we will see the following: -[source, screen, ] +[source, screen] ---- $ cat start.d/http.ini # --------------------------------------- @@ -156,7 +156,7 @@ When a module is enabled and an `ini` file is created, all of the properties you If you wanted to change one of the properties though, say `jetty.http.port`, you'd simply uncomment the line and change the value. For example: -[source, screen, ] +[source, screen] ---- $ cat start.d/http.ini # --------------------------------------- @@ -181,7 +181,7 @@ As seen before, these properties were populated in this ini file based on a rela Standard Jetty modules live in the Home of the Jetty Distribution in the aptly named `modules` directory. So let's take a quick look at the associated `$JETTY_HOME/modules/http.mod` file: -[source, screen, ] +[source, screen] ---- $ cat $JETTY_HOME/modules/http.mod [description] @@ -221,7 +221,7 @@ It is important to note that not every module file will have the same sections, Now that we know what XML file these properties relate to, we can navigate to it and have a look. -[source, xml, ] +[source, xml] ---- $ cat $JETTY_HOME/etc/jetty-http.xml @@ -316,14 +316,14 @@ Property Files:: To understand the link:#jetty-xml-syntax[Jetty IoC XML format], consider the following example of an embedded Jetty server instantiated and configured in Java: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ExampleServer.java[] ---- link:#jetty-xml-syntax[Jetty IoC XML format] allows you to instantiate and configure the exact same server in XML without writing any java code: -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/examples/embedded/src/main/resources/exampleserver.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc index 954a2d02faf1..5b0238016a5a 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc @@ -132,7 +132,7 @@ resourceBase:: In an embedded server, you configure contexts by directly calling the link:{JDURL}/org/eclipse/jetty/server/handler/ContextHandler.html[ContextHandler] API as in the following example: -[source, java, ] +[source, java] ---- include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneContext.java[] ---- @@ -142,7 +142,7 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/One You can create and configure a context entirely by IoC XML (either Jetty's or Spring). The deployer discovers and hot deploys context IoC descriptors like the following which creates a context to serve the Javadoc from the Jetty distribution: -[source, xml, ] +[source, xml] ---- @@ -283,7 +283,7 @@ In Jetty, there are several realm implementations (called LoginServices) and the To configure an instance of HashLoginService that matches the "Test Realm" configured above, the following `$JETTY_BASE/etc/test-realm.xml` IoC XML file should be passed on the command line or set in `start.ini` or `start.d/server.ini`. -[source, xml, ] +[source, xml] ---- include::{SRCDIR}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[] ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc index bc08ee55e35e..2c65aec0b9b7 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc @@ -40,7 +40,7 @@ ____ The `jetty.home` and `jetty.base` properties may be explicitly set on the command line, or they can be inferred from the environment if used with commands like: -[source, screen, ] +[source, screen] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar @@ -48,7 +48,7 @@ The `jetty.home` and `jetty.base` properties may be explicitly set on the comman The following commands create a new base directory, enables both the HTTP connector and the web application deployer modules, and copies a demo webapp to be deployed: -[source, screen, ] +[source, screen] ---- > JETTY_BASE=/tmp/mybase > mkdir $JETTY_BASE @@ -91,7 +91,7 @@ INFO: Base directory was modified You can configure Jetty to run on a different port by setting the `jetty.http.port` property on the command line: -[source, screen, ] +[source, screen] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar jetty.http.port=8081 @@ -121,7 +121,7 @@ ____ Building on the example above, we can activate additional modules to add support HTTPS and HTTP2 for the server. To add HTTPS and HTTP2 connectors to a Jetty configuration, the modules can be activated by the following command: -[source, screen, ] +[source, screen] ---- > java -jar $JETTY_HOME/start.jar --add-to-start=https,http2 @@ -169,7 +169,7 @@ The `--add-to-start` command sets up the effective command line in the ini files You can configure the SSL connector to run on a different port by setting the `jetty.ssl.port` property on the command line: -[source, screen, ] +[source, screen] ---- > cd $JETTY_BASE > java -jar $JETTY_HOME/start.jar jetty.ssl.port=8444 @@ -183,7 +183,7 @@ Please see the section on link:#start-vs-startd[Start.ini vs. Start.d] for more The job of the `start.jar` is to interpret the command line, `start.ini` and `start.d` directory (and associated .ini files) to build a Java classpath and list of properties and configuration files to pass to the main class of the Jetty XML configuration mechanism. The `start.jar` mechanism has many options which are documented in the xref:startup[] administration section and you can see them in summary by using the command: -[source, screen, ] +[source, screen] ---- > java -jar $JETTY_HOME/start.jar --help ---- diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc index f7f729b21eea..5998ababc78f 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc @@ -58,7 +58,7 @@ Within the standard Jetty distribution there is the `demo-base` directory. This is a fully-functioning Jetty Base (more on that later) complete with numerous web applications demonstrating different Jetty functionality. Additionally, the `demo-base` demonstrates the recommended way to run a Jetty base in a directory separate from `$JETTY_HOME`: -[source, screen, ] +[source, screen] ---- $ cd demo-base/ $ java -jar ../start.jar @@ -110,7 +110,7 @@ ____ You can see the configuration of the `demo-base` by using the following commands: -[source, screen, ] +[source, screen] ---- > cd $JETTY_HOME/demo-base/ > java -jar $JETTY_HOME/start.jar --list-modules diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc index 475308ad4e62..1a21c6339f22 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc @@ -33,7 +33,7 @@ With Jetty 7 the project moved to the Eclipse foundation and to a new `groupId` The top level Project Object Model (POM) for the Jetty project is located under the following coordinates. -[source, xml, ] +[source, xml] ---- org.eclipse.jetty @@ -49,7 +49,7 @@ Those generated files are also uploaded into Maven Central during the release of https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-project/ -[source, xml, ] +[source, xml] ---- org.eclipse.jetty diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc index e6aeba5ed028..285b18c04fcb 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/basic-architecture.adoc @@ -92,7 +92,7 @@ The core API of a handler is the handle method: image:reference/architecture/images/basic-architecture-handlers.png[image,width=576] -[source, java, ] +[source, java] ---- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc index 9c2a35ec40e0..86073bf893a2 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/jetty-classloading.adoc @@ -153,7 +153,7 @@ You can place additional Jars here. You can add an additional classpath to a context classloader by calling link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#setExtraClasspath(java.lang.String)[org.eclipse.jetty.webapp.WebAppContext.setExtraClasspath(String)] with a comma-separated list of paths. You can do so directly to the API via a context XML file such as the following: -[source, xml, ] +[source, xml] ---- ... @@ -172,7 +172,7 @@ Without this interface, session persistence will be slower. You configure the classloader for the webapp like so: -[source, java, ] +[source, java] ---- MyCleverClassLoader myCleverClassLoader = new MyCleverClassLoader(); ... @@ -190,14 +190,14 @@ You can also accomplish this in a context xml file. If you start a Jetty server using a custom class loader–consider the Jetty classes not being available to the system class loader, only your custom class loader–you may run into class loading issues when the `WebAppClassLoader` kicks in. By default the `WebAppClassLoader` uses the system class loader as its parent, hence the problem. This is easy to fix, like so: -[source, java, ] +[source, java] ---- context.setClassLoader(new WebAppClassLoader(this.getClass().getClassLoader(), context)); ---- or -[source, java, ] +[source, java] ---- context.setClassLoader(new WebAppClassLoader(new MyCustomClassLoader(), context)); ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc b/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc index 1a2e0fc5717b..95aa6ac3f508 100644 --- a/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/architecture/server-side-architecture.adoc @@ -89,7 +89,7 @@ It is trivial to write the synchronous version in terms of the asynchronous vers You can use `EndPoint.write(Callback, ByteBuffer...)` in a blocking way as follows: -[source, java, ] +[source, java] ---- FutureCallback callback = new FutureCallback(); endPoint.write(callback, buffers); diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc index 59c7b5c83066..9aa845422029 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/coding-standards.adoc @@ -37,7 +37,7 @@ http://git.eclipse.org/c/jetty/org.eclipse.jetty.admin.git/tree/jetty-eclipse-co The following is an example of the Java formatting and naming styles to apply to Jetty: -[source, java, ] +[source, java] ---- import some.exact.ClassName; // GOOD diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index 349f7664e8f7..f5ce1419a19f 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -52,7 +52,7 @@ First you need to obtain the source of the documentation project. Clone the repository: -[source, screen, ] +[source, screen] .... $ git clone https://github.com/eclipse/jetty.project.git .... @@ -60,7 +60,7 @@ $ git clone https://github.com/eclipse/jetty.project.git You will now have a local directory with all of jetty, including the jetty-documentation. Now we move on to building it. -[source, screen, ] +[source, screen] .... $ cd jetty.project/jetty-documentation $ mvn install @@ -72,7 +72,7 @@ This build will first produce docbook xml and then through the docbkx-maven-plug The downloads are all of the java dependencies that are required to make this build work. After a while the downloading will stop and you should see the execution of the asciidoctor-maven-plugin followed by the docbkx-maven-plugin. -[source, screen, ] +[source, screen] .... [INFO] --- asciidoctor-maven-plugin:1.5.3:process-asciidoc (output-html) @ jetty-documentation --- [INFO] Rendered /Users/jesse/src/projects/jetty/jetty-docs/src/main/asciidoc/index.adoc @@ -86,7 +86,7 @@ After a while the downloading will stop and you should see the execution of the The build is finished once you see a message akin to this: -[source, screen, ] +[source, screen] .... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS @@ -126,7 +126,7 @@ Now follow the process to push that change back into Jetty proper. Do make sure the change works and the build isn't broken though so make sure you run maven and check the output. Then commit the change. -[source, screen, ] +[source, screen] .... $ git commit -s -m "Tweaked the introduction to fix a horrid misspelled word." src/main/asciidoc/quickstart/introduction/topic.xml .... @@ -140,7 +140,7 @@ ____ This will commit the change in your local repository. You can then push the change up to your repository on github. -[source, screen, ] +[source, screen] .... $ git push .... diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc index 578f2ade22c5..ff0d7a5af91e 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc @@ -23,7 +23,7 @@ To test a Jetty release, complete the following steps for each release you want 1. Download the staged release: + -[source, screen, ] +[source, screen] .... wget https://oss.sonatype.org/content/repositories/jetty-[reponumber]/org/eclipse/jetty/jetty-distribution/[jetty-version]/jetty-distribution-9.[jetty-minor-version].tar.gz @@ -33,7 +33,7 @@ To test a Jetty release, complete the following steps for each release you want 2. Extract to a directory of your choice. 3. Start jetty: + -[source, screen, ] +[source, screen] .... cd [installdir] ; java -jar start.jar @@ -48,7 +48,7 @@ To test a Jetty release, complete the following steps for each release you want 9. In the examples section click "Servlet 3.1 Test" and verify that everything works as expected. 10. Verify that hot deployment works. + -[source, screen, ] +[source, screen] .... cd [installdir] ; @@ -59,7 +59,7 @@ To test a Jetty release, complete the following steps for each release you want 11. Verify that `test.war` gets redeployed in `STDOUT`. 12. Verify that the spdy example webapp and spdy-proxy do work + -[source, screen, ] +[source, screen] .... cd jetty_src/jetty-spdy/spdy-example-webapp @@ -70,7 +70,7 @@ To test a Jetty release, complete the following steps for each release you want 13. Browse to https://localhost:8443 and verify that all looks ok 14. Stop the server with CTRL+C and restart it in proxy mode: + -[source, screen, ] +[source, screen] .... mvn -Pproxy jetty:run-forked @@ -84,7 +84,7 @@ To test a Jetty release, complete the following steps for each release you want 1. Clone CometD. + -[source, screen, ] +[source, screen] .... clone git://github.com/cometd/cometd.git @@ -114,7 +114,7 @@ To test a Jetty release, complete the following steps for each release you want .... 3. Build Cometd: + -[source, screen, ] +[source, screen] .... mvn clean install @@ -128,7 +128,7 @@ Run the loadtest until ''JIT compilation time'' is close to a value of zero (abo 6. Make sure that the performance results are reasonably fast. On a MacBook Pro i7 2.6ghz dualcore produces the following: + -[source, screen, ] +[source, screen] .... ======================================== @@ -202,7 +202,7 @@ Thread Pool - Concurrent Threads max = 239 | Queue Size max = 1002 | Queue Laten .... 7. Deploy `cometd.war` to the `webapps` directory of the jetty-distribution tested above. + -[source, screen, ] +[source, screen] .... cp cometd-demo/target/cometd-demo-[version].war [pathToJetty]/jetty-distribution-[jetty-version]/webapps/ @@ -211,7 +211,7 @@ Thread Pool - Concurrent Threads max = 239 | Queue Size max = 1002 | Queue Laten .... 8. Start jetty and make sure there are no exceptions. + -[source, screen, ] +[source, screen] .... cd [pathToJetty] && java -jar start.jar diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc index 7407807bdfd5..de466c40d9ca 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc @@ -40,7 +40,7 @@ Tag Name : jetty-9.9.0.v20130322 2. We use the 'release-9' branch to avoid problems with other developers actively working on the master branch. + -[source, screen, ] +[source, screen] .... // Get all of the remotes $ git pull origin @@ -55,21 +55,21 @@ $ git merge --no-ff master 3. Update the VERSION.txt with changes from the git logs, this populates the resolves issues since the last release. + -[source, screen, ] +[source, screen] .... $ mvn -N -Pupdate-version .... 4. Edit the VERSION.txt file to set the 'Release Version' at the top alongside the Date of this release. + -[source, screen, ] +[source, screen] .... $ vi VERSION.txt .... 5. Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + -[source, screen, ] +[source, screen] .... $ git commit -m "Updating VERSION.txt top section" VERSION.txt $ git push origin release-9 @@ -84,7 +84,7 @@ The `eclipse-release` profile is required on the prepare in order to bring in th ____ + -[source, screen, ] +[source, screen] .... $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \ -DdevelopmentVersion=9.0.1-SNAPSHOT \ @@ -99,7 +99,7 @@ This step performs the release and deploys it to a oss.sonatype.org staging repo ____ + -[source, screen, ] +[source, screen] .... $ mvn release:perform .... @@ -110,7 +110,7 @@ Do not date this line. + Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + -[source, screen, ] +[source, screen] .... $ vi VERSION.txt $ git commit -m "Updating VERSION.txt top section" VERSION.txt @@ -126,7 +126,7 @@ $ git push origin release-9 * Release the staging repository to maven central on oss.sonatype.org * Merge back the changes in release-9 to master + -[source, screen, ] +[source, screen] .... $ git checkout master $ git merge --no-ff release-9 @@ -142,7 +142,7 @@ If you don't know if you have access to this then you probably don't and will ne To build and deploy the aggregate javadoc and jxr bits: -[source, screen, ] +[source, screen] .... $ cd target/checkout $ mvn -Paggregate-site javadoc:aggregate jxr:jxr @@ -167,7 +167,7 @@ To localize the scripts to your environment: Once these are setup you can deploy a release to eclipse with the following incantation: -[source, screen, ] +[source, screen] .... $ ./promote-to-eclipse.sh 9.0.0.v20130322 .... @@ -181,7 +181,7 @@ On the eclipse side of it they will also adjust the xref and javadoc documentati Since we are not allowed to have symbolic links on the download site we have to log into the machine manually and remove the previous stable directory and update it with a new release. Maintaining the conventions we use on the site will allow all 'stable' links to be stable and not needed to update to the latest major Jetty build version: -[source, screen, ] +[source, screen] .... $ ssh @build.eclipse.org $ cd ~downloads/jetty/ @@ -192,7 +192,7 @@ $ ./index.sh This needs to be done for all Eclipse Jetty releases (regardless of version). In addition we have to work to reduce the footprint of jetty on the primary eclipse download resources so we want to move older releases to the eclipse archive site. -[source, screen, ] +[source, screen] .... $ cd ~/downloads/jetty $ mv /home/data/httpd/archive.eclipse.org/jetty/ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc index 6fae92cc07c1..af2b7e5019bb 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc @@ -55,7 +55,7 @@ Jetty uses http://maven.apache.org/[Apache Maven 3] for managing its build and p Building Jetty should simply be a matter of changing into the relevant directory and executing the following commands: -[source, screen, ] +[source, screen] .... $ git clone https://github.com/eclipse/jetty.project.git diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc index 4d83d4392671..4ff26153044a 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc @@ -38,7 +38,7 @@ Assuming you have your webapp deployed into jetty, there are two different ways Via command line:: Add the required parameters on the commandline like so. + -[source, screen, ] +[source, screen] .... $ java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n -jar start.jar @@ -52,7 +52,7 @@ Via `start.ini`:: 1. Edit the `start.ini` and uncomment the --exec line, this is required if you are adding jvm options to the start.ini file as jetty-start must generate the classpath required and fork a new jvm. 2. Add the parameters mentioned above in the Command Line option so your start.ini looks like this: + -[source, plain, ] +[source, plain] ---- #=========================================================== # Configure JVM arguments. @@ -86,7 +86,7 @@ Uncomment any other jvm environmental options you so desire for your debugging s 3. Regardless of the option chosen, you should see the following lines at the top of your jetty-distribution startup. + -[source, plain, ] +[source, plain] ---- Listening for transport dt_socket at address: 9999 diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc index 73438933d15f..d4f2dbcd3595 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc @@ -30,7 +30,7 @@ You define global naming resources on the server via `jetty.xml`. Jetty applies `jetty-env.xml` on a per-webapp basis, and configures an instance of `org.eclipse.jetty.webapp.WebAppContext.` -[source, xml, ] +[source, xml] ---- @@ -53,7 +53,7 @@ ____ Place the `jetty-env.xml` file in your web application's WEB-INF folder. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc index ec617b8e12e9..cd07cb3ba288 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc @@ -30,7 +30,7 @@ For a more in-depth look at the syntax, see xref:jetty-xml-syntax[]. `jetty-web.xml` applies on a per-webapp basis, and configures an instance of `org.eclipse.jetty.webapp.WebAppContext`. -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc index 4d33817e07d8..56a9206a2d45 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-config.adoc @@ -39,7 +39,7 @@ The selection of which configuration files to use is controlled by `start.jar` a `jetty.xml` configures an instance of the `Jetty org.eclipse.jetty.server.Server.` -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc index ce62d6805d46..3f3ed626b2fb 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc @@ -31,7 +31,7 @@ See configuration files for specific examples. The following XML configuration file creates some Java objects and sets some attributes: -[source, xml, ] +[source, xml] ---- @@ -60,7 +60,7 @@ The following XML configuration file creates some Java objects and sets some att The XML above is equivalent to the following Java code: -[source, java, ] +[source, java] ---- com.acme.Foo foo = new com.acme.Foo(); foo.setName("demo"); @@ -86,7 +86,7 @@ The document type descriptor (link:{GITBROWSEURL}/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_0.dtd?h=release-9[configure.dtd]) describes all valid elements in a Jetty XML configuration file using the Jetty IoC format. The first two lines of an XML must reference the DTD to be used to validate the XML like: -[source, xml, ] +[source, xml] ---- @@ -101,7 +101,7 @@ Files that conform to the configure.dtd format are processed in Jetty by the `Xm To ensure your `web.xml`, `web-fragment.xml` and `webdefault.xml` files are validated, you will also need to set the `validateXml` attribute to true: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty.webapp.validateXml @@ -115,7 +115,7 @@ The configuration of object instances with Jetty IoC XML is done on a scoped bas The outer most scope is given by a Configure element and elements like Call, New and Get establish new scopes. The following example uses the name fields to explain the scope. -[source, xml, ] +[source, xml] ---- value @@ -222,7 +222,7 @@ link:#jetty-xml-property[Property element] ====== Basic Example -[source, xml, ] +[source, xml] ---- 8080 @@ -231,7 +231,7 @@ link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, ] +[source, java] ---- org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(); server.setPort(8080); @@ -241,7 +241,7 @@ server.setPort(8080); In `etc/jetty.xml`: -[source, xml, ] +[source, xml] ---- @@ -250,7 +250,7 @@ In `etc/jetty.xml`: In `etc/jetty-logging.xml`: -[source, xml, ] +[source, xml] ---- @@ -298,7 +298,7 @@ link:#jetty-xml-property[Property element] ====== Basic Example -[source, xml, ] +[source, xml] ---- 8080 @@ -307,7 +307,7 @@ link:#jetty-xml-property[Property element] ====== Set via a System Property -[source, xml, ] +[source, xml] ---- @@ -316,7 +316,7 @@ link:#jetty-xml-property[Property element] ====== Creating a NewObject and Setting It on the Server -[source, xml, ] +[source, xml] ---- @@ -330,7 +330,7 @@ link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, ] +[source, java] ---- org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(); @@ -343,7 +343,7 @@ server.setThreadPool(threadPool); ====== Invoking a Static Setter -[source, xml, ] +[source, xml] ---- loggerName @@ -385,7 +385,7 @@ link:#jetty-xml-property[Property element] This simple example doesn't do much on its own. You would normally use this in conjunction with a ``. -[source, xml, ] +[source, xml] ---- @@ -394,7 +394,7 @@ You would normally use this in conjunction with a ``. ====== Invoking a Static Getter and Call Methods on the Returned Object -[source, xml, ] +[source, xml] ---- @@ -432,7 +432,7 @@ link:#jetty-xml-property[Property element] ===== Example -[source, xml, ] +[source, xml] ---- objectValue @@ -474,7 +474,7 @@ element], link:#jetty-xml-property[Property element] ====== Basic example -[source, xml, ] +[source, xml] ---- bar @@ -484,7 +484,7 @@ element], link:#jetty-xml-property[Property element] This is equivalent to: -[source, java, ] +[source, java] ---- Object o2 = o1.doFoo("bar"); o2.setTest("1, 2, 3"); @@ -492,7 +492,7 @@ o2.setTest("1, 2, 3"); ====== Invoking a static method -[source, xml, ] +[source, xml] ---- somestring @@ -501,14 +501,14 @@ o2.setTest("1, 2, 3"); Which is equivalent to: -[source, java, ] +[source, java] ---- com.acme.Foo.setString("somestring"); ---- ====== Invoking the Actual MethodInstead of Relying on Getter/Setter Magic -[source, xml, ] +[source, xml] ---- @@ -522,7 +522,7 @@ com.acme.Foo.setString("somestring"); Which is equivalent to: -[source, java, ] +[source, java] ---- org.mortbay.jetty.Server server = new org.mortbay.jetty.Server(); com.acme.Environment.setPort( server.getPort() ); @@ -560,7 +560,7 @@ link:#jetty-xml-property[Property element] ====== Basic examples -[source, xml, ] +[source, xml] ---- foo true @@ -574,7 +574,7 @@ link:#jetty-xml-property[Property element] This explicitly coerces the type to a boolean: -[source, xml, ] +[source, xml] ---- False ---- @@ -583,7 +583,7 @@ This explicitly coerces the type to a boolean: Here are a couple of examples of link:#jetty-xml-arg[Arg element] being used as a parameter to methods and to constructors: -[source, xml, ] +[source, xml] ---- @@ -596,12 +596,12 @@ Here are a couple of examples of link:#jetty-xml-arg[Arg element] being used as This is equivalent to: -[source, java, ] +[source, java] ---- com.acme.Environment.setFoo(new com.acme.Foo("bar")); ---- -[source, xml, ] +[source, xml] ---- @@ -614,7 +614,7 @@ com.acme.Environment.setFoo(new com.acme.Foo("bar")); This is equivalent to: -[source, java, ] +[source, java] ---- new com.acme.Baz(com.acme.MyStaticObjectFactory.createObject(2)); ---- @@ -654,7 +654,7 @@ element], link:#jetty-xml-property[Property element] ====== Basic example -[source, xml, ] +[source, xml] ---- bar @@ -663,28 +663,28 @@ element], link:#jetty-xml-property[Property element] Which is equivalent to: -[source, java, ] +[source, java] ---- com.acme.Foo foo = new com.acme.Foo("bar"); ---- ====== Instantiate with the Default Constructor -[source, xml, ] +[source, xml] ---- ---- Which is equivalent to: -[source, java, ] +[source, java] ---- com.acme.Foo foo = new com.acme.Foo(); ---- ====== Instantiate with Multiple Arguments, Then Configuring Further -[source, xml, ] +[source, xml] ---- bar @@ -695,7 +695,7 @@ com.acme.Foo foo = new com.acme.Foo(); Which is equivalent to: -[source, java, ] +[source, java] ---- Object foo = new com.acme.Foo("bar", "baz"); foo.setTest("1, 2, 3"); @@ -734,7 +734,7 @@ link:#jetty-xml-property[Property element] Use the referenced object as an argument to a method call or constructor: -[source, xml, ] +[source, xml] ---- @@ -742,7 +742,7 @@ Use the referenced object as an argument to a method call or constructor: This is equivalent to: -[source, java, ] +[source, java] ---- foo = getXFoo(); setSomeMethod(foo); @@ -750,7 +750,7 @@ setSomeMethod(foo); ====== Manipulating the Object Returned by Ref -[source, xml, ] +[source, xml] ---- @@ -760,7 +760,7 @@ setSomeMethod(foo); This is equivalent to: -[source, java, ] +[source, java] ---- foo = getXFoo(); foo.setTest("1, 2, 3"); @@ -771,7 +771,7 @@ foo.setTest("1, 2, 3"); Here is an example of the difference in syntax between using the `Ref` element, and nesting method calls. They are exactly equivalent: -[source, xml, ] +[source, xml] ---- @@ -790,7 +790,7 @@ They are exactly equivalent: Here is a more practical example, taken from the handler configuration section in `etc/jetty.xml`: -[source, xml, ] +[source, xml] ---- @@ -845,7 +845,7 @@ link:#jetty-xml-item[Item element] ===== Example -[source, xml, ] +[source, xml] ---- value0 @@ -855,7 +855,7 @@ link:#jetty-xml-item[Item element] This is equivalent to: -[source, java, ] +[source, java] ---- String[] a = new String[] { "value0", new String("value1") }; ---- @@ -897,7 +897,7 @@ link:#jetty-xml-entry[Entry element] ===== Example -[source, xml, ] +[source, xml] ---- @@ -909,7 +909,7 @@ link:#jetty-xml-entry[Entry element] This is equivalent to: -[source, java, ] +[source, java] ---- Map m = new HashMap(); m.put("keyName", new String("value1")); @@ -947,14 +947,14 @@ Only attributes as Elements (`Id`, `Name`, `Default`). ===== Example -[source, xml, ] +[source, xml] ---- ---- That is equivalent to: -[source, java, ] +[source, java] ---- System.getProperty("jetty.http.port", "8080"); ---- @@ -989,7 +989,7 @@ The attributes may be expressed as contained Elements (`Id`, `Name`, `Default`). ===== Example -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc index 6869732f6f2b..15ec6663f212 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc @@ -28,7 +28,7 @@ Behind the scenes, Jetty's XML config parser translates the XML elements and att To use `jetty.xml`, specify it as a configuration file when running Jetty. -[source, java, ] +[source, java] ---- java -jar start.jar etc/jetty.xml ---- @@ -53,21 +53,21 @@ If you use the same ID across multiple configuration files, those configurations You can set parameters in configuration files either with system properties (using ``) or properties files (using ``) passed via the command line. For example, this code in `jetty.xml` allows the port to be defined on the command line, falling back onto `8080`if the port is not specified: -[source, xml, ] +[source, xml] ---- ---- Then you modify the port while running Jetty by using this command: -[source, java, ] +[source, java] ---- java -Djetty.http.port=8888 -jar start.jar etc/jetty.xml ---- An example of defining both system properties and properties files from the command line: -[source, java, ] +[source, java] ---- java -Djetty.http.port=8888 -jar start.jar myjetty.properties etc/jetty.xml etc/other.xml ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc index 43da262e60d3..2873cce920ba 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/override-web-xml.adoc @@ -34,7 +34,7 @@ This is defined on a per-webapp basis, using the xref:jetty-xml-syntax[]. You can specify the `override-web.xml` to use for an individual web application in a deployable xml file located in Jetty webapps folder . For example, if you had a webapp named MyApp, you would place a deployable xml file named `myapp.xml` in `${jetty.base}/webapps` which includes an `overrideDescriptor` entry for the `override-web.xml` file. -[source, xml, ] +[source, xml] ---- ... @@ -47,7 +47,7 @@ For example, if you had a webapp named MyApp, you would place a deployable xml f The equivalent in code is: -[source, java, ] +[source, java] ---- import org.eclipse.jetty.webapp.WebAppContext; @@ -67,7 +67,7 @@ Alternatively, you can use the classloader (xref:jetty-classloading[]) to get th Use the `` tag as follows: -[source, xml, ] +[source, xml] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc index 0af53b747361..1ef4b58beb99 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc @@ -59,7 +59,7 @@ Maximum number of files to cache. You can specify a custom `webdefault.xml` for an individual web application in that webapp's xref:jetty-xml-config[] as follows: -[source, xml, ] +[source, xml] ---- @@ -74,7 +74,7 @@ You can specify a custom `webdefault.xml` for an individual web application in t The equivalent in code is: -[source, java, ] +[source, java] ---- import org.eclipse.jetty.webapp.WebAppContext; @@ -95,7 +95,7 @@ Alternatively, you can use a xref:jetty-classloading[] to find the resource repr If you want to apply the same custom `webdefault.xml` to a number of webapps, provide the path to the file in xref:jetty-xml-config[] in the `$JETTY_HOME/etc/jetty-deploy.xml` file: -[source, xml, ] +[source, xml] ---- /other/path/to/another/webdefault.xml ---- @@ -105,7 +105,7 @@ If you want to apply the same custom `webdefault.xml` to a number of webapps, pr Similarly, when using the link:#jetty-maven-plugin[Jetty Maven Plugin] you provide a customized `webdefault.xml` file for your webapp as follows: -[source, xml, ] +[source, xml] ---- ... diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc index d407641f2fc2..341007ce1bef 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc @@ -46,7 +46,7 @@ For the time being I'll leave this buildpack under my personal github account an To show how incredibly easy it is to use the Jetty buildpack with cloudfoundry, this is all the more you need to do to deploy your application. Refer to the CloudFoundry http://docs.cloudfoundry.com/[documentation] to get started, get the `cf` utilities installed and an environment configured. -[source, screen, ] +[source, screen] .... $ cf push snifftest --buildpack=git://github.com/jmcc0nn3ll/jetty-buildpack.git @@ -62,7 +62,7 @@ ____ You will be prompted to answer a series of questions describing the execution environment and any additional services you need enabled (databases, etc). -[source, plain, ] +[source, plain] ---- Instances> 1 @@ -97,7 +97,7 @@ Save configuration?> n Once answered you will see the installation process of your application. -[source, plain, ] +[source, plain] ---- Uploading snifftest... OK diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc index 1b3732a33a2f..a6326a6d6c05 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc @@ -76,7 +76,7 @@ See https://issues.apache.org/bugzilla/show_bug.cgi?id=51687[ASF bug 51687.] You can individually enable each preventer by adding an instance to a Server with the ` addBean(Object)` call. Here's an example of how to do it in code with the `org.eclipse.jetty.util.preventers.AppContextLeakPreventer`: -[source, java, ] +[source, java] ---- Server server = new Server(); @@ -89,7 +89,7 @@ You can add the equivalent in code to the `$JETTY_HOME/etc/jetty.xml` file or an Be aware that if you have more than one Server instance in your JVM, you should configure these preventers on just _one_ of them. Here's the example from code put into xml: -[source, xml, ] +[source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc index 43dac4b9f6e4..9ea051434b07 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc @@ -35,7 +35,7 @@ Use one of the following options to configure the switch. An <> file can be placed in your webapp's `WEB-INF` directory to change the default setting of the `DefaultServlet` for memory-mapped file buffers. Create an `override-web.xml` file with appropriate headers for your version of the servlet specification, and place the following inside the `` element: -[source, xml, ] +[source, xml] ---- default @@ -51,7 +51,7 @@ Create an `override-web.xml` file with appropriate headers for your version of t You can create or update a context xml file that configures your webapp to apply the setting to disable memory-mapped file buffers. Add the following to your context xml file: -[source, xml, ] +[source, xml] ---- org.eclipse.jetty.servlet.Default.useFileMappedBuffer @@ -65,7 +65,7 @@ Add the following to your context xml file: If you don't want to use either of the other two solutions, you can configure the plugin directly to disable memory-mapped file buffers. Add the following to the plugin's configuration under the `` element: -[source, xml, ] +[source, xml] ---- <_initParams> false @@ -80,7 +80,7 @@ You can force a `WebAppContext` to always copy a web app directory on deployment The base directory of your web app (i.e. the root directory where your static content exists) will be copied to the link:#ref-temporary-directories[temp directory]. Configure this in an xml file like so: -[source, xml, ] +[source, xml] ---- / diff --git a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc index 89803d38f725..2dd9ab0d6319 100644 --- a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc @@ -61,7 +61,7 @@ You need to open your Jetty 9.3 `start.ini` and replace the references to the `l For example, in an existing Jetty 9.3 `start.ini` file the module declaration for logging would look like this: -[source, screen, ] +[source, screen] ---- --module=logging jetty.logging.retainDays=7 @@ -69,7 +69,7 @@ jetty.logging.retainDays=7 In 9.4, it should be replaced by: -[source, screen, ] +[source, screen] ---- --module=console-capture jetty.console-capture.retainDays=7 From 0fb2cfa0e0cd96b965b5662fab205738c31a1daa Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 10:56:36 -0600 Subject: [PATCH 08/14] Fixing missed source formatting --- .../asciidoc/administration/http2/configuring-haproxy.adoc | 2 +- .../configuring/security/configuring-form-size.adoc | 6 +++--- .../asciidoc/quick-start/getting-started/jetty-running.adoc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index 3b0c08536027..60c86179bdf7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -113,7 +113,7 @@ The `domain.pem` file will be used later by HAProxy. Now we can setup `haproxy.cfg` to configure HAProxy. This is a minimal configuration: -[source, ,] +[source] .... global tune.ssl.default-dh-param 1024 diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc index 03834696b12a..b857f2e56b96 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/configuring-form-size.adoc @@ -35,7 +35,7 @@ There exists 2 system properties that will adjust the default maximum form sizes Used from command line as such: -[source,shell,] +[source,shell] ---- $ java -Dorg.eclipse.jetty.server.Request.maxFormKeys=200 -jar ... @@ -45,7 +45,7 @@ $ java -Dorg.eclipse.jetty.server.Request.maxFormContentSize=400000 -jar ... Or via Java code (make sure you do this before you instantiate any `ContextHandler`, `ServletContextHandler`, or `WebAppContext`) -[source,java,] +[source,java] ---- System.setProperty(ContextHandler.MAX_FORM_KEYS_KEY, "200"); System.setProperty(ContextHandler.MAX_FORM_CONTENT_SIZE_KEY, "400000"); @@ -56,7 +56,7 @@ System.setProperty(ContextHandler.MAX_FORM_CONTENT_SIZE_KEY, "400000"); To configure the form limits for a single web application, the context handler (or webappContext) instance must be configured using the following methods: -[source,java,] +[source,java] ---- ContextHandler.setMaxFormContentSize(int maxSizeInBytes); ContextHandler.setMaxFormKeys(int formKeys); diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc index 5998ababc78f..e879316cf318 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc @@ -25,7 +25,7 @@ Jetty has no GUI (Graphical User Interface), so running the server and performin Once you have access to your system's command line, navigate to the directory where you unpacked your copy of the Jetty distribution. To start Jetty on the default port of 8080, run the following command: -[source,screen,] +[source,screen] ---- $ java -jar start.jar 2017-09-20 15:45:11.986:INFO::main: Logging initialized @683ms to org.eclipse.jetty.util.log.StdErrLog From f8e3c87c64c3855cb18a0cf2ac89073f90bdca10 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 11:25:19 -0600 Subject: [PATCH 09/14] Flipping Admonitions MK. I --- .../asciidoc/administration/alpn/alpn.adoc | 6 ++-- .../annotations/using-annotations.adoc | 2 +- .../extras/default-handler.adoc | 4 +-- .../administration/extras/gzip-filter.adoc | 4 +-- .../administration/extras/header-filter.adoc | 2 +- .../extras/resource-handler.adoc | 4 +-- .../extras/rewrite-handler.adoc | 4 +-- .../extras/statistics-handler.adoc | 4 +-- .../http2/configuring-haproxy.adoc | 4 +-- .../http2/configuring-http2.adoc | 2 +- .../administration/http2/introduction.adoc | 2 +- .../administration/jmx/jetty-jconsole.adoc | 4 +-- .../jndi/jndi-configuration.adoc | 4 +-- .../administration/jndi/jndi-datasources.adoc | 4 +-- .../logging/configuring-jetty-logging.adoc | 4 +-- .../configuring-jetty-request-logs.adoc | 2 +- .../default-logging-with-stderrlog.adoc | 2 +- .../example-java-util-logging-native.adoc | 4 +-- .../logging/example-java-util-logging.adoc | 2 +- .../example-logback-centralized-logging.adoc | 2 +- .../example-slf4j-multiple-loggers.adoc | 4 +-- .../administration/runner/jetty-runner.adoc | 6 ++-- .../session-configuration-file-system.adoc | 4 +-- .../session-configuration-gcloud.adoc | 4 +-- .../session-configuration-hazelcast.adoc | 6 ++-- .../session-configuration-infinispan.adoc | 10 +++---- .../sessions/session-configuration-jdbc.adoc | 2 +- .../session-configuration-mongodb.adoc | 6 ++-- .../session-configuration-sessioncache.adoc | 2 +- .../sessions/sessions-usecases.adoc | 2 +- .../startup/custom-modules.adoc | 2 +- .../administration/startup/start-jar.adoc | 4 +-- .../startup/startup-base-vs-home.adoc | 4 +-- .../startup/startup-classpath.adoc | 2 +- .../startup/startup-modules.adoc | 6 ++-- .../connectors/configuring-connectors.adoc | 4 +-- .../connectors/configuring-ssl.adoc | 28 +++++++++---------- .../contexts/setting-form-size.adoc | 2 +- .../contexts/temporary-directories.adoc | 4 +-- ...onfiguring-specific-webapp-deployment.adoc | 2 +- .../deploying/quickstart-webapp.adoc | 2 +- .../configuring/jsp/configuring-jsp.adoc | 4 +-- .../configuring/security/jaas-support.adoc | 8 +++--- .../security/jetty-home-and-jetty-base.adoc | 2 +- .../security/secure-passwords.adoc | 4 +-- .../security/serving-aliased-files.adoc | 2 +- ...tting-port80-access-for-non-root-user.adoc | 4 +-- .../asciidoc/development/ant/jetty-ant.adoc | 2 +- .../embedding/embedded-examples.adoc | 2 +- .../embedding/jetty-helloworld.adoc | 4 +-- .../asciidoc/development/frameworks/cdi.adoc | 2 +- .../asciidoc/development/frameworks/osgi.adoc | 8 +++--- .../asciidoc/development/frameworks/weld.adoc | 2 +- .../maven/jetty-maven-helloworld.adoc | 2 +- .../development/maven/jetty-maven-plugin.adoc | 18 ++++++------ .../development/websockets/intro/chapter.adoc | 4 +-- .../jetty/jetty-websocket-server-api.adoc | 2 +- .../src/main/asciidoc/index.adoc | 5 ++-- .../configuring/how-to-configure.adoc | 4 +-- .../configuring/what-to-configure.adoc | 8 +++--- .../jetty-common-configuration.adoc | 4 +-- .../getting-started/jetty-installing.adoc | 4 +-- .../getting-started/jetty-running.adoc | 4 +-- .../introduction/jetty-coordinates.adoc | 4 +-- .../introduction/what-version.adoc | 4 +-- .../reference/contributing/documentation.adoc | 8 +++--- .../reference/contributing/patches.adoc | 4 +-- .../contributing/releasing-jetty.adoc | 6 ++-- .../reference/contributing/source-build.adoc | 2 +- .../debugging/debugging-with-eclipse.adoc | 2 +- .../debugging/debugging-with-intellij.adoc | 2 +- .../debugging/enable-remote-debugging.adoc | 2 +- .../reference/jetty-xml/jetty-env-xml.adoc | 2 +- .../jetty-xml/jetty-web-xml-config.adoc | 4 +-- .../reference/jetty-xml/jetty-xml-usage.adoc | 2 +- .../reference/jetty-xml/webdefault-xml.adoc | 2 +- .../reference/platforms/cloudfoundry.adoc | 4 +-- .../platforms/elastic-beanstalk.adoc | 6 ++-- .../preventing-memory-leaks.adoc | 2 +- .../troubleshooting-locked-files.adoc | 2 +- .../upgrading/upgrading-9.3-to-9.4.adoc | 2 +- 81 files changed, 166 insertions(+), 165 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc index d567bfbb7abc..78a5408c3949 100644 --- a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc @@ -97,8 +97,8 @@ java -Xbootclasspath/p: ... Where `path_to_alpn_boot_jar` is the path on the file system for the `alpn-boot` artifact, such as the one at the Maven coordinates `org.mortbay.jetty.alpn:alpn-boot`. -____ [IMPORTANT] +____ Be certain to get the link:#alpn-versions[ALPN boot artifact version that matches the version of your JRE]. ____ @@ -126,8 +126,8 @@ To use the Jetty ALPN agent, start the JVM as follows: java -javaagent: ... ---- -____ [NOTE] +____ The Jetty ALPN agent works with any Java 8 version. It is _required_ if you use an OpenJDK version up to `1.8.0_242` included, and it is _optional_ if you use an OpenJDK version equal or greater than `1.8.0_252`. @@ -166,8 +166,8 @@ This jar contains a `Fragment-Host` directive that ensures the ALPN classes will You can download the https://repo1.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-alpn/[jetty-osgi-alpn jar] from Maven Central. -____ [NOTE] +____ OSGi *requires* a `ServiceLoader` implementation for Jetty to function properly. OSGi leverages http://aries.apache.org/modules/spi-fly.html[Apache Aries SPI Fly] for this functionality. You can read more about OSGi and `ServiceLoader` http://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html[here.] diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc index 031aa967753e..ad21d32013e0 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc @@ -119,8 +119,8 @@ By default Jetty will call them in the following order: As is the case with annotation scanning, the link:#using-extra-classpath-method[extraClasspath] is fully considered for `ServletContainerInitializer` callbacks. `ServletContainerInitializer` derived from a classes directory on the `extraClasspath` and jars from an `extraClasspath` for the webapp are called in step 2 and 3, respectively. -____ [NOTE] +____ As of Jetty-9.4.4, unless the `web.xml` is version 3.0 or greater, only `ServletContainerInitializers` that are on the container classpath will be discovered. Users wishing to use `ServletContainerInitializers` from within the webapp with older versions of `web.xml` must either upgrade their `web.xml` version, or call `WebAppContext.setConfigurationDiscovered(true)` either programmatically or in xml. Upgrading the `web.xml` version is preferable. diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc index c8ad02112010..f81b894aec7c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc @@ -34,8 +34,8 @@ As in the example below, if a resource to be served is not matched within the re This class is a useful template to either extend and embrace or simply provide a similar implementation for customizing to your needs. There is also an link:#error-handler[Error Handler] that services errors related to the servlet api specification, so it is best to not get the two confused. -_____ -[NOTE] +_[NOTE] +____ The `DefaultHandler` will also handle serving out the `flav.ico` file should a request make it through all of the other handlers without being resolved. _____ diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc index c80e05606b95..312dff16e504 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc @@ -37,8 +37,8 @@ Some user-agents might be excluded from compression to avoid common browser bugs The `GzipHandler` can be added to the entire server by enabling the `gzip.mod` module. It may also be added to individual contexts in a context xml file. -____ [NOTE] +____ Jetty 9 only compresses using GZip. Using deflate HTTP compression is not supported and will not function. ____ @@ -63,8 +63,8 @@ The link:#default-servlet[DefaultServlet] is capable of serving pre-compressed s The `GzipHandler` installs an output interceptor which passes through to the `DefaultServlet`. If the content served by `DefaultServlet` is already compressed, the `GzipHandler` does nothing; if it is not compressed, the content is compressed on-the-fly. -____ [NOTE] +____ Automatic precompression by the `DefaultServlet` can be configured. Read more about the `DefaultServlet` link:#default-servlet[here.] ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc index 9306fdd354a2..078249693104 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc @@ -50,8 +50,8 @@ This filter will perform the following actions on each response: * Set the Expires header to approximately one year in the future. * Add a Date header with the current system time. -____ [NOTE] +____ Each action must be separated by a comma. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc index 64ede88227d4..5b2e11efbef3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc @@ -31,13 +31,13 @@ This handler will serve static content and handle If-Modified-Since headers and is suitable for simple serving of static content. -____ [IMPORTANT] +____ There is no caching done with this handler, so if you are looking for a more fully featured way of serving static content look to the xref:default-servlet[]. ____ -____ [NOTE] +____ Requests for resources that do not exist are let pass (Eg no 404's). ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index abc63defea47..9c8567543d4b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -36,8 +36,8 @@ The standard Jetty distribution bundle contains the `jetty-rewrite` link:#startu $ java -jar start.jar --add-to-start=rewrite .... -_____ -[NOTE] +_[NOTE] +____ If you are running the standard Jetty distribution with the sample test webapp, there will be a demo of the rewrite module at http://localhost:8080/test/rewrite/ _____ diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc index 08040a709454..ac0c916470ef 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc @@ -43,8 +43,8 @@ $ java -jar {$jetty.home}/start.jar --add-to-start=stats In addition to these, the `SessionHandler` and `DefaultSessionCache` classes collect statistics for sessions. These statistics are enabled by default and are accessible via JMX interface. -_____ -[NOTE] +_[NOTE] +____ To view statistics, you have to be able to connect to Jetty using either JConsole or some other JMX agent. See xref:using-jmx[] for more information. _____ diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index 60c86179bdf7..9fb9904fbdf7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -41,8 +41,8 @@ $ sudo apt-get install haproxy Alternatively you can download the HAProxy source code and build it on your environment by following the README bundled with the HAProxy source code tarball. -____ [NOTE] +____ HAProxy supports ALPN only if built with OpenSSL 1.0.2 or greater. Use `haproxy -vv` to know with which OpenSSL version HAProxy has been built. ____ @@ -176,8 +176,8 @@ $ java -jar $JETTY_HOME/start.jar jetty.http.host=127.0.0.1 jetty.http.port=8282 Now you can browse https://domain.com/async-rest (replace `domain.com` with your own domain, or with `localhost`, to make this example work). -____ [NOTE] +____ You want the Jetty connector that listens on port 8282 to be available only to HAProxy, and not to remote clients. For this reason, you want to specify the `jetty.http.host` property on the command line (or in `start.ini`/ `start.d/http.ini` to make this setting persistent) to bind the Jetty connector only on the loopback interface (127.0.0.1), making it available to HAProxy but not to remote clients. If your Jetty instance runs on a different machine and/or on a different (sub)network, you may want to adjust both the back-end section of the HAProxy configuration file and the `jetty.http.host` property to match accordingly. diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 3dc0bda8e707..1e1c318a9f1d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -53,8 +53,8 @@ $ java -jar $JETTY_HOME/start.jar --list-config The common properties associated with connectors (host,port, timeouts, etc.) can be set in the module ini files (or `start.ini` if `--add-to-start` was used): `${jetty.base}/start.d/http.ini` and `${jetty.base}/start.d/ssl.ini`. These properties are instantiated in the associated XML files: `${jetty.home}/etc/jetty-http.xml`; `${jetty.home}/etc/jetty-ssl.xml`, plus the SSL keystore is instantiated in `${jetty.home}/etc/jetty-ssl-context.xml`. -____ [NOTE] +____ If you are planning to edit XML files, make sure to copy them to your `{$jetty.base}/etc/` directory before doing so. The XML files that come with the Jetty distribution should *not* be modified directly. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc index 8e368d042f8f..dc0bfda8ef50 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc @@ -25,8 +25,8 @@ The requirements for running HTTP/2 are JDK 8 or greater, and typically also ALP A server deployed over TLS (SSL) normally advertises the HTTP/2 protocol via the TLS extension Application Layer Protocol Negotiation link:#alpn[(ALPN)]. -____ [NOTE] +____ To use HTTP/2 in Jetty via a TLS connector you need to add the link:#alpn-starting[ALPN boot jar] in the boot classpath. This is done automatically when using the Jetty distribution's start.jar link:#startup-modules[module system], but must be configured directly otherwise. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc index 42785eede5fb..ec846d021ff8 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc @@ -59,8 +59,8 @@ It should look something like so: image:administration/jmx/images/jconsole1.jpg[image,width=576] -____ [IMPORTANT] +____ If you don't see your Jetty process in the list of processes you can connect to, quickly switch tabs, or close and reopen a new "New Connection" dialog window. This forces JConsole to refresh the list, and recognize your newly-started Jetty process. ____ @@ -94,8 +94,8 @@ It should look something like so: image:administration/jmx/images/jmc1.png[image,width=576] -____ [IMPORTANT] +____ If you don't see your Jetty process in the list of processes you can connect to, quickly switch tabs, or close and reopen a new "New Connection" dialog window. This forces JMC to refresh the list, and recognize your newly-started Jetty process. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc index 0216ce1c84c7..13dc6cb1518c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc @@ -152,8 +152,8 @@ public class MyClass { } ---- -____ [NOTE] +____ Careful! When configuring Resources, ensure that the type of object you configure matches the type of object you expect to look up in `java:comp/env`. For database connection factories, this means that the object you register as a Resource _must_ implement the `javax.sql.DataSource` interface. ____ @@ -226,8 +226,8 @@ Jetty also provides infrastructure for access to `javax.mail.Sessions` from with This setup creates an instance of the `org.eclipse.jetty.jndi.factories.MailSessionReference` class, calls it's setter methods to set up the authentication for the mail system, and populates a set of Properties, setting them on the `MailSessionReference` instance. The result is that an application can look up `java:comp/env/mail/Session` at runtime and obtain access to a `javax.mail.Session` that has the necessary configuration to permit it to send email via SMTP. -____ [TIP] +____ You can set the password to be plain text, or use Jetty's link:#configuring-security-secure-passwords[Secure Password Obfuscation] (OBF:) mechanism to make the config file a little more secure from prying eyes. Remember that you cannot use the other Jetty encryption mechanisms of MD5 and Crypt because they do not allow you to recover the original password, which the mail system requires. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc index 524e5c5f53d3..1bbd57dee422 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc @@ -21,8 +21,8 @@ Here are examples of configuring a JNDI datasource for various databases. -____ [NOTE] +____ Read xref:configuring-datasources[] in xref:jndi-configuration[] for more information about configuring datasources. ____ @@ -42,8 +42,8 @@ These examples assume that all of the datasources are declared at the JVM scope, You can configure all JNDI resources in a `jetty.xml` file, a `WEB-INF/jetty-env.xml` file, or a context XML file. See the section xref:jndi-where-to-declare[] for more information. -____ [IMPORTANT] +____ You must provide Jetty with the libraries necessary to instantiate the datasource you have configured by putting the corresponding Jar in `JETTY_HOME/lib/ext`. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc index 48619ca2aa39..03f8146d87bd 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc @@ -34,8 +34,8 @@ DEBUG:: IGNORE:: Exception events that you can safely ignore, but useful for some people. You might see this level as DEBUG under some Java logging framework configurations, where it retains the _ignore_ phrase somewhere in the logging. -____ [NOTE] +____ Jetty logging produces no FATAL or SEVERE events. ____ @@ -51,8 +51,8 @@ Configure the Jetty logging layer via the `org.eclipse.jetty.util.log.Log` class * If property `org.eclipse.jetty.util.log.class` is defined, load the class it defines as the logger implementation from the server `classpath`. * If the class `org.slf4j.Logger` exists in server classpath, the Jetty implementation becomes `org.eclipse.jetty.util.log.Slf4jLog`. * If no logger implementation is specified, default to `org.eclipse.jetty.util.log.StdErrLog`. -____ [NOTE] +____ You can create your own custom logging by providing an implementation of the link:{JDURL}org/eclipse/jetty/util/log/Logger.html[Jetty Logger API]. For an example of a custom logger, see link:{GITBROWSEURL}/jetty-util/src/main/java/org/eclipse/jetty/util/log/JavaUtilLog.java[JavaUtilLog.java]. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc index 3dca551b9d15..823ee97c51ac 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc @@ -60,8 +60,8 @@ INFO: Base directory was modified The above command will add a new `requestlog.ini` file to your link:#start-vs-startd[`{$jetty.base}/start.d` directory]. -____ [NOTE] +____ By default, request logs are not set to be appended, meaning a the log file is wiped clean upon sever restart. You can change this setting by editing the `requestlog.ini` and un-commenting the line that reads `jetty.requestlog.append=true`. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index a292be04cc9d..6def49d0818e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -47,8 +47,8 @@ INFO : Base directory was modified The default configuration for logging output will create a file `${jetty.base}/logs/yyyy_mm_dd.stderrout.log` which allows configuration of the output directory by setting the `jetty.logs` property. -____ [NOTE] +____ By default, logs are not set to be appended, meaning a the log file is wiped clean upon sever restart. You can change this setting by editing the `console-capture.ini` and un-commenting the line that reads `jetty.console-capture.append=true`. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc index 481bd66c5b44..f4cf1bd544cc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc @@ -25,8 +25,8 @@ Jetty. This example demonstrates how to configuring Jetty for logging to `java.util.logging` via Jetty's own JavaUtilLog implementation. -____ [IMPORTANT] +____ While this is a valid setup, the Jetty project recommends always using the link:#example-logging-java-util-logging[slf4j to java.util.logging configuration] for memory and performance reasons. This native implementation is very non-performant and is not guaranteed to exist in the future. ____ @@ -78,8 +78,8 @@ In essence, Jetty is now configured to use `org.eclipse.jetty.util.log.JavaUtilL If there any custom `java.util.logging` handlers to be used, put the implementation jar in the `${jetty.base}/lib/logging/` directory and reference them in the `${jetty.base}/resources/logging.properties` file. -____ [NOTE] +____ `java.util.logging` is configured via the `${jetty.base}/resources/logging.properties` file during a valid startup of Jetty. This means that if there is any startup errors that occur before `java.util.logging` is configured, they will likely be lost and/or not routed through your configuration. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc index cf12671b5d67..2cfba42288f4 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc @@ -73,8 +73,8 @@ In essence, Jetty is now configured to emit its own logging events to slf4j, and If there any custom `java.util.logging` handlers to be used, put the implementation jar in the `${jetty.base}/lib/logging/` directory and reference them in the `${jetty.base}/resources/logging.properties` file. -____ [NOTE] +____ `java.util.logging` is configured via the `${jetty.base}/resources/logging.properties` file during a valid startup of Jetty. This means that if there is any startup errors that occur before `java.util.logging` is configured, they will likely be lost and/or not routed through your configuration. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc index 93a04e50fc62..41e622de1283 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc @@ -24,8 +24,8 @@ It routes all logging events from the web applications to a single configuration The example below shows how to accomplish this with Jetty and Slf4j, using `Logback` to manage the final writing of logs to disk. -____ [IMPORTANT] +____ This mechanism forces all webapps to use the server's configuration for logging, something that isn't 100% appropriate for all webapps. An example would be having Jenkins-CI deployed as an webapp, if you force its logging configuration to the server side, you lose the ability on http://jenkins-ci.org/[Jenkins-CI] to see the logs from the various builds (as now those logs are actually going to the main server log). ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc index 100e5eaf13f0..b7c8077e6fa8 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc @@ -34,14 +34,14 @@ Logging APIs that Slf4j supports: To accomplish this configuration a single underlying logging framework should first be chosen. This decision guides the rest of the choices about jar files to place on the server classpath. -____ [CAUTION] +____ There MUST NOT be multiple underlying logging frameworks on the classpath. If there are, the Slf4j framework fails to load. ____ -____ [NOTE] +____ Some third party libraries provide their own implementations of common logging APIs; be careful not to accidentally include an underlying logging framework. For example, if you are using SpringSource you likely have a `com.springsource.org.apache.log4j.jar` along with a `log4j.jar`, which have the same classes in them. In this example, use the `com.springsource.org.apache.log4j.jar` version and exclude the `log4j.jar`, as the SpringSource version includes extra metadata suitable for using SpringSource. diff --git a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc index ab1f6ae6118c..db7eca375367 100644 --- a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc @@ -55,8 +55,8 @@ In fact, the webapp does not have to be a war or even a directory, it can simply > java -jar jetty-runner.jar simple-context.xml .... -____ [NOTE] +____ When using a context xml file, the application being deployed is not even required to be a fully-fledged webapp. It can simply be a Jetty link:#what-is-a-context[context]. ____ @@ -95,8 +95,8 @@ Just provide the list of context files like so: > java -jar jetty-runner.jar my-first-context.xml my-second-context.xml my-third-context.xml .... -____ [NOTE] +____ Switched used on the command line override configuration file settings. So, for example, you could set the context path for the webapp inside the context xml file, and use the `--path` switch to override it on the command line. ____ @@ -251,8 +251,8 @@ Here's an example of configuring a single extra classes dir: > java -jar jetty-runner.jar --classes /opt/stuff/classes my.war .... -____ [NOTE] +____ When using the `--jar` and/or `--lib` arguments, by default these will *not* be inspected for `META-INF` information such as `META-INF/resources`, `META-INF/web-fragment.xml`, or `META-INF/taglib.tld`. If you require these jar files inspected you will need to define the link:https://www.eclipse.org/jetty/documentation/current/configuring-webapps.html#webapp-context-attributes[jar pattern in your context xml file]. Jetty-Runner automatically provides and appends a suitable pattern for jtsl taglibs (this pattern is different than the one in the standard Jetty distribution). diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc index 877dfb4aa515..4b9ea19b2882 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc @@ -48,8 +48,8 @@ By default Session files will be saved to this directory. In addition to adding these modules to the classpath of the server, several ini configuration files were added to the `${jetty.base}/start.d` directory. -____ [NOTE] +____ Session data is now only loaded when requested. Previous functionality such as `setLazyLoad` has been removed. ____ @@ -80,8 +80,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc index 6dc9571867ad..9f388375c965 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc @@ -206,8 +206,8 @@ When the `--add-to-start` argument was added to the command line the first time, In addition to adding these modules to the classpath of the server it also added the respective configuration files to the `${jetty.base}start.d` directory. -____ [NOTE] +____ If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. ____ @@ -250,8 +250,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc index 30a1b1c29ee7..779a624b22b3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc @@ -64,8 +64,8 @@ It also downloaded the needed Hazelcast-specific jar files and created a directo In addition to adding these modules to the classpath of the server it also added several ini configuration files to the `${jetty.base}/start.d` directory. -____ [NOTE] +____ If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. ____ @@ -103,8 +103,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. @@ -186,8 +186,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc index 33b4c99db428..84dfeab4c225 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc @@ -63,8 +63,8 @@ It also downloaded the needed Infinispan-specific jar files and created a direct In addition to adding these modules to the classpath of the server it also added several ini configuration files to the `${jetty.base}/start.d` directory. -____ [NOTE] +____ If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. ____ @@ -100,8 +100,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. @@ -126,8 +126,8 @@ There are no configuration properties associated with this module. During testing, it can be helpful to run an in-process instance of Infinispan. To enable this you will first need to enable the `session-store-infinispan-embedded` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. -____ [IMPORTANT] +____ If you are running Jetty with JDK 9 or greater, enable `session-store-infinispan-embedded-910.mod` instead. ____ @@ -185,8 +185,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. @@ -213,8 +213,8 @@ Prior to release 9.4.13 we used the default Infinispan serialization, however th See issue https://github.com/eclipse/jetty.project/issues/2919 for more background. We have provided a conversion program which will convert any sessions stored in Infinispan to the new format. -____ [IMPORTANT] +____ We recommend that you backup your stored sessions before running the conversion program. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc index fb23780003d2..1f504cb72c10 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc @@ -103,8 +103,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc index 5a344abe486b..36ee2c5709bf 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc @@ -61,8 +61,8 @@ It also downloaded the needed Mongo-specific jar file and created a directory na In addition to adding these modules to the classpath of the server, several ini configuration files were added to the `${jetty.base}/start.d` directory. -____ [NOTE] +____ If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. ____ @@ -97,8 +97,8 @@ jetty.session.savePeriod.seconds=0:: By default whenever the last concurrent request leaves a session, that session is always persisted via the `SessionDataStore`, even if the only thing that changed on the session is its updated last access time. A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + -____ [NOTE] +____ Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. @@ -123,8 +123,8 @@ jetty.session.mongo.connectionString;; The string defining the MongoURI value, such as `mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]`. More information on how to format the MongoURI string can be found in the https://docs.mongodb.com/manual/reference/connection-string/[official documentation for mongo.] + -____ [NOTE] +____ You will only use *one* `connection-type` at a time, `address` or `uri`. If both are utilized in your `session-store-mongo.ini`, only the last `connection-type` configured in the file will be used. By default, the `connection-type` of `address` is used. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc index 0db651f80f50..367b36d7bdfe 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc @@ -47,8 +47,8 @@ Values are: * 0 : sessions are evicted from the cache as soon as the last active request for it finishes * >= 1 : any positive number is the time in seconds after which a session that is in the cache but has not experienced any activity will be evicted -____ [NOTE] +____ If you are not using a `SessionDataStore` that persists sessions, be aware that evicted sessions will be lost. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc index 2f5b662419ea..bbd84fc41167 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc @@ -88,8 +88,8 @@ Below is an example of how you could configure a the link:#configuring-sessions- The example above functions in either a `jetty-web.xml` file or a link:#using-basic-descriptor-files[context xml descriptor file.] -____ [NOTE] +____ If you explicitly configure the `SessionCache` and `SessionDataStore` for a `SessionHandler` in a context xml file or `jetty-web.xml` file, any session modules you already have enabled are ignored. So, for example, if you had enabled the `session-store-gcloud module` for your sever, you could force a particular webapp to use the `FileSessionDataStore` by explicitly configuring it in either a context xml file or a `jetty-web.xml` file as shown above. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc index 4293459f80c8..1eef916fb412 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc @@ -240,8 +240,8 @@ INFO : server initialized in ${jetty.base}/start.d/server.ini INFO : Base directory was modified ---- -____ [NOTE] +____ It is important to keep in mind that when activating a dependency, Jetty does not just go one layer down. If a dependent module also has dependencies they too will be enabled. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index 30ec84bdb1bd..d734cd5125fc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -216,8 +216,8 @@ This may download a file from the network if the module provides a URL. Disable the [files] section validation of content in the `${jetty.base}` directory for a specific module. Useful for modules that have downloadable content that is being overridden with alternatives in the `${jetty.base}`` directory. -____ [CAUTION] +____ This advanced option is for administrators that fully understand the configuration of their `${jetty.base}` and are willing to forego some of the safety checks built into the jetty-start mechanism. ____ @@ -266,8 +266,8 @@ Here's how to use the Jetty distribution, leveraging `start.jar`, to perform a s > java -jar start.jar STOP.PORT=8181 STOP.KEY=abc123 --stop .... -____ [NOTE] +____ To perform a graceful shutdown of Jetty, the `stats` link:#startup-modules[module] *must* be enabled. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc index 123d2dd196c7..9902579b4f72 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc @@ -30,8 +30,8 @@ Jetty Home:: * Also known as the `${jetty.home}` property. * This is the location for the Jetty distribution binaries, default XML IoC configurations, and default module definitions. -____ [IMPORTANT] +____ Jetty Home should always be treated as a standard of truth. All configuration modifications, changes and additions should be made in the appropriate Jetty Base directory. ____ @@ -322,8 +322,8 @@ The following demonstrates this by allowing default discovery of `${jetty.home}` ... .... -____ [IMPORTANT] +____ Be aware of the `user.dir` system property, as it can only be safely set when the JVM starts and many 3rd party libraries (especially logging) use this system property. It is strongly recommended that you sit in the directory that is your desired `${jetty.base}` when starting Jetty to have consistent behavior and use of the `user.dir` system property. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc index ec477fbf4a05..5892333c841e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc @@ -42,8 +42,8 @@ Of special note, there are 2 structural modules defined to ease some of this for + Logging libraries often have classpath lookup of their configuration files (eg: `log4j.properties`, `log4j.xml`, `logging.properties`, and `logback.xml`), so this would be the ideal setup for this sort of configuration demand. -____ [NOTE] +____ Both the `ext` and `resources` modules declare relative paths that follow link:#base-vs-home-resolution[Jetty Base and Jetty Home path resolution rules]. ____ diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc index cfd350f20c8c..25328477c1e5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc @@ -25,8 +25,8 @@ Modules allow flexibility for implementations and their plug-and-play nature mak [[enabling-modules]] ==== Enabling Modules -____ [TIP] +____ The default distribution has a co-mingled `${jetty.home}` and `${jetty.base}` where the directories for `${jetty.home}` and `${jetty.base}` point to the same location. It is highly encouraged that you learn about the differences in link:#startup-base-and-home[Jetty Base vs Jetty Home] and take full advantage of this setup. ____ @@ -148,8 +148,8 @@ This is done by editing the associated ini file for the module. If your server setup is using a centralized ini configuration, you will edit the `${jetty.base}/server.ini` file. If you have elected to manage each module within it's own ini file, you can find these files in the `${jetty.base}/start.d` directory. -____ [IMPORTANT] +____ It is important that you *do not* modify the module files in the `$JETTY_HOME/modules` directory. $JETTY_HOME should always remain a standard of truth. If you want to make a change to an actual module file (not the values in its `ini-template`), either edit its associated `ini` file in the `$JETTY_BASE/start.d` directory or make a copy of the desired module file and copy it to the `$JETTY_BASE` directory and edit it there. @@ -215,8 +215,8 @@ This command will also show you which modules are __enabled__. Modules are sorted by the value in the `[tags]` section of the associated `.mod` file. If there are multiple entries in the `[tags]` section, it sorts by the first tag in the list. -____ [NOTE] +____ By default, the `--list-modules` command line argument shows all modules that do not include `internal` in the `[tags]` section of the associated `.mod` file. If you would like to see *all* modules, use `--list-all-modules` ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index 0a5a013435a6..ae17311d7194 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -289,8 +289,8 @@ Now when the server is started, HTTP connections will enter on port 5231: Every module has their own set of configuration options, and reviewing them all is recommended. For additional information on the module system, please refer to our documentation on link:#startup-modules[Startup Modules]. -____ [NOTE] +____ Editing these module files is the recommended way to edit the configuration of your server. Making changes to the associated Jetty XML file for connectors is *not* recommended, and is for advanced users only. If you do wish to edit Jetty XML, please see our section on managing link:#[Jetty Home and Jetty Base] to ensure your Jetty Home remains a standard of truth for your implementation. @@ -484,8 +484,8 @@ In such environments, the TCP/IP connection terminating on the server does not o Thus Intermediaries typically implement one of several de facto standards to communicate to the server information about the original client connection terminating on the intermediary. Jetty supports the `X-Forwarded-For` header and the http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt[Proxy Protocol] mechanisms as described below. -____ [NOTE] +____ The XML files in the Jetty distribution contain commented out examples of both the `X-Forwarded-For` and http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt[Proxy Protocol] mechanisms. When using those examples, it is recommended that the XML in the Jetty distribution is not edited. Rather the files should be copied into a Jetty base directory and then modified. diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index b71d25a63ad0..8c652efe78e6 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -43,8 +43,8 @@ All CBC based ciphers are supported since Java 7, the new GCM modes are supporte TLS v1.0, v1.1 and SSL v3 are no longer supported by default. If your Jetty implementation requires these protocols for legacy support, they can be enabled manually. -____ [NOTE] +____ Once TLS v1.3 is released, there will be no workaround available for TLS v1.0 or v1.1. Plans for TLS v1.3 include banning ciphers with known vulnerabilities from being present at any level. It is recommended to upgrade any clients using these ciphers as soon as possible or face being locked into a outdated version of Jetty, Java or even OS. @@ -115,8 +115,8 @@ The following command generates a key pair and certificate directly into file `k $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA ---- -____ [NOTE] +____ The DSA key algorithm certificate produces an error after loading several pages. In a browser, it displays a message "Could not establish an encrypted connection because certificate presented by localhost as an invalid signature." The solution is to use RSA for the key algorithm. @@ -266,8 +266,8 @@ You need to enter the details for the certificate again. Once a CA has sent you a certificate, or if you generated your own certificate without `keytool`, you need to load it into a JSSE keystore. -____ [NOTE] +____ You need both the private key and the certificate in the JSSE keystore. You should load the certificate into the keystore used to generate the CSR with `keytool`. If your key pair is not already in a keystore (for example, because it has been generated with OpenSSL), you need to use the PKCS12 format to load both key and certificate (see link:#loading-keys-and-certificates-via-pkcks12[PKCKS12 Keys &Certificates]). @@ -335,8 +335,8 @@ $ cat example.crt intermediate.crt [intermediate2.crt] ... rootCA.crt > cert-cha $ openssl pkcs12 -export -inkey example.key -in cert-chain.txt -out example.pkcs12 ---- -____ [NOTE] +____ The order of certificates must be from server to rootCA, as per link:https://www.ietf.org/rfc/rfc2246.txt[RFC2246 section 7.4.2.] ____ @@ -378,8 +378,8 @@ image::configuring/connectors/images/certificate-chain.png[title="Certificate ch    └── Root CA certificate .... -____ [NOTE] +____ Both the `Intermediary CA certificate` and `Root CA certificate` are optional. ____ @@ -686,8 +686,8 @@ While the `SslContextFactory` can operate without a keystore (this mode is most setKeyStorePath:: The configured keystore to use for all SSL/TLS in configured Jetty Connector (or Client). -____ [NOTE] +____ As a keystore is vital security information, it can be desirable to locate the file in a directory with *very* restricted access. ____ @@ -704,15 +704,15 @@ setExcludeCipherSuites / setIncludeCipherSuites:: setExcludeProtocols / setIncludeProtocols:: This allows for the customization of the selected Protocols that will be used by SSL/TLS. -____ [NOTE] +____ When working with Includes / Excludes, it is important to know that *Excludes will always win.* The selection process is to process the JVM list of available Cipher Suites or Protocols against the include list, then remove the excluded ones. Be aware that each Include / Exclude list has a Set method (replace the list) or Add method (append the list). ____ -____ [CAUTION] +____ The keystore and truststore passwords may also be set using the system properties: `org.eclipse.jetty.ssl.keypassword` `org.eclipse.jetty.ssl.password`. This is _not_ a recommended usage. ____ @@ -760,14 +760,14 @@ It's crucial that you use the _exact_ names of the cipher suites as used/known b You can get them by obtaining an instance of SSLEngine and call `getSupportedCipherSuites()`. Tools like https://www.ssllabs.com/[ssllabs.com] might report slightly different names which will be ignored. -____ [IMPORTANT] +____ It is important to stay up-to-date with the latest supported cipher suites. Be sure to consult Oracle's link:https://java.com/en/jre-jdk-cryptoroadmap.html[JRE and JDK Cryptographic Roadmap] frequently for recent and upcoming changes to supported ciphers. ____ -____ [IMPORTANT] +____ It's recommended to install the Java Cryptography Extension (JCE) Unlimited Strength policy files in your JRE to get full strength ciphers such as AES-256. The files can be found on the http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java download page]. Just overwrite the two present JAR files in `/lib/security/`. @@ -776,8 +776,8 @@ ____ Both `setIncludeCipherSuites` and `setExcludeCipherSuites` can be fed by the exact cipher suite name used in the JDK or by using regular expressions. If you have a need to adjust the Includes or Excludes, then this is best done with a custom XML that configures the `SslContextFactory` to suit your needs. -____ [NOTE] +____ Jetty *does* allow users to enable weak/deprecated cipher suites (or even no cipher suites at all). By default, if you have these suites enabled warning messages will appear in the server logs. ____ @@ -821,15 +821,15 @@ etc/tweak-ssl.xml $ ---- -____ [NOTE] +____ The default `SslContextFactory` implementation applies the latest SSL/TLS recommendations surrounding vulnerabilities in SSL/TLS. Check the release notes (the `VERSION.txt` found in the root of the Jetty Distribution, or the http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.eclipse.jetty%22%20AND%20a%3A%22jetty-project%22[alternate (classified 'version') artifacts for the `jetty-project` component] on Maven Central) for updates. The Java JVM also applies exclusions at the JVM level and, as such, if you have a need to enable something that is generally accepted by the industry as being insecure or vulnerable you will likely have to enable it in *both* the Java JVM and your Jetty configuration. ____ -____ [TIP] +____ You can enable the `org.eclipse.jetty.util.ssl` named logger at `DEBUG` level to see what the list of selected Protocols and Cipher suites are at startup of Jetty. ____ @@ -884,8 +884,8 @@ Additional Include / Exclude examples: ---- -____ [NOTE] +____ Note that disabling SSLv3 prevents very old browsers like Internet Explorer 6 on Windows XP from connecting. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc index 134a123f2864..d1716a691eb7 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc @@ -56,8 +56,8 @@ Set an attribute in `jetty.xml` on the Server instance for which you want to mod ---- -____ [IMPORTANT] +____ It is important to remember that you should *not* modify the XML files in your `$JETTY_HOME`. If you do for some reason feel you want to change the way an XML file operates, it is best to make a copy of it in your `$JETTY_BASE` in an `/etc` directory. Jetty will always look first to the `$JETTY_BASE` for configuration. diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc index 9d07cdf0187b..29bd26d89ba0 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc @@ -135,8 +135,8 @@ context.setAttribute("javax.servlet.context.tempdir", "/some/dir/foo"); Once a temporary directory has been created by either of these methods, a file instance for it is set as the value of the `javax.servlet.context.tempdir` attribute of the web application. -____ [NOTE] +____ Be wary of setting an explicit temp directory if you are likely to change the jars in WEB-INF/lib between redeployments. There is a JVM bug concerning link:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4774421[caching of jar contents.] ____ @@ -204,7 +204,7 @@ Sometimes it is useful to keep the contents of the temporary directory between r By default, Jetty will *not* persist the temp directory. To configure Jetty to keep it, use link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html[WebAppContext.setPersistTempDirectory(true)]. -____ [NOTE] +____ Be aware that if you call `setPersistTempDirectory(true)`, but let Jetty create a new temp directory each time (i.e. you do NOT set an explicit temp directory), then you will accumulate temp directories in your chosen temp directory location. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc index 4001e382fdcb..388eb06ded0e 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc @@ -71,8 +71,8 @@ For example, if the system property is set to `myapp.home=/opt/myapp`, the previ If the home path for an application needs altered, only the system property needs changed. This is useful if the version of an app is frequently changed. -____ [NOTE] +____ To ensure your `web.xml` files are validated, you will need to set the `validateXml` attribute to true as described link:#jetty-xml-dtd[here.] ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc index fefc5be3dfa4..14e3344bd238 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc @@ -81,8 +81,8 @@ generateOrigin:: If true, the origin attribute will be inserted into each element in quickstart-web.xml. Note that origin attributes will also be generated if debug log level is enabled. -____ [NOTE] +____ If you are using Spring-Boot you must set `generateOrigin` to true. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc index c4d076008ea2..e6c609d99c77 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc @@ -63,8 +63,8 @@ For example, suppose you have precompiled your JSPs with the custom package pref
---- -____ [NOTE] +____ Both Jetty Maven plugins - link:#jetty-jspc-maven-plugin[jetty-jspc-maven-plugin] and the link:#jetty-maven-plugin[jetty-maven-plugin] - will only use Apache Jasper. ____ @@ -161,8 +161,8 @@ Parameters also differ among the various versions of the JSP engine. This page lists the configuration parameters, their meanings, and their default settings. Set all parameters on the `org.apache.jasper.servlet.JspServlet` instance defined in the link:#webdefault-xml[`webdefault.xml`] file. -____ [NOTE] +____ Be careful: for all of these parameters, if the value you set doesn't take effect, try using all lower case instead of camel case, or capitalizing only some of the words in the name, as JSP is inconsistent in its parameter naming strategy. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc index 978fea41499a..883803144f77 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc @@ -77,8 +77,8 @@ then you need to create a `JAASLoginService` with the matching realm name of "Te ---- The `LoginModuleName` must match the name of your LoginModule as declared in your login module configuration file (see <>). -____ [CAUTION] +____ The name of the realm-name that you declare in `web.xml` must match *exactly* the `Name` field of your `JAASLoginService`. ____ @@ -134,8 +134,8 @@ xyz { }; ---- -____ [CAUTION] +____ It is imperative that the application name on the first line is *exactly* the same as the `LoginModuleName` of your `JAASLoginService`. ____ @@ -156,8 +156,8 @@ To accomplish the above, use the Jetty link:#startup-overview[startup] link:#sta java -jar start.jar --add-to-start=jaas .... -____ [NOTE] +____ The top level of the distribution does not have the JAAS module enabled by default. However, there are several link:#demo-webapps-base[demo webapps] - including a JAAS webapp - available in the `demo-base` directory of the distribution which has pre-enabled the JAAS module. ____ @@ -220,8 +220,8 @@ As `LoginModules` are free to use their own implementation of the JAAS Principal * link:{JDURL}/org/eclipse/jetty/jaas/spi/DataSourceLoginModule.html[`org.eclipse.jetty.jaas.spi.DataSourceLoginModule`] * link:{JDURL}/org/eclipse/jetty/jaas/spi/LdapLoginModule.html[`org.eclipse.jetty.jaas.ldap.LdapLoginModule`] -____ [NOTE] +____ Passwords can be stored in clear text, obfuscated or checksummed. The class link:{JDURL}/org/eclipse/jetty/util/security/Password.html[`org.eclipse.jetty.util.security.Password`] should be used to generate all varieties of passwords,the output from which can be put in to property files or entered into database tables. See more on this under the Configuration section on link:#configuring-security-secure-passwords[securing passwords]. diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc index 1c9c79710cb2..e6e0d21c5387 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc @@ -455,8 +455,8 @@ If you want to start using a new module: This adds the `--module=` lines and associated properties (the parameterized values mentioned above), to your `start.ini`. -____ [IMPORTANT] +____ Do not edit the modules and XML files in the `${jetty.home}` directory; there is no need to be moving or copying them unless you want to make your own modules or override the behavior of an existing module. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc index 1b52240c67b2..dd24ab217250 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc @@ -66,8 +66,8 @@ $ echo -n password | md5sum 5f4dcc3b5aa765d61d8327deb882cf99 *- .... -____ [IMPORTANT] +____ When using the `DIGEST` method in tandem with an MD5 hash, you must hash the entire `user:realm:password` string or you will encounter issues with authenticating. ____ @@ -98,8 +98,8 @@ me:CRYPT:me/ks90E221EY ---- -____ [TIP] +____ Don't forget to also copy the OBF:, MD5: or CRYPT: prefix on the generated password. It will not be usable by Jetty without it. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc index 315ae7d05cdb..e53b315c2cb3 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc @@ -72,8 +72,8 @@ ApproveAliases:: AllowSymLinkAliasChecker:: Approve Aliases using the java-7 `Files.readSymbolicLink(path)` and `Path.toRealPath(...)` APIs to check that aliases are valid symbolic links. -____ [NOTE] +____ By default, Jetty serves aliased files for implementations running on UNIX as Contexts are created with both the {JDURL}/org/eclipse/jetty/server/handler/AllowSymLinkAliasChecker.html[`AllowSymLinkAliasChecker`] and {JDURL}/org/eclipse/jetty/server/handler/ContextHandler.ApproveNonExistentDirectoryAliases.html[`ApproveNonExistentDirectoryAliases`] alias checkers. ____ diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc index af33e226a556..10a2b62dba49 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc @@ -75,8 +75,8 @@ The `http.mod` is enabled by default in the distribution, while the link:#quicks # java -jar start.jar --add-to-start=setuid ---- + -____ [NOTE] +____ The --add-to-start command will enable the setuid module for this and all subsequent executions of jetty. There are other ways to enable the module, such as for a single execution. For more information on the alternatives see the section on link:#startup-modules[Managing Startup Modules]. @@ -96,8 +96,8 @@ jetty.groupname=bar jetty.umask=002 ---- -____ [NOTE] +____ As well as opening the connectors as `root`, you can also have Jetty start the Server as `root` before changing to the non-`root` user. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc index 8ab7a9a0dc89..509f834d400d 100644 --- a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc +++ b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc @@ -138,8 +138,8 @@ ports and connectors::: ---- + -____ [TIP] +____ You can set the port to 0, which starts the Jetty server connector on an arbitrary available port. You can then access these values from system properties `jetty.ant.server.port` and `jetty.ant.server.host`. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc index 517fa20b42a5..7daebcabf9e3 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc @@ -22,8 +22,8 @@ Jetty has a rich history of being embedded into a wide variety of applications. In this section we will walk you through a number of our simple examples under our embedded-jetty-examples project in our git repository. -____ [IMPORTANT] +____ These files are pulled directly from our git repository when this document is generated. If the line numbers do not line up feel free to fix this documentation in github and give us a pull request, or at least open an issue to notify us of the discrepancy. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index 41e20e437839..a4d969a58885 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -28,14 +28,14 @@ Jetty is decomposed into many jars and dependencies to achieve a minimal footpri Typically it is best to use something like link:#jetty-maven-helloworld[Maven] to manage jars, however this tutorial uses an aggregate Jar that contains all of the required Jetty classes in one Jar. You can manually download the aggregate link:https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/{VERSION}/jetty-all-{VERSION}-uber.jar[`jetty-all.jar`] using `curl` or a browser. -____ [NOTE] +____ The central Maven repository has started to aggressively reject/deny access to the repository from the `wget` command line tool (due to abusive use of the tool by some groups). The administrators of the central maven repository have stated that the recommended command line download tool is now curl. ____ -____ [IMPORTANT] +____ The `jetty-all` jar referenced in this section is for example purposes only and should not be used outside of this context. Please consider using link:#jetty-maven-helloworld[Maven] to manage your project dependencies. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc index a47bac65216b..00671ef89977 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc @@ -98,8 +98,8 @@ This module is equivalent to directly modifying the class path configuration wit
------------------------------------------------------------- -____ [TIP] +____ The `cdi2` module or directly modifying the web application classpath will not work for Jetty 10.0.0 and later. It should only be used for versions prior to Jetty 9.4.20 and/or Weld 3.1.2.Final ____ diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index 9771962025be..43cf63920b31 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -59,8 +59,8 @@ You *must also install the Apache Aries SPI Fly bundles* as many parts of Jetty |https://repo1.maven.org/maven2/org/apache/aries/spifly/org.apache.aries.spifly.dynamic.bundle/[Maven central] |======================================================================= -____ [NOTE] +____ We strongly recommend that you also deploy the link:#osgi-annotations[annotation-related] jars also, as the Servlet Specification increasingly relies on annotations for functionality. ____ @@ -688,8 +688,8 @@ Here is the list of recommended jars (NOTE the version numbers may change in fut |https://repo1.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp[Maven central] |======================================================================= -____ [NOTE] +____ 1. As of Jetty 9.2.3 the jetty-osgi-boot-jsp bundle changed to using Apache Jasper as the JSP implementation. Prior to this the Glassfish Jasper implementation was used, which had a different set of dependencies - pay careful attention to the jars listed both at the top of this page and in this section, as deployment of other jars can cause incomplete or incorrect package resolution in the OSGi container. 2. The order of deployment is important. @@ -860,13 +860,13 @@ org.eclipse.jetty.orbit:javax.mail.glassfish-1.4.1.v201005082020.jar)^*^ |jetty-annotations |org.eclipse.jetty.annotations |Distribution lib/ |======================================================================= -____ [IMPORTANT] +____ If you wish to use JSPs you will need to deploy these annotation-related jars. ____ -____ [NOTE] +____ You may be able to deploy later versions or other providers of these specifications, however these particular versions are known to have correct manifests and have been tested and known to work with OSGi. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc index 48275308c9df..5b3b701eac4a 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc @@ -53,8 +53,8 @@ cd $JETTY_BASE java -jar $JETTY_HOME/start.jar --add-to-start=cdi-decorate ------------------------- -____ [TIP] +____ For use with the jetty-maven-plugin, the best idea is to make the org.jboss.weld.servlet:weld-servlet and jetty-cdi artifacts _plugin_ dependencies (__not__ a webapp dependency). ____ diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc index 15fe33963130..b00446760d4b 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc @@ -25,8 +25,8 @@ Based on the concept of a project object model (POM), Maven can manage a project It is an ideal tool to build a web application project, and such projects can use the link:#jetty-maven-plugin[jetty-maven-plugin] to easily run the web application and save time in development. You can also use Maven to build, test and run a project which embeds Jetty. -____ [NOTE] +____ Use of Maven and the jetty-maven-plugin is *not* required. Using Maven for Jetty implementations is a popular choice, but users encouraged to manage their projects in whatever way suits their needs. Other popular tools include Ant and Gradle. diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc index 87d9a7bcf813..9d0339d68ee1 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc @@ -24,8 +24,8 @@ You can add it to any webapp project that is structured according to the Maven d The plugin can then periodically scan your project for changes and automatically redeploy the webapp if any are found. This makes the development cycle more productive by eliminating the build and deploy steps: you use your IDE to make changes to the project, and the running web container automatically picks them up, allowing you to test them straight away. -____ [IMPORTANT] +____ You should use Maven 3.3+ for this plugin. ____ @@ -62,8 +62,8 @@ If you save changes and recompile your class files, Jetty redeploys your webapp, You can terminate the plugin with a `ctrl-c` in the terminal window where it is running. -____ [NOTE] +____ The classpath of the running Jetty instance and its deployed webapp are managed by Maven, and may not be exactly what you expect. For example: a webapp's dependent jars might be referenced via the local repository, not the `WEB-INF/lib` directory. ____ @@ -259,8 +259,8 @@ Now you need to let the plugin know to apply the files above:
---- -____ [CAUTION] +____ Just as with an installed distribution of Jetty, the ordering of the xml files is significant. ____ @@ -354,8 +354,8 @@ You do not need to assemble the webapp into a WAR, saving time during the develo Once invoked, you can configure the plugin to run continuously, scanning for changes in the project and automatically performing a hot redeploy when necessary. Any changes you make are immediately reflected in the running instance of Jetty, letting you quickly jump from coding to testing, rather than going through the cycle of: code, compile, reassemble, redeploy, test. -____ [NOTE] +____ As of Jetty 9.4.7, when using jetty:run in a multi-module build, it is no longer necessary to build each of the modules that form dependencies of the webapp first. Thus, if your webapp depends on other modules in your project and they are present in the reactor at the same time, jetty will use their compiled classes rather than their jar files from your local maven repository. ____ @@ -668,8 +668,8 @@ Jetty continues to execute until you either: * Press `ctrl-c` in the terminal window to stop the plugin, which also stops the forked JVM (only if you started with `waitForChild=true`) * Use `jetty:stop` to stop the forked JVM, which also stops the plugin. -____ [NOTE] +____ If you want to set a custom port for the Jetty connector you need to specify it in a `jetty xml` file rather than setting the connector and port tags. You can specify the location of the `jetty.xml` using the `jettyXml` parameter. ____ @@ -722,8 +722,8 @@ javaPath:: Default will be your `${java.home}/bin/java` This the java executable used to start the child process -____ [NOTE] +____ Use the `modules` parameter to configure the Jetty distribution appropriately rather than using jetty artifacts as `plugin dependencies`. ____ @@ -794,8 +794,8 @@ Here's an example of using the configuration parameters: ---- -____ [NOTE] +____ When defining modules for this goal, use the standard link:#startup-modules[Jetty module] names and not the name of the related Jetty sub-project. For example, in the configuration above support for JMX is configured by adding the `jmx` Jetty module and not the `jetty-jmx` sub-project. ____ @@ -1154,8 +1154,8 @@ Putting the configuration in webapp A's `pom.xml`:
---- -____ [IMPORTANT] +____ If the `ContextHandler` you are deploying is a webapp, it is *essential* that you use an `org.eclipse.jetty.maven.plugin.JettyWebAppContext` instance rather than a standard `org.eclipse.jetty.webapp.WebAppContext` instance. Only the former will allow the webapp to function correctly in the maven environment. ____ @@ -1244,8 +1244,8 @@ In the latter case, you can use the link:http://www.mojohaus.org/[maven properti
---- -____ [NOTE] +____ If a System property is already set (for example, from the command line or by the JVM itself), then by default these configured properties *DO NOT* override them (see below for use of the parameter). ____ diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc index a836d5899db5..fb55e99c6d34 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc @@ -52,14 +52,14 @@ We support the version 13 of the released and final spec. + Jetty tests its WebSocket protocol implementation using the http://autobahn.ws/testsuite[autobahn testsuite]. -____ [IMPORTANT] +____ The early drafts of WebSocket were supported in Jetty 7 and Jetty 8, but this support has been removed in Jetty 9. This means that Jetty 9 will not support the old browsers that implemented the early drafts of WebSocket. (such as Safari 5.0 or Opera 12) ____ -____ [TIP] +____ Want to know if the browser you are targeting supports WebSocket? Use http://caniuse.com/websockets[caniuse.com/websockets] to find out. ____ diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc index 42c4981cea09..a3d5ee373655 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc @@ -39,8 +39,8 @@ This example will create a Servlet mapped via the http://docs.oracle.com/javaee/ The link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketServlet.html#configure(org.eclipse.jetty.websocket.servlet.WebSocketServletFactory)[`WebSocketServlet.configure(WebSocketServletFactory factory)`] is where you put your specific configuration for your WebSocket. In the example we specify a 10 second idle timeout and register MyEchoSocket with the default WebSocketCreator the WebSocket class we want to be created on Upgrade. -____ [NOTE] +____ It is important that you take in account any firewall or router timeouts when configuring websockets. Be sure the websocket configuration is lower than your firewall or router. diff --git a/jetty-documentation/src/main/asciidoc/index.adoc b/jetty-documentation/src/main/asciidoc/index.adoc index 7798a489a364..e60180573c0b 100644 --- a/jetty-documentation/src/main/asciidoc/index.adoc +++ b/jetty-documentation/src/main/asciidoc/index.adoc @@ -16,12 +16,13 @@ // ======================================================================== // -Jetty : The Definitive Reference -================================ += Jetty : The Definitive Reference + :docinfo: :revnumber: {VERSION} :toc: +:icons: font include::quick-start/part.adoc[] include::configuring/part.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc index 609e1972c257..f5bcadc2c618 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc @@ -52,8 +52,8 @@ The Jetty distribution uses the following configuration files to instantiate, in * Other start.jar options (see `java -jar start.jar --help`) * Some JVM options in combination with `--exec`, such as `-Xbootclasspath`. -____ [NOTE] +____ -- It is the `ini` files located in the Jetty base directory (if different from Jetty home) that are typically edited to change the configuration (e.g. change ports). -- @@ -279,8 +279,8 @@ $ cat $JETTY_HOME/etc/jetty-http.xml Now we can see where those properties in our `ini` and module files came from. In Jetty XML files, Jetty objects come to life; defined properties are set which link back to the jar libraries and run the server to a user's specification. -____ [IMPORTANT] +____ It is important to remember that you should *not* modify the XML files in your `$JETTY_HOME`. If you do for some reason feel you want to change the way an XML file operates, it is best to make a copy of it in your `$JETTY_BASE` in an `/etc` directory. Jetty will always look first to the `$JETTY_BASE` for configuration. diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc index 5b0238016a5a..3198db247f50 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc @@ -75,13 +75,13 @@ SSL Context Factory:: The TLS connector types (HTTPS and HTTP2) configure an SSL Context Factory with the location of the server keystore and truststore for obtaining server certificates. -____ [NOTE] +____ Virtual hosts are not configured on connectors. You must configure individual contexts with the virtual hosts to which they respond. ____ -____ [NOTE] +____ Prior to Jetty 9, the type of the connector reflected both the protocol supported (HTTP, HTTPS, AJP, SPDY), and the nature of the implementation (NIO or BIO). From Jetty 9 onwards there is only one prime Connector type (`ServerConnector`), which is NIO based and uses Connection Factories to handle one or more protocols. ____ @@ -92,8 +92,8 @@ ____ A Jetty context is a handler that groups other handlers under a context path together with associated resources and is roughly equivalent to the standard ServletContext API. A context may contain either standard Jetty handlers or a custom application handler. -____ [NOTE] +____ The servlet specification defines a web application. In Jetty a standard web application is a specialized context that uses a standard layout and `WEB-INF/web.xml` to instantiate and configure classpath, resource base and handlers for sessions, security, and servlets, plus servlets for JSPs and static content. Standard web applications often need little or no additional configuration, but you can also use the techniques for arbitrary contexts to refine or modify the configuration of standard web applications. @@ -255,8 +255,8 @@ The new WebAppProvider will attempt to avoid double deployments during the direc * If a directory and matching XML file exists (eg: `foo/` and `foo.xml`), then the directory is assumed to be an unpacked WAR and only the XML is deployed (which may use the directory in its own configuration) * If a WAR file and matching XML file exist (eg: `foo.war` and `foo.xml`), then the WAR is assumed to be configured by the XML and only the XML is deployed. -____ [NOTE] +____ In prior versions of Jetty there was a separate ContextDeployer that provided XML-based deployment. As of Jetty 9 the ContextDeployer no longer exists and its functionality has been merged with the new link:{JDURL}/org/eclipse/jetty/deploy/providers/WebAppProvider.html[WebAppProvider] to avoid double deployment scenarios. ____ diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc index 2c65aec0b9b7..bf6ed12717de 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc @@ -32,8 +32,8 @@ jetty.home:: jetty.base:: The property that defines the location of a specific implementation of a Jetty server, its configuration, logs and web applications (typically start.d/*.ini files, logs and webapps). -____ [IMPORTANT] +____ Your Jetty Home directory should be treated as a standard of truth and remain unmodified or changed. Changes or additions to your configuration should take place in the Jetty Base directory. ____ @@ -102,8 +102,8 @@ When the server starts, it will now run on port `8081`. It is important to note that setting properties on the command line will only take affect for that instance of the server. To change the configuration so that the server will always start on the desired port, you will need to edit the `start.d/http.ini` -____ [NOTE] +____ -- The configuration by properties works via the following chain: diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc index 782e8d83cdac..cdae39901b94 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc @@ -32,8 +32,8 @@ When you download and unpack the binary, it is extracted into a directory called Put this directory in a convenient location. The rest of the instructions in this documentation refer to this location as either `$JETTY_HOME` or as `$(jetty.home).` -_____ -[IMPORTANT] +_[IMPORTANT] +____ It is important that *only* stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are *not* suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. _____ diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc index e879316cf318..44d69f9fbc38 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc @@ -43,8 +43,8 @@ To stop the server, press `CTRL` + `c` or `CTRL` + `z` in your terminal. *Note* the `HomeBaseWarning` - it is *not* recommended to run Jetty from the `$JETTY_HOME` directory. Instead, see how to link:#creating-jetty-base[create a Jetty Base] below. -____ [NOTE] +____ You will see examples throughout the documentation referencing `$JETTY_HOME` and `$JETTY_BASE` as well as `{jetty.home}` and `{jetty.base}`. These terms are used to refer to the location of your Jetty installation directories. Many users find it helpful to define `$JETTY_HOME` as an environment variable that maps to their Jetty distribution directory. @@ -103,8 +103,8 @@ $ java -jar ../start.jar You can visit this demo server by pointing a browser at link:http://localhost:8080[], which will now show a welcome page and several demo/test web applications. -____ [WARNING] +____ The demonstration web applications are not necessarily secure and should *not* be deployed in production web servers. ____ diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc index 1a21c6339f22..213e25b82ad9 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc @@ -19,8 +19,8 @@ [[quickstart-jetty-coordinates]] === Finding Jetty in Maven -_____ -[IMPORTANT] +_[IMPORTANT] +____ It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. _____ diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc index b8584fd1671c..a19fb073467b 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc @@ -23,8 +23,8 @@ Jetty 9 is the most recent version of Jetty and has a great many improvements ov This documentation which focuses on Jetty 9. While many people continue to use older versions of Jetty, we generally recommend using Jetty 9 as it represents the version of Jetty that we will actively maintain and improve over the next few years. -_____ -[IMPORTANT] +_[IMPORTANT] +____ It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. _____ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index f5ce1419a19f..3a4372ff4543 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -100,8 +100,8 @@ The build is finished once you see a message akin to this: You may now open your web browser and browse to the first page of the html output to see what you have produced! Generally you can do this with File -> Open File -> which will open a file system browsing screen, navigate to your jetty-documentation directory and then further into target/docbkx/html/index/index.html which is the first page of the produced documentation. -____ [TIP] +____ If the build is broken, feel free to notify us. ____ @@ -131,8 +131,8 @@ Then commit the change. $ git commit -s -m "Tweaked the introduction to fix a horrid misspelled word." src/main/asciidoc/quickstart/introduction/topic.xml .... -____ [NOTE] +____ In order for us to accept your commit into the Jetty repository you must have an Eclipse CLA on file and sign your commit. Please check out the link:#contributing-cla[patches] section for more information. ____ @@ -212,8 +212,8 @@ license blocks:: Some admonition examples: -______________________________________________ -[NOTE] +__________________________________________[NOTE] +____ A note about the previous case to be aware of. ______________________________________________ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc index c4f7ba4f5dac..590cad77b0ad 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc @@ -47,8 +47,8 @@ The Eclipse Foundation has a strong Intellectual Property policy which tracks co A contributor needs to e-sign a Eclipse Contributor Agreement (for more explanation see the http://www.eclipse.org/legal/ecafaq.php[Eclipse ECA FAQ] ) regardless of how their contribution patch is provided. You can familiarize yourself with the Eclipse wiki page at http://wiki.eclipse.org/Development_Resources/Contributing_via_Git[Contributing via Git]. In order to have a pull request accepted by any Eclipse project you *must* complete this agreement. -____ [TIP] +____ Log into the https://www.eclipse.org[Eclipse home page] (you will need to create an account with the Eclipse Foundation if you have not already done so), click on "Eclipse ECA", and complete the form. Be sure to use the _same email address_ when you create any Git commit records. ____ @@ -66,8 +66,8 @@ When making the commit for the pull request it is _vital_ that you "sign-off" o Without this sign-off, your patch cannot be applied to the Jetty repository because it will be rejected. You can check out the link:https://help.github.com/articles/signing-tags-using-gpg[guide at Github] for more information. -____ [TIP] +____ One way to think of this is that when you sign the ECA you are indicating that you are free to contribute to eclipse, but that doesn't mean everything you ever do can be contributed. Using the commit signing mechanism indicates that your commit is under the auspices of your agreement. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc index de466c40d9ca..9c6a365401b2 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc @@ -77,8 +77,8 @@ $ git push origin release-9 6. Prepare the Release + -____ [NOTE] +____ This step updates the elements in the pom.xml files, does a test build with these new versions, and then commits the pom.xml changes to your local git repo. The `eclipse-release` profile is required on the prepare in order to bring in the jetty aggregates as that profile defines a module which is ignored otherwise. ____ @@ -93,8 +93,8 @@ $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \ .... 7. Perform the Release + -____ [NOTE] +____ This step performs the release and deploys it to a oss.sonatype.org staging repository. ____ @@ -249,8 +249,8 @@ Do the following steps to publish documentation for the release: Make sure you follow the other examples and include the `rel="nofollow"` attribute on the link so that search engines do not crawl newly created documentation, otherwise we are subject to duplicate content penalties in SEO. 8. Commit the changes to the jetty-website project -____ [NOTE] +____ There is a separate Jenkins build job that publishes documentation to https://www.eclipse.org/jetty/documentation/current triggered by a push of changed files to the jetty-documentation project. If you commit your change to the number from step 2, then these builds will use the same release version number. It is preferable if you _don't_ commit that version number change, or better yet, ensure that it is set to the next -SNAPSHOT version number for your jetty major release number. diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc index af2b7e5019bb..67c7dddac84b 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc @@ -67,8 +67,8 @@ $ mvn install All relevant dependencies will be downloaded into your local repository automatically. -____ [NOTE] +____ Jetty has a great many test cases that run through the course of its build. Periodically we find some test cases to be more time dependent than they should be and this results in intermittent test failures. You can help track these down by opening a bug report. diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc index c996896dff14..cf0759450f4e 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc @@ -49,8 +49,8 @@ The best place to get started on this approach is to look through xref:embedding Once you have a main method defined in order to launch your application, right-click on the source file and select**Debug As -> Java Application**. In your *Console* tab within Eclipse you should see your application startup and once it has completed startup you should be able to configure breakpoints and hit the Jetty instance as normal via your web browser. -____ [TIP] +____ You can easily configure logging through a `jetty-logging.properties` file. If this file is on your classpath then Jetty will use it for configuring logging, we use this approach extensively throughout Jetty diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc index 4790fec7b33a..6ffbe6ef95e7 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc @@ -61,8 +61,8 @@ Debugging in IntelliJ is extremely powerful. For example it's possible to have conditional breakpoints that only trigger a break if the configured conditions are met. Have a look at the various tutorials in the internet or the http://www.jetbrains.com/idea/webhelp/getting-help.html[IntelliJ documentation] for further details. -____ [TIP] +____ You can easily configure logging through a `jetty-logging.properties` file. If this file is on your classpath then Jetty will use it for configuring logging, we use this approach extensively throughout Jetty development and it makes life ever so much easier. You can see this in action in the xref:configuring-jetty-stderrlog[] section. diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc index 4ff26153044a..879e5e49cdcb 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc @@ -26,8 +26,8 @@ If you have a web application deployed into Jetty you can interact with it remot The basics are that you must start up the remote JVM with additional parameters and then start up a remote debugging session in Eclipse for the webapp in question. This is easily accomplished. -____ [NOTE] +____ This example assumes you are deploying your web application into the jetty-distribution. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc index d4f2dbcd3595..fa5ec6ee00b1 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc @@ -43,8 +43,8 @@ Jetty applies `jetty-env.xml` on a per-webapp basis, and configures an instance ---- -____ [CAUTION] +____ Make sure you are applying the configuration to an instance of the proper class. `jetty-env.xml` configures an instance of WebAppContext, and not an instance of Server. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc index cd07cb3ba288..361bfe2184d3 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc @@ -40,8 +40,8 @@ For a more in-depth look at the syntax, see xref:jetty-xml-syntax[].
---- -____ [CAUTION] +____ Make sure you are applying the configuration to an instance of the proper class. `jetty-web.xml` configures an instance of `WebAppContext`; `jetty.xml` configures an instance of `Server`. ____ @@ -52,8 +52,8 @@ Place the `jetty-web.xml` into your web application's `WEB-INF` folder. When Jetty deploys a web application, it looks for a file called `WEB-INF/jetty-web.xml` or `WEB-INF/web-jetty.xml` within the web application (or WAR) and applies the configuration found there. Be aware that `jetty-web.xml` is called _after_ all other configuration has been applied to the web application. -____ [IMPORTANT] +____ It is important to note that `jetty-web.xml` files utilize the webapp classpath, not the classpath of the server. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc index 15ec6663f212..e0ec4f892a11 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc @@ -33,8 +33,8 @@ To use `jetty.xml`, specify it as a configuration file when running Jetty. java -jar start.jar etc/jetty.xml ---- -____ [NOTE] +____ If you start Jetty without specifying a configuration file, Jetty automatically locates and uses the default installation `jetty.xml` file. Therefore `java -jar start.jar` is equivalent to `java -jar start.jar etc/jetty.xml` . ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc index 1ef4b58beb99..1da1d7531774 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc @@ -33,8 +33,8 @@ The `webdefault.xml` file is located in `$(jetty.home)/etc/webdefault.xml`. You can specify a custom configuration file to use for specific webapps, or for all webapps. If you do not specify an alternate defaults descriptor, the `$JETTY-HOME/etc/jetty-deploy.xml` file will configure jetty to automatically use `$JETTY_HOME/etc/webdefault.xml`. -____ [NOTE] +____ To ensure your `webdefault.xml` files are validated, you will need to set the `validateXml` attribute to true as described link:#jetty-xml-dtd[here.] ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc index 341007ce1bef..b4c401b1afdd 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc @@ -19,8 +19,8 @@ [[cloudfoundry]] === CloudFoundry -____ [WARNING] +____ This is an increasingly aged integration, things like likely changed enough this is not directly useful but may serve as a useful starting point should someone want to look into it. ____ @@ -52,8 +52,8 @@ $ cf push snifftest --buildpack=git://github.com/jmcc0nn3ll/jetty-buildpack.git .... -____ [TIP] +____ In this example the web application is uploaded from the *current* directory so make sure you have changed directory into the root of your web application. The `snifftest` on the commandline refers to what you are calling the application, not the directory to deploy. Also note that the webapplication is installed into the `ROOT` context of Jetty as is available at the root context of the server. diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc index e4d893261442..299b9e3a82b2 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc @@ -19,8 +19,8 @@ [[elastic-beanstalk]] === Amazon Elastic Beanstalk -____ [WARNING] +____ This is an increasingly aged integration, things like likely changed enough this is not directly useful but may serve as a useful starting point should someone want to look into it. ____ @@ -69,8 +69,8 @@ jetty-beanstalk-testapp:: Also included is examples of how to alter the jetty configuration for things like a customized `start.ini` file. -____ [NOTE] +____ The test webapps needs access to a snapshot version of the test-jetty-webapp so it really serves as more of an example of how to layer your webapp with the bits required to customize your app for beanstalk and jetty. ____ @@ -79,8 +79,8 @@ Once you have the artifacts you simply need to copy the approach in the jetty-be * https://github.com/jmcc0nn3ll/jetty-beanstalk -____ [IMPORTANT] +____ Bluepill is used to manage the start and stop process of the app server. This seems to be a problematic bit of software with a colored history and the version in use at the time of this writing is old. When starting and stopping (or restarting) the appserver you may see error messages show up that the Server timed out getting a response or things like that. diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc index a6326a6d6c05..3a7dc7ebdb83 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc @@ -24,8 +24,8 @@ If you have memory leaks, and you have thoroughly investigated tools like jconso [[preventing-webapp-classloader-pinning]] ==== Preventing WebApp Classloader Pinning -____ [NOTE] +____ This feature is available for Jetty 7.6.6 and later. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc index 9ea051434b07..19c6f9ee18dd 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc @@ -91,7 +91,7 @@ Configure this in an xml file like so:
---- -____ [NOTE] +____ Be careful with this option when using an explicitly setlink:#ref-temp-directories[temp directory] name - as the name of the temp directory will not unique across redeployments, copying the static content into the same directory name each time may not avoid the locking problem. ____ diff --git a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc index 2dd9ab0d6319..e89d5c2d1eb2 100644 --- a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc @@ -170,8 +170,8 @@ Here is a comparison of file formats, note that the file contents are listed in | `maxInactive (long)` | |=== -____ [NOTE] +____ Session data is now only loaded when requested. Previous functionality such as `setLazyLoad` has been removed. ____ From 8daf80504f02da7cc3b07ad0b3f0150ff0c42553 Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 11:34:15 -0600 Subject: [PATCH 10/14] Replacing underscores for admonitions --- .../asciidoc/administration/alpn/alpn.adoc | 15 ++-- .../annotations/using-annotations.adoc | 5 +- .../extras/default-handler.adoc | 5 +- .../administration/extras/gzip-filter.adoc | 11 ++- .../administration/extras/header-filter.adoc | 5 +- .../extras/resource-handler.adoc | 10 ++- .../extras/rewrite-handler.adoc | 4 +- .../extras/statistics-handler.adoc | 6 +- .../http2/configuring-haproxy.adoc | 10 ++- .../http2/configuring-http2.adoc | 5 +- .../administration/http2/introduction.adoc | 5 +- .../administration/jmx/jetty-jconsole.adoc | 10 ++- .../jndi/jndi-configuration.adoc | 10 ++- .../administration/jndi/jndi-datasources.adoc | 10 ++- .../logging/configuring-jetty-logging.adoc | 10 ++- .../configuring-jetty-request-logs.adoc | 5 +- .../default-logging-with-stderrlog.adoc | 6 +- .../example-java-util-logging-native.adoc | 9 ++- .../logging/example-java-util-logging.adoc | 4 +- .../example-logback-centralized-logging.adoc | 5 +- .../example-slf4j-multiple-loggers.adoc | 10 ++- .../administration/runner/jetty-runner.adoc | 17 ++--- .../session-configuration-file-system.adoc | 9 ++- .../session-configuration-gcloud.adoc | 10 ++- .../session-configuration-hazelcast.adoc | 14 ++-- .../session-configuration-infinispan.adoc | 26 +++---- .../sessions/session-configuration-jdbc.adoc | 5 +- .../session-configuration-mongodb.adoc | 14 ++-- .../session-configuration-sessioncache.adoc | 5 +- .../sessions/sessions-usecases.adoc | 4 +- .../startup/custom-modules.adoc | 4 +- .../administration/startup/start-jar.adoc | 10 ++- .../startup/startup-base-vs-home.adoc | 9 ++- .../startup/startup-classpath.adoc | 5 +- .../startup/startup-modules.adoc | 15 ++-- .../connectors/configuring-connectors.adoc | 10 ++- .../connectors/configuring-ssl.adoc | 70 ++++++++----------- .../contexts/setting-form-size.adoc | 5 +- .../contexts/temporary-directories.adoc | 9 ++- ...onfiguring-specific-webapp-deployment.adoc | 5 +- .../deploying/quickstart-webapp.adoc | 5 +- .../configuring/jsp/configuring-jsp.adoc | 10 ++- .../configuring/security/jaas-support.adoc | 20 +++--- .../security/jetty-home-and-jetty-base.adoc | 5 +- .../security/secure-passwords.adoc | 10 ++- .../security/serving-aliased-files.adoc | 5 +- ...tting-port80-access-for-non-root-user.adoc | 10 ++- .../asciidoc/development/ant/jetty-ant.adoc | 5 +- .../embedding/embedded-examples.adoc | 5 +- .../embedding/jetty-helloworld.adoc | 10 ++- .../asciidoc/development/frameworks/cdi.adoc | 6 +- .../asciidoc/development/frameworks/osgi.adoc | 20 +++--- .../asciidoc/development/frameworks/weld.adoc | 5 +- .../maven/jetty-maven-helloworld.adoc | 5 +- .../development/maven/jetty-maven-plugin.adoc | 46 +++++------- .../development/websockets/intro/chapter.adoc | 10 ++- .../jetty/jetty-websocket-server-api.adoc | 5 +- .../configuring/how-to-configure.adoc | 10 ++- .../configuring/what-to-configure.adoc | 20 +++--- .../jetty-common-configuration.adoc | 10 ++- .../getting-started/jetty-installing.adoc | 15 ++-- .../getting-started/jetty-running.adoc | 10 ++- .../introduction/jetty-coordinates.adoc | 4 +- .../introduction/what-version.adoc | 4 +- .../reference/contributing/documentation.adoc | 14 ++-- .../reference/contributing/patches.adoc | 10 ++- .../contributing/releasing-jetty.adoc | 14 ++-- .../reference/contributing/source-build.adoc | 5 +- .../debugging/debugging-with-eclipse.adoc | 4 +- .../debugging/debugging-with-intellij.adoc | 4 +- .../debugging/enable-remote-debugging.adoc | 5 +- .../reference/jetty-xml/jetty-env-xml.adoc | 5 +- .../jetty-xml/jetty-web-xml-config.adoc | 10 ++- .../reference/jetty-xml/jetty-xml-usage.adoc | 5 +- .../reference/jetty-xml/webdefault-xml.adoc | 5 +- .../reference/platforms/cloudfoundry.adoc | 10 ++- .../platforms/elastic-beanstalk.adoc | 15 ++-- .../preventing-memory-leaks.adoc | 5 +- .../troubleshooting-locked-files.adoc | 4 +- .../upgrading/upgrading-9.3-to-9.4.adoc | 6 +- 80 files changed, 318 insertions(+), 464 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc index 78a5408c3949..c1e18f5c4767 100644 --- a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc @@ -98,11 +98,10 @@ java -Xbootclasspath/p: ... Where `path_to_alpn_boot_jar` is the path on the file system for the `alpn-boot` artifact, such as the one at the Maven coordinates `org.mortbay.jetty.alpn:alpn-boot`. [IMPORTANT] -____ +==== Be certain to get the link:#alpn-versions[ALPN boot artifact version that matches the version of your JRE]. -____ - +==== [[alpn-openjdk8-agent]] ==== ALPN agent and OpenJDK 8 @@ -127,7 +126,7 @@ java -javaagent: ... ---- [NOTE] -____ +==== The Jetty ALPN agent works with any Java 8 version. It is _required_ if you use an OpenJDK version up to `1.8.0_242` included, and it is _optional_ if you use an OpenJDK version equal or greater than `1.8.0_252`. @@ -135,8 +134,7 @@ OpenJDK version equal or greater than `1.8.0_252`. The Jetty ALPN agent can be left on the command line even when using an OpenJDK version equal or greater than `1.8.0_252` but we recommend to remove it from the command line when you use OpenJDK `1.8.0_252` or later. -____ - +==== [[alpn-conscrypt]] ==== ALPN and Conscrypt @@ -167,12 +165,11 @@ This jar contains a `Fragment-Host` directive that ensures the ALPN classes will You can download the https://repo1.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-alpn/[jetty-osgi-alpn jar] from Maven Central. [NOTE] -____ +==== OSGi *requires* a `ServiceLoader` implementation for Jetty to function properly. OSGi leverages http://aries.apache.org/modules/spi-fly.html[Apache Aries SPI Fly] for this functionality. You can read more about OSGi and `ServiceLoader` http://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html[here.] -____ - +==== [[alpn-troubleshooting]] ==== ALPN Troubleshooting diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc index ad21d32013e0..bb8489256689 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations.adoc @@ -120,12 +120,11 @@ By default Jetty will call them in the following order: As is the case with annotation scanning, the link:#using-extra-classpath-method[extraClasspath] is fully considered for `ServletContainerInitializer` callbacks. `ServletContainerInitializer` derived from a classes directory on the `extraClasspath` and jars from an `extraClasspath` for the webapp are called in step 2 and 3, respectively. [NOTE] -____ +==== As of Jetty-9.4.4, unless the `web.xml` is version 3.0 or greater, only `ServletContainerInitializers` that are on the container classpath will be discovered. Users wishing to use `ServletContainerInitializers` from within the webapp with older versions of `web.xml` must either upgrade their `web.xml` version, or call `WebAppContext.setConfigurationDiscovered(true)` either programmatically or in xml. Upgrading the `web.xml` version is preferable. -____ - +==== ===== Controlling the order of ServletContainerInitializer invocation If you need `ServletContainerInitializer` classes called in a specific order that is different from that outlined above, you can use the link:#context_attributes[context attribute] `org.eclipse.jetty.containerInitializerOrder`. diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc index f81b894aec7c..e11fd4240be5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc @@ -35,10 +35,9 @@ This class is a useful template to either extend and embrace or simply provide a There is also an link:#error-handler[Error Handler] that services errors related to the servlet api specification, so it is best to not get the two confused. _[NOTE] -____ +==== The `DefaultHandler` will also handle serving out the `flav.ico` file should a request make it through all of the other handlers without being resolved. -_____ - +_==== [source, java] ---- Server server = new Server(8080); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc index 312dff16e504..987553af2c3e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/gzip-filter.adoc @@ -38,11 +38,10 @@ The `GzipHandler` can be added to the entire server by enabling the `gzip.mod` m It may also be added to individual contexts in a context xml file. [NOTE] -____ +==== Jetty 9 only compresses using GZip. Using deflate HTTP compression is not supported and will not function. -____ - +==== [[gzip-filter-rules]] ==== Gzip Rules @@ -64,12 +63,10 @@ The `GzipHandler` installs an output interceptor which passes through to the `De If the content served by `DefaultServlet` is already compressed, the `GzipHandler` does nothing; if it is not compressed, the content is compressed on-the-fly. [NOTE] -____ +==== Automatic precompression by the `DefaultServlet` can be configured. Read more about the `DefaultServlet` link:#default-servlet[here.] -____ - - +==== [[gzip-filter-init]] ==== Gzip Configuration diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc index 078249693104..07ada8897660 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/header-filter.adoc @@ -51,10 +51,9 @@ This filter will perform the following actions on each response: * Add a Date header with the current system time. [NOTE] -____ +==== Each action must be separated by a comma. -____ - +==== [source, xml] ---- diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc index 5b2e11efbef3..87bd303edd31 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/resource-handler.adoc @@ -32,15 +32,13 @@ This handler will serve static content and handle If-Modified-Since headers and is suitable for simple serving of static content. [IMPORTANT] -____ +==== There is no caching done with this handler, so if you are looking for a more fully featured way of serving static content look to the xref:default-servlet[]. -____ - +==== [NOTE] -____ +==== Requests for resources that do not exist are let pass (Eg no 404's). -____ - +==== ==== Improving the Look and Feel The resource handler has a default stylesheet which you can change by calling `setStyleSheet(String location)` with the location of a file on the system that it can locate through the resource loading system. diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index 9c8567543d4b..59b3ff0b24d3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -37,9 +37,9 @@ $ java -jar start.jar --add-to-start=rewrite .... _[NOTE] -____ +==== If you are running the standard Jetty distribution with the sample test webapp, there will be a demo of the rewrite module at http://localhost:8080/test/rewrite/ -_____ +==== ==== Usage diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc index ac0c916470ef..acfc429b00a7 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc @@ -43,10 +43,10 @@ $ java -jar {$jetty.home}/start.jar --add-to-start=stats In addition to these, the `SessionHandler` and `DefaultSessionCache` classes collect statistics for sessions. These statistics are enabled by default and are accessible via JMX interface. -_[NOTE] -____ +[NOTE] +==== To view statistics, you have to be able to connect to Jetty using either JConsole or some other JMX agent. See xref:using-jmx[] for more information. -_____ +==== [[request-statistics]] ==== Request Statistics diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index 9fb9904fbdf7..37917b810dc1 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -42,11 +42,10 @@ $ sudo apt-get install haproxy Alternatively you can download the HAProxy source code and build it on your environment by following the README bundled with the HAProxy source code tarball. [NOTE] -____ +==== HAProxy supports ALPN only if built with OpenSSL 1.0.2 or greater. Use `haproxy -vv` to know with which OpenSSL version HAProxy has been built. -____ - +==== [[http2-haproxy-ssl]] ==== Setup SSL for HAProxy @@ -177,12 +176,11 @@ $ java -jar $JETTY_HOME/start.jar jetty.http.host=127.0.0.1 jetty.http.port=8282 Now you can browse https://domain.com/async-rest (replace `domain.com` with your own domain, or with `localhost`, to make this example work). [NOTE] -____ +==== You want the Jetty connector that listens on port 8282 to be available only to HAProxy, and not to remote clients. For this reason, you want to specify the `jetty.http.host` property on the command line (or in `start.ini`/ `start.d/http.ini` to make this setting persistent) to bind the Jetty connector only on the loopback interface (127.0.0.1), making it available to HAProxy but not to remote clients. If your Jetty instance runs on a different machine and/or on a different (sub)network, you may want to adjust both the back-end section of the HAProxy configuration file and the `jetty.http.host` property to match accordingly. -____ - +==== Browsers supporting HTTP/2 will connect to HAProxy, which will decrypt the traffic and send it to Jetty. Likewise, HTTP/1.1 clients will connect to HAProxy, which will decrypt the traffic and send it to Jetty. diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 1e1c318a9f1d..74ecbead31ac 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -54,11 +54,10 @@ The common properties associated with connectors (host,port, timeouts, etc.) can These properties are instantiated in the associated XML files: `${jetty.home}/etc/jetty-http.xml`; `${jetty.home}/etc/jetty-ssl.xml`, plus the SSL keystore is instantiated in `${jetty.home}/etc/jetty-ssl-context.xml`. [NOTE] -____ +==== If you are planning to edit XML files, make sure to copy them to your `{$jetty.base}/etc/` directory before doing so. The XML files that come with the Jetty distribution should *not* be modified directly. -____ - +==== HTTP/2 specific properties can be set in the module ini files: `${jetty.base}/start.d/http2.ini` and `${jetty.base}/start.d/http2c.ini`, which are instantiated in the associated XML files: `${jetty.home}/etc/jetty-http2.xml`; `${jetty.home}/etc/jetty-http2c.xml`, respectively. Currently there are very few HTTP/2 configuration properties and the default values are reasonable: diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc index dc0bfda8ef50..88779fa0050e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/introduction.adoc @@ -26,11 +26,10 @@ The requirements for running HTTP/2 are JDK 8 or greater, and typically also ALP A server deployed over TLS (SSL) normally advertises the HTTP/2 protocol via the TLS extension Application Layer Protocol Negotiation link:#alpn[(ALPN)]. [NOTE] -____ +==== To use HTTP/2 in Jetty via a TLS connector you need to add the link:#alpn-starting[ALPN boot jar] in the boot classpath. This is done automatically when using the Jetty distribution's start.jar link:#startup-modules[module system], but must be configured directly otherwise. -____ - +==== [[http2-security-update]] ==== Jetty HTTP/2 Security Update diff --git a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc index ec846d021ff8..833cfc5bbeb6 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc @@ -60,11 +60,10 @@ It should look something like so: image:administration/jmx/images/jconsole1.jpg[image,width=576] [IMPORTANT] -____ +==== If you don't see your Jetty process in the list of processes you can connect to, quickly switch tabs, or close and reopen a new "New Connection" dialog window. This forces JConsole to refresh the list, and recognize your newly-started Jetty process. -____ - +==== Select the start.jar entry and click the "Connect" button. A new JConsole window opens: @@ -95,11 +94,10 @@ It should look something like so: image:administration/jmx/images/jmc1.png[image,width=576] [IMPORTANT] -____ +==== If you don't see your Jetty process in the list of processes you can connect to, quickly switch tabs, or close and reopen a new "New Connection" dialog window. This forces JMC to refresh the list, and recognize your newly-started Jetty process. -____ - +==== Double-click the start.jar entry or right-click the start.jar entry and select "Start JMX Console". A new JMC window opens on the right: diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc index 13dc6cb1518c..2de5e4bd5bc1 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-configuration.adoc @@ -153,11 +153,10 @@ public class MyClass { ---- [NOTE] -____ +==== Careful! When configuring Resources, ensure that the type of object you configure matches the type of object you expect to look up in `java:comp/env`. For database connection factories, this means that the object you register as a Resource _must_ implement the `javax.sql.DataSource` interface. -____ - +==== For more examples of datasource configurations, see xref:jndi-datasource-examples[]. [[configuring-jms-queues-topics-connectionfactories]] @@ -227,11 +226,10 @@ This setup creates an instance of the `org.eclipse.jetty.jndi.factories.MailSess The result is that an application can look up `java:comp/env/mail/Session` at runtime and obtain access to a `javax.mail.Session` that has the necessary configuration to permit it to send email via SMTP. [TIP] -____ +==== You can set the password to be plain text, or use Jetty's link:#configuring-security-secure-passwords[Secure Password Obfuscation] (OBF:) mechanism to make the config file a little more secure from prying eyes. Remember that you cannot use the other Jetty encryption mechanisms of MD5 and Crypt because they do not allow you to recover the original password, which the mail system requires. -____ - +==== [[configuring-xa-transactions]] ==== Configuring XA Transactions diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc index 1bbd57dee422..fb13ed8579bc 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-datasources.adoc @@ -22,10 +22,9 @@ Here are examples of configuring a JNDI datasource for various databases. [NOTE] -____ +==== Read xref:configuring-datasources[] in xref:jndi-configuration[] for more information about configuring datasources. -____ - +==== All of these examples correspond to a `resource-ref` in `web.xml`. [source, xml] @@ -43,10 +42,9 @@ You can configure all JNDI resources in a `jetty.xml` file, a `WEB-INF/jetty-env See the section xref:jndi-where-to-declare[] for more information. [IMPORTANT] -____ +==== You must provide Jetty with the libraries necessary to instantiate the datasource you have configured by putting the corresponding Jar in `JETTY_HOME/lib/ext`. -____ - +==== [[pooling-datasources]] ==== Pooling DataSources diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc index 03f8146d87bd..ef5d11d04f78 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-logging.adoc @@ -35,10 +35,9 @@ IGNORE:: Exception events that you can safely ignore, but useful for some people. You might see this level as DEBUG under some Java logging framework configurations, where it retains the _ignore_ phrase somewhere in the logging. [NOTE] -____ +==== Jetty logging produces no FATAL or SEVERE events. -____ - +==== [[selecting-log-framework]] ==== Selecting the Log Framework @@ -52,11 +51,10 @@ Configure the Jetty logging layer via the `org.eclipse.jetty.util.log.Log` class * If the class `org.slf4j.Logger` exists in server classpath, the Jetty implementation becomes `org.eclipse.jetty.util.log.Slf4jLog`. * If no logger implementation is specified, default to `org.eclipse.jetty.util.log.StdErrLog`. [NOTE] -____ +==== You can create your own custom logging by providing an implementation of the link:{JDURL}org/eclipse/jetty/util/log/Logger.html[Jetty Logger API]. For an example of a custom logger, see link:{GITBROWSEURL}/jetty-util/src/main/java/org/eclipse/jetty/util/log/JavaUtilLog.java[JavaUtilLog.java]. -____ - +==== [[configuring-jetty-stderrlog]] ==== The jetty-logging.properties file diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc index 823ee97c51ac..d83d19140e74 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc @@ -61,11 +61,10 @@ INFO: Base directory was modified The above command will add a new `requestlog.ini` file to your link:#start-vs-startd[`{$jetty.base}/start.d` directory]. [NOTE] -____ +==== By default, request logs are not set to be appended, meaning a the log file is wiped clean upon sever restart. You can change this setting by editing the `requestlog.ini` and un-commenting the line that reads `jetty.requestlog.append=true`. -____ - +==== The equivalent code for embedded usages of Jetty is: [source, java] diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index 6def49d0818e..bffdd9c1ac21 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -48,12 +48,10 @@ INFO : Base directory was modified The default configuration for logging output will create a file `${jetty.base}/logs/yyyy_mm_dd.stderrout.log` which allows configuration of the output directory by setting the `jetty.logs` property. [NOTE] -____ +==== By default, logs are not set to be appended, meaning a the log file is wiped clean upon sever restart. You can change this setting by editing the `console-capture.ini` and un-commenting the line that reads `jetty.console-capture.append=true`. -____ - - +==== Just enabling the `console-capture` will simply output the values of STDERR and STDOUT to a log file. To customize the log further, a module named `logging-jetty` is available to provides a default properties file to configure. As with `console-capture`, you activate the `logging-jetty` on the command line. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc index f4cf1bd544cc..5e6a5a028eae 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc @@ -26,11 +26,10 @@ This example demonstrates how to configuring Jetty for logging to `java.util.logging` via Jetty's own JavaUtilLog implementation. [IMPORTANT] -____ +==== While this is a valid setup, the Jetty project recommends always using the link:#example-logging-java-util-logging[slf4j to java.util.logging configuration] for memory and performance reasons. This native implementation is very non-performant and is not guaranteed to exist in the future. -____ - +==== A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. [source, screen] @@ -79,7 +78,7 @@ In essence, Jetty is now configured to use `org.eclipse.jetty.util.log.JavaUtilL If there any custom `java.util.logging` handlers to be used, put the implementation jar in the `${jetty.base}/lib/logging/` directory and reference them in the `${jetty.base}/resources/logging.properties` file. [NOTE] -____ +==== `java.util.logging` is configured via the `${jetty.base}/resources/logging.properties` file during a valid startup of Jetty. This means that if there is any startup errors that occur before `java.util.logging` is configured, they will likely be lost and/or not routed through your configuration. @@ -88,4 +87,4 @@ Other logging frameworks are more reliable in that they always initialize and co * While it is possible to configure `java.util.logging` sooner, even at JVM startup, the example demonstrated here does not show this technique. For more information consult the official `java.util.logging.LogManager` javadoc http://docs.oracle.com/javase/7/docs/api/java/util/logging/LogManager.html[documentation from Oracle]. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc index 2cfba42288f4..db84b95f0382 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc @@ -74,7 +74,7 @@ In essence, Jetty is now configured to emit its own logging events to slf4j, and If there any custom `java.util.logging` handlers to be used, put the implementation jar in the `${jetty.base}/lib/logging/` directory and reference them in the `${jetty.base}/resources/logging.properties` file. [NOTE] -____ +==== `java.util.logging` is configured via the `${jetty.base}/resources/logging.properties` file during a valid startup of Jetty. This means that if there is any startup errors that occur before `java.util.logging` is configured, they will likely be lost and/or not routed through your configuration. @@ -83,4 +83,4 @@ Other logging frameworks are more reliable in that they always initialize and co * While it is possible to configure `java.util.logging` sooner, even at JVM startup, the example demonstrated here does not show this technique. For more information consult the official `java.util.logging.LogManager` javadoc http://docs.oracle.com/javase/7/docs/api/java/util/logging/LogManager.html[documentation from Oracle]. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc index 41e622de1283..85e2c0675566 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc @@ -25,11 +25,10 @@ It routes all logging events from the web applications to a single configuration The example below shows how to accomplish this with Jetty and Slf4j, using `Logback` to manage the final writing of logs to disk. [IMPORTANT] -____ +==== This mechanism forces all webapps to use the server's configuration for logging, something that isn't 100% appropriate for all webapps. An example would be having Jenkins-CI deployed as an webapp, if you force its logging configuration to the server side, you lose the ability on http://jenkins-ci.org/[Jenkins-CI] to see the logs from the various builds (as now those logs are actually going to the main server log). -____ - +==== This configuration is essentially the multiple logger configuration with added configuration to the deployers to force a `WebAppClassLoader` change to use the server classpath over the webapps classpath for the logger specific classes. The technique used by this configuration is to provide an link:{JDURL}org/eclipse/jetty/deploy/AppLifeCycle.Binding.html[AppLifeCycle.Binding] against the link:{JDURL}/org/eclipse/jetty/deploy/AppLifeCycle.html[`"deploying"`node] that modifies the diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc index b7c8077e6fa8..bdc0c49f6813 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc @@ -35,18 +35,16 @@ To accomplish this configuration a single underlying logging framework should fi This decision guides the rest of the choices about jar files to place on the server classpath. [CAUTION] -____ +==== There MUST NOT be multiple underlying logging frameworks on the classpath. If there are, the Slf4j framework fails to load. -____ - +==== [NOTE] -____ +==== Some third party libraries provide their own implementations of common logging APIs; be careful not to accidentally include an underlying logging framework. For example, if you are using SpringSource you likely have a `com.springsource.org.apache.log4j.jar` along with a `log4j.jar`, which have the same classes in them. In this example, use the `com.springsource.org.apache.log4j.jar` version and exclude the `log4j.jar`, as the SpringSource version includes extra metadata suitable for using SpringSource. -____ - +==== .Slf4j Logging Grid [width="100%",cols="25%,25%,25%,25%",options="header",] |======================================================================= diff --git a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc index db7eca375367..db6ef685425d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc @@ -56,11 +56,10 @@ In fact, the webapp does not have to be a war or even a directory, it can simply .... [NOTE] -____ +==== When using a context xml file, the application being deployed is not even required to be a fully-fledged webapp. It can simply be a Jetty link:#what-is-a-context[context]. -____ - +==== By default, `jetty-runner` implements all Configuration Classes so that users can set up and deploy new instances with as little configuration as possible. If you wish to only implement certain Configuration Classes, they will need to be defined in the context xml for the webapp/context. The default Configuration Classes are: @@ -96,12 +95,10 @@ Just provide the list of context files like so: .... [NOTE] -____ +==== Switched used on the command line override configuration file settings. So, for example, you could set the context path for the webapp inside the context xml file, and use the `--path` switch to override it on the command line. -____ - - +==== ===== Changing the Default Port By default the `jetty-runner` will listen on port 8080. @@ -252,13 +249,11 @@ Here's an example of configuring a single extra classes dir: .... [NOTE] -____ +==== When using the `--jar` and/or `--lib` arguments, by default these will *not* be inspected for `META-INF` information such as `META-INF/resources`, `META-INF/web-fragment.xml`, or `META-INF/taglib.tld`. If you require these jar files inspected you will need to define the link:https://www.eclipse.org/jetty/documentation/current/configuring-webapps.html#webapp-context-attributes[jar pattern in your context xml file]. Jetty-Runner automatically provides and appends a suitable pattern for jtsl taglibs (this pattern is different than the one in the standard Jetty distribution). -____ - - +==== ===== Gathering Statistics If statistics gathering is enabled, then they are viewable by surfing to the context `/stats`. You may optionally protect access to that context with a password. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc index 4b9ea19b2882..3fe21cfbd057 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-file-system.adoc @@ -49,11 +49,10 @@ By default Session files will be saved to this directory. In addition to adding these modules to the classpath of the server, several ini configuration files were added to the `${jetty.base}/start.d` directory. [NOTE] -____ +==== Session data is now only loaded when requested. Previous functionality such as `setLazyLoad` has been removed. -____ - +==== ==== Configuring File System Session Properties Opening `start.d/session-store-file.ini` will show a list of all the configurable options for the file system session module: @@ -81,9 +80,9 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc index 9f388375c965..9943576ab3d3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc @@ -207,10 +207,9 @@ When the `--add-to-start` argument was added to the command line the first time, In addition to adding these modules to the classpath of the server it also added the respective configuration files to the `${jetty.base}start.d` directory. [NOTE] -____ +==== If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. -____ - +==== ==== Configuring GCloud Session Properties Opening the `start.d/session-store-gcloud.ini` will display a list of all the configurable properties for the Google Cloud DataStore module: @@ -251,13 +250,12 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ - +==== jetty.session.gcloud.maxRetries:: Maxmium number of tries to connect to GCloud DataStore to write sessions. jetty.session.gcloud.backoffMs:: diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc index 779a624b22b3..f53fff3dd74d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-hazelcast.adoc @@ -65,10 +65,9 @@ It also downloaded the needed Hazelcast-specific jar files and created a directo In addition to adding these modules to the classpath of the server it also added several ini configuration files to the `${jetty.base}/start.d` directory. [NOTE] -____ +==== If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. -____ - +==== ==== Configuring Hazelcast Remote Properties Opening the `start.d/session-store-hazelcast-remote.ini` will show a list of all the configurable options for the Hazelcast module: @@ -104,15 +103,14 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. Be aware using the `scavengeZombies` option that if your session attributes contain classes from inside your webapp (or jetty classes) then you will need to put these classes onto the classpath of all of your hazelcast instances. -____ - +==== ==== Configuring Embedded Hazelcast Clustering During testing, it can be helpful to run an in-process instance of Hazelcast. @@ -187,11 +185,11 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. Be aware using the `scavengeZombies` option that if your session attributes contain classes from inside your webapp (or jetty classes) then you will need to put these classes onto the classpath of all of your hazelcast instances. In the cast of embedded hazelcast, as it is started before your webapp, it will NOT have access to your webapp's classes - you will need to extract these classes and put them onto the jetty server's classpath. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc index 84dfeab4c225..47c039325212 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-infinispan.adoc @@ -64,10 +64,9 @@ It also downloaded the needed Infinispan-specific jar files and created a direct In addition to adding these modules to the classpath of the server it also added several ini configuration files to the `${jetty.base}/start.d` directory. [NOTE] -____ +==== If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. -____ - +==== ==== Configuring Inifinspan Remote Properties Opening the `start.d/session-store-infinispan-remote.ini` will show a list of all the configurable options for the JDBC module: @@ -101,13 +100,12 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ - +==== ==== Configuring the Remote Infinispan Query Module Enabling this module allows jetty to search infinispan for expired sessions that are no longer being referenced by any jetty node. @@ -127,10 +125,9 @@ During testing, it can be helpful to run an in-process instance of Infinispan. To enable this you will first need to enable the `session-store-infinispan-embedded` link:#startup-modules[module] for your link:#startup-base-and-home[Jetty base] using the `--add-to-start` argument on the command line. [IMPORTANT] -____ +==== If you are running Jetty with JDK 9 or greater, enable `session-store-infinispan-embedded-910.mod` instead. -____ - +==== [source, screen] ---- java -jar ../start.jar --add-to-start=session-store-infinispan-embedded @@ -186,14 +183,12 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ - - +==== ==== Configuring Inifinspan Embedded Query Similarly to the `session-store-infinispan-remote` module, the `session-store-infinispan-embedded` module has an adjunct module `infinispan-embedded-query`, which when enabled, will allow jetty to detect and properly scavenge defunct sessions stranded in infinispan. @@ -214,10 +209,9 @@ See issue https://github.com/eclipse/jetty.project/issues/2919 for more backgrou We have provided a conversion program which will convert any sessions stored in Infinispan to the new format. [IMPORTANT] -____ +==== We recommend that you backup your stored sessions before running the conversion program. -____ - +==== How to use the converter: [source, screen] diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc index 1f504cb72c10..5f0091ed938a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-jdbc.adoc @@ -104,13 +104,12 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ - +==== db-connection-type:: Set to either `datasource` or `driver` depending on the type of connection being used. jetty.session.jdbc.datasourceName:: diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc index 36ee2c5709bf..d475a6e1e813 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-mongodb.adoc @@ -62,10 +62,9 @@ It also downloaded the needed Mongo-specific jar file and created a directory na In addition to adding these modules to the classpath of the server, several ini configuration files were added to the `${jetty.base}/start.d` directory. [NOTE] -____ +==== If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated `${jetty.base}/lib/` directory and use the `--skip-file-validation=` command line option to prevent errors when starting your server. -____ - +==== ==== Configuring MongoDB Session Properties Opening the `start.d/session-store-mongo.ini` will show a list of all the configurable options for the MongoDB module: @@ -98,13 +97,12 @@ By default whenever the last concurrent request leaves a session, that session i A non-zero value means that the `SessionDataStore` will skip persisting the session if only the access time changed, and it has been less than `savePeriod` seconds since the last time the session was written. + [NOTE] -____ +==== Configuring `savePeriod` is useful if your persistence technology is very slow/costly for writes. In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to `savePeriod` seconds. This allows the possibility that a node may prematurely expire the session, even though it is in use by another node. Thorough consideration of the `maxIdleTime` of the session when setting the `savePeriod` is imperative - there is no point in setting a `savePeriod` that is larger than the `maxIdleTime`. -____ - +==== jetty.session.mongo.dbName:: Name of the database in Mongo used to store the Session collection. jetty.session.mongo.collectionName:: @@ -124,8 +122,8 @@ The string defining the MongoURI value, such as `mongodb://[username:password@]h More information on how to format the MongoURI string can be found in the https://docs.mongodb.com/manual/reference/connection-string/[official documentation for mongo.] + [NOTE] -____ +==== You will only use *one* `connection-type` at a time, `address` or `uri`. If both are utilized in your `session-store-mongo.ini`, only the last `connection-type` configured in the file will be used. By default, the `connection-type` of `address` is used. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc index 367b36d7bdfe..dba25fa8cab5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-sessioncache.adoc @@ -48,10 +48,9 @@ Values are: * >= 1 : any positive number is the time in seconds after which a session that is in the cache but has not experienced any activity will be evicted [NOTE] -____ +==== If you are not using a `SessionDataStore` that persists sessions, be aware that evicted sessions will be lost. -____ - +==== jetty.session.saveOnInactiveEvict:: Boolean, default `false`. Controls whether a session will be saved to the `SessionDataStore` just prior to its eviction. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc index bbd84fc41167..85d358da4604 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-usecases.adoc @@ -89,7 +89,7 @@ Below is an example of how you could configure a the link:#configuring-sessions- The example above functions in either a `jetty-web.xml` file or a link:#using-basic-descriptor-files[context xml descriptor file.] [NOTE] -____ +==== If you explicitly configure the `SessionCache` and `SessionDataStore` for a `SessionHandler` in a context xml file or `jetty-web.xml` file, any session modules you already have enabled are ignored. So, for example, if you had enabled the `session-store-gcloud module` for your sever, you could force a particular webapp to use the `FileSessionDataStore` by explicitly configuring it in either a context xml file or a `jetty-web.xml` file as shown above. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc index 1eef916fb412..b9b63c98f75c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/custom-modules.adoc @@ -241,7 +241,7 @@ INFO : Base directory was modified ---- [NOTE] -____ +==== It is important to keep in mind that when activating a dependency, Jetty does not just go one layer down. If a dependent module also has dependencies they too will be enabled. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index d734cd5125fc..fffc3dff8300 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -217,10 +217,9 @@ Disable the [files] section validation of content in the `${jetty.base}` directo Useful for modules that have downloadable content that is being overridden with alternatives in the `${jetty.base}`` directory. [CAUTION] -____ +==== This advanced option is for administrators that fully understand the configuration of their `${jetty.base}` and are willing to forego some of the safety checks built into the jetty-start mechanism. -____ - +==== --approve-all-licenses:: Approve all license questions. Useful for enabling modules from a script that does not require user interaction. @@ -267,10 +266,9 @@ Here's how to use the Jetty distribution, leveraging `start.jar`, to perform a s .... [NOTE] -____ +==== To perform a graceful shutdown of Jetty, the `stats` link:#startup-modules[module] *must* be enabled. -____ - +==== ===== Advanced Commands --lib=:: diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc index 9902579b4f72..5b6974dcb18f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc @@ -31,11 +31,10 @@ Jetty Home:: * This is the location for the Jetty distribution binaries, default XML IoC configurations, and default module definitions. [IMPORTANT] -____ +==== Jetty Home should always be treated as a standard of truth. All configuration modifications, changes and additions should be made in the appropriate Jetty Base directory. -____ - +==== [[base-vs-home-resolution]] Potential configuration is resolved from these 2 directory locations. @@ -323,7 +322,7 @@ The following demonstrates this by allowing default discovery of `${jetty.home}` .... [IMPORTANT] -____ +==== Be aware of the `user.dir` system property, as it can only be safely set when the JVM starts and many 3rd party libraries (especially logging) use this system property. It is strongly recommended that you sit in the directory that is your desired `${jetty.base}` when starting Jetty to have consistent behavior and use of the `user.dir` system property. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc index 5892333c841e..914b44744c2c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc @@ -43,10 +43,9 @@ Of special note, there are 2 structural modules defined to ease some of this for Logging libraries often have classpath lookup of their configuration files (eg: `log4j.properties`, `log4j.xml`, `logging.properties`, and `logback.xml`), so this would be the ideal setup for this sort of configuration demand. [NOTE] -____ +==== Both the `ext` and `resources` modules declare relative paths that follow link:#base-vs-home-resolution[Jetty Base and Jetty Home path resolution rules]. -____ - +==== ==== Interrogating the Server Classpath The Jetty `start.jar` has the ability to resolve the classpath from the command line, modules and configuration, and to list the classpath entries it will use to start jetty. diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc index 25328477c1e5..280040057839 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc @@ -26,11 +26,10 @@ Modules allow flexibility for implementations and their plug-and-play nature mak [[enabling-modules]] ==== Enabling Modules [TIP] -____ +==== The default distribution has a co-mingled `${jetty.home}` and `${jetty.base}` where the directories for `${jetty.home}` and `${jetty.base}` point to the same location. It is highly encouraged that you learn about the differences in link:#startup-base-and-home[Jetty Base vs Jetty Home] and take full advantage of this setup. -____ - +==== Enabling a module is a simple process: simply add the `--add-to-start=,,...etc.` syntax on the command line. Doing this will enable the specified module and any dependent modules. @@ -149,13 +148,12 @@ If your server setup is using a centralized ini configuration, you will edit the If you have elected to manage each module within it's own ini file, you can find these files in the `${jetty.base}/start.d` directory. [IMPORTANT] -____ +==== It is important that you *do not* modify the module files in the `$JETTY_HOME/modules` directory. $JETTY_HOME should always remain a standard of truth. If you want to make a change to an actual module file (not the values in its `ini-template`), either edit its associated `ini` file in the `$JETTY_BASE/start.d` directory or make a copy of the desired module file and copy it to the `$JETTY_BASE` directory and edit it there. The start.jar reads local `$JETTY_BASE/modules` files (if they exist) before scanning `$JETTY_HOME`. -____ - +==== When a module is activated, a number of properties are set by default. To view these defaults, open up the associated ini file. Listed in the ini file is the associated module file and any properties that can be set. @@ -216,11 +214,10 @@ Modules are sorted by the value in the `[tags]` section of the associated `.mod` If there are multiple entries in the `[tags]` section, it sorts by the first tag in the list. [NOTE] -____ +==== By default, the `--list-modules` command line argument shows all modules that do not include `internal` in the `[tags]` section of the associated `.mod` file. If you would like to see *all* modules, use `--list-all-modules` -____ - +==== Here's an example of the `--list-modules` command: include::screen-list-modules.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index ae17311d7194..05f4c062661d 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -290,12 +290,11 @@ Every module has their own set of configuration options, and reviewing them all For additional information on the module system, please refer to our documentation on link:#startup-modules[Startup Modules]. [NOTE] -____ +==== Editing these module files is the recommended way to edit the configuration of your server. Making changes to the associated Jetty XML file for connectors is *not* recommended, and is for advanced users only. If you do wish to edit Jetty XML, please see our section on managing link:#[Jetty Home and Jetty Base] to ensure your Jetty Home remains a standard of truth for your implementation. -____ - +==== ==== Limiting Connections Jetty also provides the means by which to limit connections to the server and/or contexts. @@ -485,12 +484,11 @@ Thus Intermediaries typically implement one of several de facto standards to com Jetty supports the `X-Forwarded-For` header and the http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt[Proxy Protocol] mechanisms as described below. [NOTE] -____ +==== The XML files in the Jetty distribution contain commented out examples of both the `X-Forwarded-For` and http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt[Proxy Protocol] mechanisms. When using those examples, it is recommended that the XML in the Jetty distribution is not edited. Rather the files should be copied into a Jetty base directory and then modified. -____ - +==== ===== X-Forward-for Configuration The `X-Forwarded-for` header and associated headers are a de facto standard where intermediaries add HTTP headers to each request they forward to describe the originating connection. diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index 8c652efe78e6..804605f2287a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -44,12 +44,11 @@ All CBC based ciphers are supported since Java 7, the new GCM modes are supporte TLS v1.0, v1.1 and SSL v3 are no longer supported by default. If your Jetty implementation requires these protocols for legacy support, they can be enabled manually. [NOTE] -____ +==== Once TLS v1.3 is released, there will be no workaround available for TLS v1.0 or v1.1. Plans for TLS v1.3 include banning ciphers with known vulnerabilities from being present at any level. It is recommended to upgrade any clients using these ciphers as soon as possible or face being locked into a outdated version of Jetty, Java or even OS. -____ - +==== By default, Jetty excludes these ciphers in the link:{GITBROWSEURL}/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java#L249-L256[`SslContextFactory`.] You can re-enable these by re-declaring the ciphers you want excluded in code: @@ -116,12 +115,11 @@ $ keytool -keystore keystore -alias jetty -genkey -keyalg RSA ---- [NOTE] -____ +==== The DSA key algorithm certificate produces an error after loading several pages. In a browser, it displays a message "Could not establish an encrypted connection because certificate presented by localhost as an invalid signature." The solution is to use RSA for the key algorithm. -____ - +==== This command prompts for information about the certificate and for passwords to protect both the keystore and the keys within it. The only mandatory response is to provide the fully qualified host name of the server at the "first and last name" prompt. For example: @@ -267,12 +265,11 @@ You need to enter the details for the certificate again. Once a CA has sent you a certificate, or if you generated your own certificate without `keytool`, you need to load it into a JSSE keystore. [NOTE] -____ +==== You need both the private key and the certificate in the JSSE keystore. You should load the certificate into the keystore used to generate the CSR with `keytool`. If your key pair is not already in a keystore (for example, because it has been generated with OpenSSL), you need to use the PKCS12 format to load both key and certificate (see link:#loading-keys-and-certificates-via-pkcks12[PKCKS12 Keys &Certificates]). -____ - +==== [[loading-certificates-with-keytool]] ====== Loading Certificates with keytool @@ -336,10 +333,9 @@ $ openssl pkcs12 -export -inkey example.key -in cert-chain.txt -out example.pkcs ---- [NOTE] -____ +==== The order of certificates must be from server to rootCA, as per link:https://www.ietf.org/rfc/rfc2246.txt[RFC2246 section 7.4.2.] -____ - +==== OpenSSL asks for an __export password__. A non-empty password is required to make the next step work. Load the resulting PKCS12 file into a JSSE keystore with `keytool`: @@ -379,10 +375,9 @@ image::configuring/connectors/images/certificate-chain.png[title="Certificate ch .... [NOTE] -____ +==== Both the `Intermediary CA certificate` and `Root CA certificate` are optional. -____ - +==== [source%nowrap,plain,linenums] ---- $ cd $JETTY_BASE @@ -687,10 +682,9 @@ While the `SslContextFactory` can operate without a keystore (this mode is most setKeyStorePath:: The configured keystore to use for all SSL/TLS in configured Jetty Connector (or Client). [NOTE] -____ +==== As a keystore is vital security information, it can be desirable to locate the file in a directory with *very* restricted access. -____ - +==== setKeyStorePassword:: The keystore password may be set here in plain text, or as some measure of protection from casual observation, it may be obfuscated using the link:{JDURL}/org/eclipse/jetty/util/security/Password.html[Password] class. setTrustStorePath:: @@ -705,18 +699,16 @@ setExcludeProtocols / setIncludeProtocols:: This allows for the customization of the selected Protocols that will be used by SSL/TLS. [NOTE] -____ +==== When working with Includes / Excludes, it is important to know that *Excludes will always win.* The selection process is to process the JVM list of available Cipher Suites or Protocols against the include list, then remove the excluded ones. Be aware that each Include / Exclude list has a Set method (replace the list) or Add method (append the list). -____ - +==== [CAUTION] -____ +==== The keystore and truststore passwords may also be set using the system properties: `org.eclipse.jetty.ssl.keypassword` `org.eclipse.jetty.ssl.password`. This is _not_ a recommended usage. -____ - +==== [[conscrypt]] ==== Conscrypt SSL @@ -761,27 +753,24 @@ You can get them by obtaining an instance of SSLEngine and call `getSupportedCip Tools like https://www.ssllabs.com/[ssllabs.com] might report slightly different names which will be ignored. [IMPORTANT] -____ +==== It is important to stay up-to-date with the latest supported cipher suites. Be sure to consult Oracle's link:https://java.com/en/jre-jdk-cryptoroadmap.html[JRE and JDK Cryptographic Roadmap] frequently for recent and upcoming changes to supported ciphers. -____ - +==== [IMPORTANT] -____ +==== It's recommended to install the Java Cryptography Extension (JCE) Unlimited Strength policy files in your JRE to get full strength ciphers such as AES-256. The files can be found on the http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java download page]. Just overwrite the two present JAR files in `/lib/security/`. -____ - +==== Both `setIncludeCipherSuites` and `setExcludeCipherSuites` can be fed by the exact cipher suite name used in the JDK or by using regular expressions. If you have a need to adjust the Includes or Excludes, then this is best done with a custom XML that configures the `SslContextFactory` to suit your needs. [NOTE] -____ +==== Jetty *does* allow users to enable weak/deprecated cipher suites (or even no cipher suites at all). By default, if you have these suites enabled warning messages will appear in the server logs. -____ - +==== To do this, first create a new `${jetty.base}/etc/tweak-ssl.xml` file (this can be any name, just avoid prefixing it with "jetty-"). [source, xml] @@ -822,17 +811,15 @@ $ ---- [NOTE] -____ +==== The default `SslContextFactory` implementation applies the latest SSL/TLS recommendations surrounding vulnerabilities in SSL/TLS. Check the release notes (the `VERSION.txt` found in the root of the Jetty Distribution, or the http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.eclipse.jetty%22%20AND%20a%3A%22jetty-project%22[alternate (classified 'version') artifacts for the `jetty-project` component] on Maven Central) for updates. The Java JVM also applies exclusions at the JVM level and, as such, if you have a need to enable something that is generally accepted by the industry as being insecure or vulnerable you will likely have to enable it in *both* the Java JVM and your Jetty configuration. -____ - +==== [TIP] -____ +==== You can enable the `org.eclipse.jetty.util.ssl` named logger at `DEBUG` level to see what the list of selected Protocols and Cipher suites are at startup of Jetty. -____ - +==== Additional Include / Exclude examples: *Example*: Include all ciphers which support https://en.wikipedia.org/wiki/Forward_secrecy[Forward Secrecy] using regex: @@ -885,10 +872,9 @@ Additional Include / Exclude examples: ---- [NOTE] -____ +==== Note that disabling SSLv3 prevents very old browsers like Internet Explorer 6 on Windows XP from connecting. -____ - +==== *Example*: TLS renegotiation could be disabled too to prevent an attack based on this feature. [source, xml] diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc index d1716a691eb7..1a484ffede92 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/setting-form-size.adoc @@ -57,12 +57,11 @@ Set an attribute in `jetty.xml` on the Server instance for which you want to mod ---- [IMPORTANT] -____ +==== It is important to remember that you should *not* modify the XML files in your `$JETTY_HOME`. If you do for some reason feel you want to change the way an XML file operates, it is best to make a copy of it in your `$JETTY_BASE` in an `/etc` directory. Jetty will always look first to the `$JETTY_BASE` for configuration. -____ - +==== ==== For All Apps in the JVM Use the system property `org.eclipse.jetty.server.Request.maxFormContentSize`. diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc index 29bd26d89ba0..b1aa864338dd 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc @@ -136,11 +136,10 @@ context.setAttribute("javax.servlet.context.tempdir", "/some/dir/foo"); Once a temporary directory has been created by either of these methods, a file instance for it is set as the value of the `javax.servlet.context.tempdir` attribute of the web application. [NOTE] -____ +==== Be wary of setting an explicit temp directory if you are likely to change the jars in WEB-INF/lib between redeployments. There is a JVM bug concerning link:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4774421[caching of jar contents.] -____ - +==== ===== Setting the Temp Directory on the Command Line You can set the location of the temp directory on the command line when Jetty starts up in two ways. First is the most straightforward, simply add it to your command line when starting Jetty. @@ -205,6 +204,6 @@ By default, Jetty will *not* persist the temp directory. To configure Jetty to keep it, use link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html[WebAppContext.setPersistTempDirectory(true)]. [NOTE] -____ +==== Be aware that if you call `setPersistTempDirectory(true)`, but let Jetty create a new temp directory each time (i.e. you do NOT set an explicit temp directory), then you will accumulate temp directories in your chosen temp directory location. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc index 388eb06ded0e..979660f7027c 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/configuring-specific-webapp-deployment.adoc @@ -72,10 +72,9 @@ If the home path for an application needs altered, only the system property need This is useful if the version of an app is frequently changed. [NOTE] -____ +==== To ensure your `web.xml` files are validated, you will need to set the `validateXml` attribute to true as described link:#jetty-xml-dtd[here.] -____ - +==== [[configuring-advanced-descriptor-files]] ==== Configuring Advanced Descriptor Files diff --git a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc index 14e3344bd238..154bda85545b 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/deploying/quickstart-webapp.adoc @@ -82,10 +82,9 @@ generateOrigin:: Note that origin attributes will also be generated if debug log level is enabled. [NOTE] -____ +==== If you are using Spring-Boot you must set `generateOrigin` to true. -____ - +==== The origin is either a descriptor eg web.xml,web-fragment.xml,override-web.xml file, or an annotation eg @WebServlet. For xml validation each attribute must be unique, and therefore an integer counter is appended to each value. Some examples of elements with origin attribute information are: diff --git a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc index e6c609d99c77..f88515d0b7f2 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/jsp/configuring-jsp.adoc @@ -64,10 +64,9 @@ For example, suppose you have precompiled your JSPs with the custom package pref ---- [NOTE] -____ +==== Both Jetty Maven plugins - link:#jetty-jspc-maven-plugin[jetty-jspc-maven-plugin] and the link:#jetty-maven-plugin[jetty-maven-plugin] - will only use Apache Jasper. -____ - +==== [[compiling-jsps]] ===== Apache JSP Container @@ -162,10 +161,9 @@ This page lists the configuration parameters, their meanings, and their default Set all parameters on the `org.apache.jasper.servlet.JspServlet` instance defined in the link:#webdefault-xml[`webdefault.xml`] file. [NOTE] -____ +==== Be careful: for all of these parameters, if the value you set doesn't take effect, try using all lower case instead of camel case, or capitalizing only some of the words in the name, as JSP is inconsistent in its parameter naming strategy. -____ - +==== [[modifying-configuration]] ==== Modifying Configuration diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc index 883803144f77..a2b36c44e44a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc @@ -78,10 +78,9 @@ then you need to create a `JAASLoginService` with the matching realm name of "Te The `LoginModuleName` must match the name of your LoginModule as declared in your login module configuration file (see <>). [CAUTION] -____ +==== The name of the realm-name that you declare in `web.xml` must match *exactly* the `Name` field of your `JAASLoginService`. -____ - +==== You can declare your `JAASLoginService` in a couple of different ways: 1. If you have more than one webapp that you would like to use the same security infrastructure, then you can declare your `JAASLoginService` in a top-level Jetty xml file as a bean that is added to the `org.eclipse.jetty.server.Server`. @@ -135,10 +134,9 @@ xyz { ---- [CAUTION] -____ +==== It is imperative that the application name on the first line is *exactly* the same as the `LoginModuleName` of your `JAASLoginService`. -____ - +==== You may find it convenient to name this configuration file as `etc/login.conf` because, as we will see below, some of the wiring up for JAAS has been done for you. ===== Step 3 @@ -157,11 +155,10 @@ java -jar start.jar --add-to-start=jaas .... [NOTE] -____ +==== The top level of the distribution does not have the JAAS module enabled by default. However, there are several link:#demo-webapps-base[demo webapps] - including a JAAS webapp - available in the `demo-base` directory of the distribution which has pre-enabled the JAAS module. -____ - +==== Now you will have a file named `start.d/jaas.ini`, which contains: [source,ini] @@ -221,12 +218,11 @@ As `LoginModules` are free to use their own implementation of the JAAS Principal * link:{JDURL}/org/eclipse/jetty/jaas/spi/LdapLoginModule.html[`org.eclipse.jetty.jaas.ldap.LdapLoginModule`] [NOTE] -____ +==== Passwords can be stored in clear text, obfuscated or checksummed. The class link:{JDURL}/org/eclipse/jetty/util/security/Password.html[`org.eclipse.jetty.util.security.Password`] should be used to generate all varieties of passwords,the output from which can be put in to property files or entered into database tables. See more on this under the Configuration section on link:#configuring-security-secure-passwords[securing passwords]. -____ - +==== ===== JDBCLoginModule The `JDBCLoginModule` stores user passwords and roles in a database that are accessed via JDBC calls. diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc index e6e0d21c5387..2879a356b729 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc @@ -456,10 +456,9 @@ If you want to start using a new module: This adds the `--module=` lines and associated properties (the parameterized values mentioned above), to your `start.ini`. [IMPORTANT] -____ +==== Do not edit the modules and XML files in the `${jetty.home}` directory; there is no need to be moving or copying them unless you want to make your own modules or override the behavior of an existing module. -____ - +==== Notice that your `${jetty.base}/start.ini` has no references to the XML files. That's because the module system and its graph of dependencies now dictate all of the XML files, and their load order. diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc index dd24ab217250..f886c5fe2bf7 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc @@ -67,10 +67,9 @@ $ echo -n password | md5sum .... [IMPORTANT] -____ +==== When using the `DIGEST` method in tandem with an MD5 hash, you must hash the entire `user:realm:password` string or you will encounter issues with authenticating. -____ - +==== [source, screen] .... $ java -cp ../lib/jetty-util-9.4.7.v20170914.jar org.eclipse.jetty.util.security.Password username username:realm:password @@ -99,10 +98,9 @@ me:CRYPT:me/ks90E221EY ---- [TIP] -____ +==== Don't forget to also copy the OBF:, MD5: or CRYPT: prefix on the generated password. It will not be usable by Jetty without it. -____ - +==== You can also use obfuscated passwords in Jetty xml files where a plain text password is required. Here's an example setting the password for a JDBC Datasource with obfuscation: diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc index e53b315c2cb3..fada31b5da67 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/serving-aliased-files.adoc @@ -73,10 +73,9 @@ AllowSymLinkAliasChecker:: Approve Aliases using the java-7 `Files.readSymbolicLink(path)` and `Path.toRealPath(...)` APIs to check that aliases are valid symbolic links. [NOTE] -____ +==== By default, Jetty serves aliased files for implementations running on UNIX as Contexts are created with both the {JDURL}/org/eclipse/jetty/server/handler/AllowSymLinkAliasChecker.html[`AllowSymLinkAliasChecker`] and {JDURL}/org/eclipse/jetty/server/handler/ContextHandler.ApproveNonExistentDirectoryAliases.html[`ApproveNonExistentDirectoryAliases`] alias checkers. -____ - +==== An application is free to implement its own Alias checking. Alias Checkers can be installed in a context via the following XML used in a context deployer file or `WEB-INF/jetty-web.xml`: diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc index 10a2b62dba49..ddd6cbb8c82a 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/setting-port80-access-for-non-root-user.adoc @@ -76,12 +76,11 @@ The `http.mod` is enabled by default in the distribution, while the link:#quicks ---- + [NOTE] -____ +==== The --add-to-start command will enable the setuid module for this and all subsequent executions of jetty. There are other ways to enable the module, such as for a single execution. For more information on the alternatives see the section on link:#startup-modules[Managing Startup Modules]. -____ - +==== . Edit the configuration for the `setuid` module to substitute the `userid` and `groupid` of the user to switch to after starting. If your server instance has a `${jetty.base/start.d}` directory, this configuration is in the `start.d/setuid.ini` file instead. Otherwise. this configuration is in the `${jetty.base}start.ini` file. @@ -97,10 +96,9 @@ jetty.umask=002 ---- [NOTE] -____ +==== As well as opening the connectors as `root`, you can also have Jetty start the Server as `root` before changing to the non-`root` user. -____ - +==== . A native code library is required to perform user switching. This code is hosted as part of the https://github.com/eclipse/jetty.toolchain[Jetty ToolChain] project and is released independently from Jetty itself. You can find the source code in the https://github.com/eclipse/jetty.toolchain/tree/master/jetty-setuid[eclipse/jetty.toolchain/jetty-setuid] project. diff --git a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc index 509f834d400d..dabaca72b63f 100644 --- a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc +++ b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc @@ -139,11 +139,10 @@ ports and connectors::: ---- + [TIP] -____ +==== You can set the port to 0, which starts the Jetty server connector on an arbitrary available port. You can then access these values from system properties `jetty.ant.server.port` and `jetty.ant.server.host`. -____ - +==== login services::: If your web application requires authentication and authorization services, you can configure these on the Jetty container. Here's an example of how to set up an link:{JDURL}/org/eclipse/jetty/security/HashLoginService.html[org.eclipse.jetty.security.HashLoginService]: diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc index 7daebcabf9e3..e13c6cd48f3d 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedded-examples.adoc @@ -23,11 +23,10 @@ Jetty has a rich history of being embedded into a wide variety of applications. In this section we will walk you through a number of our simple examples under our embedded-jetty-examples project in our git repository. [IMPORTANT] -____ +==== These files are pulled directly from our git repository when this document is generated. If the line numbers do not line up feel free to fix this documentation in github and give us a pull request, or at least open an issue to notify us of the discrepancy. -____ - +==== include::examples/embedded-file-server.adoc[] include::examples/embedded-split-file-server.adoc[] include::examples/embedded-many-connectors.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index a4d969a58885..1e7c8421096f 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -29,17 +29,15 @@ Typically it is best to use something like link:#jetty-maven-helloworld[Maven] t You can manually download the aggregate link:https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/{VERSION}/jetty-all-{VERSION}-uber.jar[`jetty-all.jar`] using `curl` or a browser. [NOTE] -____ +==== The central Maven repository has started to aggressively reject/deny access to the repository from the `wget` command line tool (due to abusive use of the tool by some groups). The administrators of the central maven repository have stated that the recommended command line download tool is now curl. -____ - +==== [IMPORTANT] -____ +==== The `jetty-all` jar referenced in this section is for example purposes only and should not be used outside of this context. Please consider using link:#jetty-maven-helloworld[Maven] to manage your project dependencies. -____ - +==== Use curl as follows: [source, screen] diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc index 00671ef89977..71ca0df6e18b 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/cdi.adoc @@ -99,12 +99,10 @@ This module is equivalent to directly modifying the class path configuration wit ------------------------------------------------------------- [TIP] -____ +==== The `cdi2` module or directly modifying the web application classpath will not work for Jetty 10.0.0 and later. It should only be used for versions prior to Jetty 9.4.20 and/or Weld 3.1.2.Final -____ - - +==== [[cdi-embedded]] ==== Embedded Jetty with CDI When starting embedded Jetty programmatically from the `main` method, to use CDI it may be diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index 43cf63920b31..6338804c9797 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -60,10 +60,9 @@ You *must also install the Apache Aries SPI Fly bundles* as many parts of Jetty |======================================================================= [NOTE] -____ +==== We strongly recommend that you also deploy the link:#osgi-annotations[annotation-related] jars also, as the Servlet Specification increasingly relies on annotations for functionality. -____ - +==== You will also need the **OSGi Event Management service** and the **OSGi Configuration Management service**. If your OSGi container does not automatically make these available, you will need to add them in a way appropriate to your container. @@ -689,14 +688,13 @@ Here is the list of recommended jars (NOTE the version numbers may change in fut |======================================================================= [NOTE] -____ +==== 1. As of Jetty 9.2.3 the jetty-osgi-boot-jsp bundle changed to using Apache Jasper as the JSP implementation. Prior to this the Glassfish Jasper implementation was used, which had a different set of dependencies - pay careful attention to the jars listed both at the top of this page and in this section, as deployment of other jars can cause incomplete or incorrect package resolution in the OSGi container. 2. The order of deployment is important. Deploy these bundles in the order shown or you may experience strange failures in the compilation of jsps. This can be hard to diagnose but is almost always caused by the `ServletContainerInitializer` in the `org.eclipse.jetty.apache-jsp` bundle for the jsp container not being invoked due to incorrect startup of the annotation jars. -____ - +==== For the JSTL library, we recommend the use of the implementation from Glassfish, as it has fewer dependencies: .Jars Required for Glassfish JSTL @@ -861,15 +859,13 @@ org.eclipse.jetty.orbit:javax.mail.glassfish-1.4.1.v201005082020.jar)^*^ |======================================================================= [IMPORTANT] -____ +==== If you wish to use JSPs you will need to deploy these annotation-related jars. -____ - +==== [NOTE] -____ +==== You may be able to deploy later versions or other providers of these specifications, however these particular versions are known to have correct manifests and have been tested and known to work with OSGi. -____ - +==== Even if your webapp itself does not not use annotations, you may need to deploy these jars because your webapp depends on a Jetty module or a 3rd party library that uses a http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html[javax.servlet.ServletContainerInitializer]. This interface requires annotation support. It is implemented by providers of code that extend the capabilities of the container. diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc index 5b3b701eac4a..4bf2372455c8 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc @@ -54,10 +54,9 @@ java -jar $JETTY_HOME/start.jar --add-to-start=cdi-decorate ------------------------- [TIP] -____ +==== For use with the jetty-maven-plugin, the best idea is to make the org.jboss.weld.servlet:weld-servlet and jetty-cdi artifacts _plugin_ dependencies (__not__ a webapp dependency). -____ - +==== [[weld-embedded]] ==== Weld with Embedded Jetty diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc index b00446760d4b..d5d0ebc2c04a 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc @@ -26,12 +26,11 @@ It is an ideal tool to build a web application project, and such projects can us You can also use Maven to build, test and run a project which embeds Jetty. [NOTE] -____ +==== Use of Maven and the jetty-maven-plugin is *not* required. Using Maven for Jetty implementations is a popular choice, but users encouraged to manage their projects in whatever way suits their needs. Other popular tools include Ant and Gradle. -____ - +==== First we'll have a look at a very simple HelloWorld java application that embeds Jetty, then a simple webapp which makes use of the link:#jetty-maven-plugin[jetty-maven-plugin] to speed up the development cycle. [[configuring-embedded-jetty-with-maven]] diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc index 9d0339d68ee1..6460b2d273ea 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc @@ -25,10 +25,9 @@ The plugin can then periodically scan your project for changes and automatically This makes the development cycle more productive by eliminating the build and deploy steps: you use your IDE to make changes to the project, and the running web container automatically picks them up, allowing you to test them straight away. [IMPORTANT] -____ +==== You should use Maven 3.3+ for this plugin. -____ - +==== While the Jetty Maven Plugin can be very useful for development we do not recommend its use in a production capacity. In order for the plugin to work it needs to leverage many internal Maven apis and Maven itself it not a production deployment tool. We recommend either the traditional distribution deployment approach or using link:#advanced-embedding[embedded Jetty.] @@ -63,11 +62,10 @@ If you save changes and recompile your class files, Jetty redeploys your webapp, You can terminate the plugin with a `ctrl-c` in the terminal window where it is running. [NOTE] -____ +==== The classpath of the running Jetty instance and its deployed webapp are managed by Maven, and may not be exactly what you expect. For example: a webapp's dependent jars might be referenced via the local repository, not the `WEB-INF/lib` directory. -____ - +==== [[running-and-deploying]] ==== Supported Goals @@ -260,10 +258,9 @@ Now you need to let the plugin know to apply the files above: ---- [CAUTION] -____ +==== Just as with an installed distribution of Jetty, the ordering of the xml files is significant. -____ - +==== You can also use Jetty xml files to configure a http connector for the plugin to use. Here we use the same `jetty-http.xml` file from the Jetty distribution: @@ -355,11 +352,10 @@ Once invoked, you can configure the plugin to run continuously, scanning for cha Any changes you make are immediately reflected in the running instance of Jetty, letting you quickly jump from coding to testing, rather than going through the cycle of: code, compile, reassemble, redeploy, test. [NOTE] -____ +==== As of Jetty 9.4.7, when using jetty:run in a multi-module build, it is no longer necessary to build each of the modules that form dependencies of the webapp first. Thus, if your webapp depends on other modules in your project and they are present in the reactor at the same time, jetty will use their compiled classes rather than their jar files from your local maven repository. -____ - +==== Here is an example, which turns on scanning for changes every ten seconds, and sets the webapp context path to `/test`: [source, xml] @@ -669,11 +665,10 @@ Jetty continues to execute until you either: * Use `jetty:stop` to stop the forked JVM, which also stops the plugin. [NOTE] -____ +==== If you want to set a custom port for the Jetty connector you need to specify it in a `jetty xml` file rather than setting the connector and port tags. You can specify the location of the `jetty.xml` using the `jettyXml` parameter. -____ - +==== [[jetty-run-distro-goal]] ==== jetty:run-distro @@ -723,10 +718,9 @@ Default will be your `${java.home}/bin/java` This the java executable used to start the child process [NOTE] -____ +==== Use the `modules` parameter to configure the Jetty distribution appropriately rather than using jetty artifacts as `plugin dependencies`. -____ - +==== The following `jetty:run` parameters are *NOT* applicable to this goal: * *scanTargets* @@ -795,12 +789,10 @@ Here's an example of using the configuration parameters: ---- [NOTE] -____ +==== When defining modules for this goal, use the standard link:#startup-modules[Jetty module] names and not the name of the related Jetty sub-project. For example, in the configuration above support for JMX is configured by adding the `jmx` Jetty module and not the `jetty-jmx` sub-project. -____ - - +==== To deploy your unassembled web app to jetty running as a local distribution: [source, screen] @@ -1155,11 +1147,10 @@ Putting the configuration in webapp A's `pom.xml`: ---- [IMPORTANT] -____ +==== If the `ContextHandler` you are deploying is a webapp, it is *essential* that you use an `org.eclipse.jetty.maven.plugin.JettyWebAppContext` instance rather than a standard `org.eclipse.jetty.webapp.WebAppContext` instance. Only the former will allow the webapp to function correctly in the maven environment. -____ - +==== Alternatively, add a `jetty.xml` file to webapp A. Copy the `jetty.xml` file from the Jetty distribution, and then add WebAppContexts for the other 2 webapps: @@ -1245,10 +1236,9 @@ In the latter case, you can use the link:http://www.mojohaus.org/[maven properti ---- [NOTE] -____ +==== If a System property is already set (for example, from the command line or by the JVM itself), then by default these configured properties *DO NOT* override them (see below for use of the parameter). -____ - +==== [[specifying-properties-in-pom]] ===== Specifying System Properties in the POM diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc index fb55e99c6d34..149017296a54 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/intro/chapter.adoc @@ -53,17 +53,15 @@ We support the version 13 of the released and final spec. Jetty tests its WebSocket protocol implementation using the http://autobahn.ws/testsuite[autobahn testsuite]. [IMPORTANT] -____ +==== The early drafts of WebSocket were supported in Jetty 7 and Jetty 8, but this support has been removed in Jetty 9. This means that Jetty 9 will not support the old browsers that implemented the early drafts of WebSocket. (such as Safari 5.0 or Opera 12) -____ - +==== [TIP] -____ +==== Want to know if the browser you are targeting supports WebSocket? Use http://caniuse.com/websockets[caniuse.com/websockets] to find out. -____ - +==== http://www.jcp.org/en/jsr/detail?id=356[JSR-356]:: The Java WebSocket API (`javax.websocket`) + diff --git a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc index a3d5ee373655..0f9666699e94 100644 --- a/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc +++ b/jetty-documentation/src/main/asciidoc/development/websockets/jetty/jetty-websocket-server-api.adoc @@ -40,12 +40,11 @@ The link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketServlet.html#confi In the example we specify a 10 second idle timeout and register MyEchoSocket with the default WebSocketCreator the WebSocket class we want to be created on Upgrade. [NOTE] -____ +==== It is important that you take in account any firewall or router timeouts when configuring websockets. Be sure the websocket configuration is lower than your firewall or router. -____ - +==== ==== Using the WebSocketCreator All WebSocket's are created via whatever link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketCreator.html[WebSocketCreator] you have registered with the link:{JDURL}/org/eclipse/jetty/websocket/servlet/WebSocketServletFactory.html[WebSocketServletFactory]. diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc index f5bcadc2c618..8b372d6e90c0 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/how-to-configure.adoc @@ -53,12 +53,11 @@ The Jetty distribution uses the following configuration files to instantiate, in * Some JVM options in combination with `--exec`, such as `-Xbootclasspath`. [NOTE] -____ +==== -- It is the `ini` files located in the Jetty base directory (if different from Jetty home) that are typically edited to change the configuration (e.g. change ports). -- -____ - +==== `mod` files:: The `$JETTY_HOME/modules/*.mod` files contain the definition of modules that can be activated by `--module=name`. Each `mod` file defines: @@ -280,12 +279,11 @@ Now we can see where those properties in our `ini` and module files came from. In Jetty XML files, Jetty objects come to life; defined properties are set which link back to the jar libraries and run the server to a user's specification. [IMPORTANT] -____ +==== It is important to remember that you should *not* modify the XML files in your `$JETTY_HOME`. If you do for some reason feel you want to change the way an XML file operates, it is best to make a copy of it in your `$JETTY_BASE` in an `/etc` directory. Jetty will always look first to the `$JETTY_BASE` for configuration. -____ - +==== ==== Other Configuration Files In addition to the configuration files described above, the configuration of the server can use the following file types: diff --git a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc index 3198db247f50..bf5daf14a788 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/configuring/what-to-configure.adoc @@ -76,16 +76,14 @@ SSL Context Factory:: [NOTE] -____ +==== Virtual hosts are not configured on connectors. You must configure individual contexts with the virtual hosts to which they respond. -____ - +==== [NOTE] -____ +==== Prior to Jetty 9, the type of the connector reflected both the protocol supported (HTTP, HTTPS, AJP, SPDY), and the nature of the implementation (NIO or BIO). From Jetty 9 onwards there is only one prime Connector type (`ServerConnector`), which is NIO based and uses Connection Factories to handle one or more protocols. -____ - +==== [[intro-jetty-configuration-contexts]] ==== Configuring Contexts @@ -93,12 +91,11 @@ A Jetty context is a handler that groups other handlers under a context path tog A context may contain either standard Jetty handlers or a custom application handler. [NOTE] -____ +==== The servlet specification defines a web application. In Jetty a standard web application is a specialized context that uses a standard layout and `WEB-INF/web.xml` to instantiate and configure classpath, resource base and handlers for sessions, security, and servlets, plus servlets for JSPs and static content. Standard web applications often need little or no additional configuration, but you can also use the techniques for arbitrary contexts to refine or modify the configuration of standard web applications. -____ - +==== Configuration values that are common to all contexts are: contextPath:: @@ -256,10 +253,9 @@ The new WebAppProvider will attempt to avoid double deployments during the direc * If a WAR file and matching XML file exist (eg: `foo.war` and `foo.xml`), then the WAR is assumed to be configured by the XML and only the XML is deployed. [NOTE] -____ +==== In prior versions of Jetty there was a separate ContextDeployer that provided XML-based deployment. As of Jetty 9 the ContextDeployer no longer exists and its functionality has been merged with the new link:{JDURL}/org/eclipse/jetty/deploy/providers/WebAppProvider.html[WebAppProvider] to avoid double deployment scenarios. -____ - +==== //A Context is an instance of ContextHandler that aggregates other handlers with common resources for handling HTTP requests (such as resource base, class loader, configuration attributes). //A standard web application is a specialized instance of a context (called a WebAppContext) that uses standard layouts and `web.xml` deployment descriptors to configure the context. diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc index bf6ed12717de..909367475247 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-common-configuration.adoc @@ -33,11 +33,10 @@ jetty.base:: The property that defines the location of a specific implementation of a Jetty server, its configuration, logs and web applications (typically start.d/*.ini files, logs and webapps). [IMPORTANT] -____ +==== Your Jetty Home directory should be treated as a standard of truth and remain unmodified or changed. Changes or additions to your configuration should take place in the Jetty Base directory. -____ - +==== The `jetty.home` and `jetty.base` properties may be explicitly set on the command line, or they can be inferred from the environment if used with commands like: [source, screen] @@ -103,7 +102,7 @@ It is important to note that setting properties on the command line will only ta To change the configuration so that the server will always start on the desired port, you will need to edit the `start.d/http.ini` [NOTE] -____ +==== -- The configuration by properties works via the following chain: @@ -113,8 +112,7 @@ The configuration by properties works via the following chain: For more information see the link:#quick-start-configure[Quickstart Configuration Guide] and link:#configuring-connectors[Configuring Connectors]. -- -____ - +==== [[quickstart-starting-https]] ==== Adding SSL for HTTPS & HTTP2 diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc index cdae39901b94..c7a038ed987f 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-installing.adoc @@ -22,21 +22,21 @@ ==== Downloading the Jetty Distribution The standalone Jetty distribution is available for download from the Eclipse Foundation: -____ +==== *Jetty* https://www.eclipse.org/jetty/download.html -____ +==== It is available in both zip and gzip formats; download the one most appropriate for your system. When you download and unpack the binary, it is extracted into a directory called `jetty-distribution-VERSION.` Put this directory in a convenient location. The rest of the instructions in this documentation refer to this location as either `$JETTY_HOME` or as `$(jetty.home).` -_[IMPORTANT] -____ +[IMPORTANT] +==== It is important that *only* stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are *not* suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. -_____ +==== [[distribution-content]] ===== Distribution Content @@ -70,11 +70,10 @@ Jetty-Home is an alternate version of the distribution that contains only the ne It is intended for advanced users who are already familiar with Jetty and want to download a smaller distribution package. Jetty-Home can be downloaded from the Maven Central repository: -____ +==== *Jetty-Home* https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/ -____ - +==== Like the main Jetty distribution, Jetty-Home is available in both zip and gzip formats; download the one most appropriate for your system. Notice that there are a number of other files with extensions of .sha or .md5 which are checksum files. When you download and unpack the binary, it is extracted into a directory called `jetty-home-VERSION.` diff --git a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc index 44d69f9fbc38..7a3c10456f50 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/getting-started/jetty-running.adoc @@ -44,13 +44,12 @@ To stop the server, press `CTRL` + `c` or `CTRL` + `z` in your terminal. Instead, see how to link:#creating-jetty-base[create a Jetty Base] below. [NOTE] -____ +==== You will see examples throughout the documentation referencing `$JETTY_HOME` and `$JETTY_BASE` as well as `{jetty.home}` and `{jetty.base}`. These terms are used to refer to the location of your Jetty installation directories. Many users find it helpful to define `$JETTY_HOME` as an environment variable that maps to their Jetty distribution directory. More information can be found in our Administration section on link:#startup-base-and-home[managing Jetty Home and Jetty Base.] -____ - +==== [[demo-webapps-base]] ==== Demo Base @@ -104,10 +103,9 @@ $ java -jar ../start.jar You can visit this demo server by pointing a browser at link:http://localhost:8080[], which will now show a welcome page and several demo/test web applications. [WARNING] -____ +==== The demonstration web applications are not necessarily secure and should *not* be deployed in production web servers. -____ - +==== You can see the configuration of the `demo-base` by using the following commands: [source, screen] diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc index 213e25b82ad9..ab2c02a7e4f4 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc @@ -20,10 +20,10 @@ === Finding Jetty in Maven _[IMPORTANT] -____ +==== It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. -_____ +==== ==== Maven Coordinates diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc index a19fb073467b..d60af5a6784f 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc @@ -24,10 +24,10 @@ This documentation which focuses on Jetty 9. While many people continue to use older versions of Jetty, we generally recommend using Jetty 9 as it represents the version of Jetty that we will actively maintain and improve over the next few years. _[IMPORTANT] -____ +==== It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. -_____ +==== .Jetty Versions [width="100%",cols="12%,9%,15%,6%,21%,10%,6%,21%",options="header",] diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index 3a4372ff4543..e7e9f3f648f3 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -101,10 +101,9 @@ You may now open your web browser and browse to the first page of the html outpu Generally you can do this with File -> Open File -> which will open a file system browsing screen, navigate to your jetty-documentation directory and then further into target/docbkx/html/index/index.html which is the first page of the produced documentation. [TIP] -____ +==== If the build is broken, feel free to notify us. -____ - +==== ==== Making Changes Now that you have built the documentation, you want to edit it and make some changes. @@ -132,11 +131,10 @@ $ git commit -s -m "Tweaked the introduction to fix a horrid misspelled word." s .... [NOTE] -____ +==== In order for us to accept your commit into the Jetty repository you must have an Eclipse CLA on file and sign your commit. Please check out the link:#contributing-cla[patches] section for more information. -____ - +==== This will commit the change in your local repository. You can then push the change up to your repository on github. @@ -212,8 +210,8 @@ license blocks:: Some admonition examples: -__________________________________________[NOTE] -____ +__________________________________________ +[NOTE] A note about the previous case to be aware of. ______________________________________________ diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc index 590cad77b0ad..279773366786 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/patches.adoc @@ -48,11 +48,10 @@ A contributor needs to e-sign a Eclipse Contributor Agreement (for more explanat You can familiarize yourself with the Eclipse wiki page at http://wiki.eclipse.org/Development_Resources/Contributing_via_Git[Contributing via Git]. In order to have a pull request accepted by any Eclipse project you *must* complete this agreement. [TIP] -____ +==== Log into the https://www.eclipse.org[Eclipse home page] (you will need to create an account with the Eclipse Foundation if you have not already done so), click on "Eclipse ECA", and complete the form. Be sure to use the _same email address_ when you create any Git commit records. -____ - +==== [[contributing-git-config]] ==== Configuring Git @@ -67,11 +66,10 @@ Without this sign-off, your patch cannot be applied to the Jetty repository beca You can check out the link:https://help.github.com/articles/signing-tags-using-gpg[guide at Github] for more information. [TIP] -____ +==== One way to think of this is that when you sign the ECA you are indicating that you are free to contribute to eclipse, but that doesn't mean everything you ever do can be contributed. Using the commit signing mechanism indicates that your commit is under the auspices of your agreement. -____ - +==== If a pull request is for a particular issue in our repository then the format of the commit message is important. The message should follow the form "Issue #123 ". When the Jetty project runs releases we have an automated process that scans for commits with this format for inclusion in our VERSION.txt file. diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc index 9c6a365401b2..afc9284e16a7 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc @@ -78,11 +78,10 @@ $ git push origin release-9 6. Prepare the Release + [NOTE] -____ +==== This step updates the elements in the pom.xml files, does a test build with these new versions, and then commits the pom.xml changes to your local git repo. The `eclipse-release` profile is required on the prepare in order to bring in the jetty aggregates as that profile defines a module which is ignored otherwise. -____ - +==== + [source, screen] .... @@ -94,10 +93,9 @@ $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \ 7. Perform the Release + [NOTE] -____ +==== This step performs the release and deploys it to a oss.sonatype.org staging repository. -____ - +==== + [source, screen] .... @@ -250,8 +248,8 @@ Make sure you follow the other examples and include the `rel="nofollow"` attribu 8. Commit the changes to the jetty-website project [NOTE] -____ +==== There is a separate Jenkins build job that publishes documentation to https://www.eclipse.org/jetty/documentation/current triggered by a push of changed files to the jetty-documentation project. If you commit your change to the number from step 2, then these builds will use the same release version number. It is preferable if you _don't_ commit that version number change, or better yet, ensure that it is set to the next -SNAPSHOT version number for your jetty major release number. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc index 67c7dddac84b..d32c169bb566 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc @@ -68,12 +68,11 @@ $ mvn install All relevant dependencies will be downloaded into your local repository automatically. [NOTE] -____ +==== Jetty has a great many test cases that run through the course of its build. Periodically we find some test cases to be more time dependent than they should be and this results in intermittent test failures. You can help track these down by opening a bug report. -____ - +==== ==== Import into Eclipse Jetty is a Maven project. To develop Jetty in Eclipse, follow these directions: diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc index cf0759450f4e..7cd164b5a32d 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-eclipse.adoc @@ -50,10 +50,10 @@ Once you have a main method defined in order to launch your application, right-c In your *Console* tab within Eclipse you should see your application startup and once it has completed startup you should be able to configure breakpoints and hit the Jetty instance as normal via your web browser. [TIP] -____ +==== You can easily configure logging through a `jetty-logging.properties` file. If this file is on your classpath then Jetty will use it for configuring logging, we use this approach extensively throughout Jetty development and it makes life ever so much easier. You can see this in action in the xref:configuring-jetty-stderrlog[] section. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc index 6ffbe6ef95e7..056ccf584f94 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/debugging-with-intellij.adoc @@ -62,8 +62,8 @@ For example it's possible to have conditional breakpoints that only trigger a br Have a look at the various tutorials in the internet or the http://www.jetbrains.com/idea/webhelp/getting-help.html[IntelliJ documentation] for further details. [TIP] -____ +==== You can easily configure logging through a `jetty-logging.properties` file. If this file is on your classpath then Jetty will use it for configuring logging, we use this approach extensively throughout Jetty development and it makes life ever so much easier. You can see this in action in the xref:configuring-jetty-stderrlog[] section. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc index 879e5e49cdcb..69994e2a14f0 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc @@ -27,10 +27,9 @@ The basics are that you must start up the remote JVM with additional parameters This is easily accomplished. [NOTE] -____ +==== This example assumes you are deploying your web application into the jetty-distribution. -____ - +==== ===== Starting Jetty Assuming you have your webapp deployed into jetty, there are two different ways to approach this: diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc index fa5ec6ee00b1..55d9e2b7048e 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-env-xml.adoc @@ -44,10 +44,9 @@ Jetty applies `jetty-env.xml` on a per-webapp basis, and configures an instance ---- [CAUTION] -____ +==== Make sure you are applying the configuration to an instance of the proper class. `jetty-env.xml` configures an instance of WebAppContext, and not an instance of Server. -____ - +==== [[using-jetty-env-xml]] ==== Using `jetty-env.xml` diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc index 361bfe2184d3..90b78382ce54 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-web-xml-config.adoc @@ -41,10 +41,9 @@ For a more in-depth look at the syntax, see xref:jetty-xml-syntax[]. ---- [CAUTION] -____ +==== Make sure you are applying the configuration to an instance of the proper class. `jetty-web.xml` configures an instance of `WebAppContext`; `jetty.xml` configures an instance of `Server`. -____ - +==== [[using-jetty-web-xml]] ==== Using jetty-web.xml @@ -53,10 +52,9 @@ When Jetty deploys a web application, it looks for a file called `WEB-INF/jetty- Be aware that `jetty-web.xml` is called _after_ all other configuration has been applied to the web application. [IMPORTANT] -____ +==== It is important to note that `jetty-web.xml` files utilize the webapp classpath, not the classpath of the server. -____ - +==== [[jetty-web-xml-examples]] ==== jetty-web.xml Examples diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc index e0ec4f892a11..25acf049ce16 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-usage.adoc @@ -34,11 +34,10 @@ To use `jetty.xml`, specify it as a configuration file when running Jetty. ---- [NOTE] -____ +==== If you start Jetty without specifying a configuration file, Jetty automatically locates and uses the default installation `jetty.xml` file. Therefore `java -jar start.jar` is equivalent to `java -jar start.jar etc/jetty.xml` . -____ - +==== [[using-multiple-configuration-files]] ==== Using Multiple Configuration Files diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc index 1da1d7531774..1cabc31f3d22 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc @@ -34,10 +34,9 @@ The `webdefault.xml` file is located in `$(jetty.home)/etc/webdefault.xml`. You can specify a custom configuration file to use for specific webapps, or for all webapps. If you do not specify an alternate defaults descriptor, the `$JETTY-HOME/etc/jetty-deploy.xml` file will configure jetty to automatically use `$JETTY_HOME/etc/webdefault.xml`. [NOTE] -____ +==== To ensure your `webdefault.xml` files are validated, you will need to set the `validateXml` attribute to true as described link:#jetty-xml-dtd[here.] -____ - +==== The `webdefault.xml` link:{GITBROWSURL}/jetty-webapp/src/main/config/etc/webdefault.xml[included with the Jetty Distribution] contains several configuration options, such as init params and servlet mappings, and is separated into sections for easy navigation. Some of the more common options include, but are not limited to: diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc index b4c401b1afdd..9adb49a3f6a7 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc @@ -20,10 +20,9 @@ === CloudFoundry [WARNING] -____ +==== This is an increasingly aged integration, things like likely changed enough this is not directly useful but may serve as a useful starting point should someone want to look into it. -____ - +==== [[cloudfoundry-overview]] ==== Overview @@ -53,13 +52,12 @@ $ cf push snifftest --buildpack=git://github.com/jmcc0nn3ll/jetty-buildpack.git .... [TIP] -____ +==== In this example the web application is uploaded from the *current* directory so make sure you have changed directory into the root of your web application. The `snifftest` on the commandline refers to what you are calling the application, not the directory to deploy. Also note that the webapplication is installed into the `ROOT` context of Jetty as is available at the root context of the server. Any additional web applications will have to be configured within the buildpack as mentioned above. -____ - +==== You will be prompted to answer a series of questions describing the execution environment and any additional services you need enabled (databases, etc). [source, plain] diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc index 299b9e3a82b2..c04a81a00f88 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/elastic-beanstalk.adoc @@ -20,11 +20,9 @@ === Amazon Elastic Beanstalk [WARNING] -____ +==== This is an increasingly aged integration, things like likely changed enough this is not directly useful but may serve as a useful starting point should someone want to look into it. -____ - - +==== http://aws.amazon.com/elasticbeanstalk/[Elastic Beanstalk] is a component with the http://aws.amazon.com[Amazon Web Services] offering that allows you to configure an entire virtual machine based on one of several available baseline configurations and then customize it through a powerful configuration system. While the default offerings currently available are based on Tomcat for for the java community, we worked out the basics using that configuration system to enable the usage of Jetty instead. [[elastic-beanstalk-overview]] @@ -70,19 +68,18 @@ jetty-beanstalk-testapp:: `start.ini` file. [NOTE] -____ +==== The test webapps needs access to a snapshot version of the test-jetty-webapp so it really serves as more of an example of how to layer your webapp with the bits required to customize your app for beanstalk and jetty. -____ - +==== To actually make use of these artifacts you currently must clone this git repository and build it locally. Once you have the artifacts you simply need to copy the approach in the jetty-beanstalk-testapp to apply the configuration to your webapp. * https://github.com/jmcc0nn3ll/jetty-beanstalk [IMPORTANT] -____ +==== Bluepill is used to manage the start and stop process of the app server. This seems to be a problematic bit of software with a colored history and the version in use at the time of this writing is old. When starting and stopping (or restarting) the appserver you may see error messages show up that the Server timed out getting a response or things like that. These are red herrings and my experience is that jetty has started and stopped just fine, the pid file required shows up in a very timely fashion (under `/var/run/jetty.pid`) so do check that the app server has started, but please be aware there is a strangeness here that hasn't been sorted out yet. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc index 3a7dc7ebdb83..b78d2296371d 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/preventing-memory-leaks.adoc @@ -25,10 +25,9 @@ If you have memory leaks, and you have thoroughly investigated tools like jconso ==== Preventing WebApp Classloader Pinning [NOTE] -____ +==== This feature is available for Jetty 7.6.6 and later. -____ - +==== Code that keeps references to a webapp classloader can cause memory leaks. These leaks fall generally into two categories: static fields and daemon threads. diff --git a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc index 19c6f9ee18dd..f854123efcf3 100644 --- a/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/troubleshooting/troubleshooting-locked-files.adoc @@ -92,6 +92,6 @@ Configure this in an xml file like so: ---- [NOTE] -____ +==== Be careful with this option when using an explicitly setlink:#ref-temp-directories[temp directory] name - as the name of the temp directory will not unique across redeployments, copying the static content into the same directory name each time may not avoid the locking problem. -____ +==== diff --git a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc index e89d5c2d1eb2..944ba7c11a63 100644 --- a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc @@ -171,12 +171,10 @@ Here is a comparison of file formats, note that the file contents are listed in |=== [NOTE] -____ +==== Session data is now only loaded when requested. Previous functionality such as `setLazyLoad` has been removed. -____ - - +==== ===== JDBC Sessions As with earlier versions of Jetty, sessions may be persisted to a relational database. From a31b475967e6ce2b591e19762357e7f97bdedf9c Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 12:09:43 -0600 Subject: [PATCH 11/14] Converting .... to ---- for code blocks --- KEYS.txt | 10 +-- .../asciidoc/administration/alpn/alpn.adoc | 12 +-- .../using-annotations-embedded.adoc | 4 +- .../extras/rewrite-handler.adoc | 4 +- .../extras/statistics-handler.adoc | 4 +- .../fastcgi/configuring-fastcgi.adoc | 16 ++-- .../http2/configuring-haproxy.adoc | 32 +++---- .../http2/configuring-http2.adoc | 4 +- .../administration/http2/enabling-http2.adoc | 12 +-- .../administration/jmx/jetty-jconsole.adoc | 8 +- .../administration/jndi/jndi-embedded.adoc | 4 +- .../administration/jndi/quick-jndi-setup.adoc | 8 +- .../configuring-jetty-request-logs.adoc | 4 +- .../logging/configuring-logging-modules.adoc | 40 ++++----- .../default-logging-with-stderrlog.adoc | 20 ++--- .../logging/example-apache-log4j.adoc | 4 +- .../example-java-util-logging-native.adoc | 4 +- .../logging/example-java-util-logging.adoc | 4 +- .../example-logback-centralized-logging.adoc | 4 +- .../logging/example-logback-sifting.adoc | 4 +- .../logging/example-logback.adoc | 4 +- .../example-slf4j-multiple-loggers.adoc | 4 +- .../logging/jetty-server-dump.adoc | 4 +- .../administration/runner/jetty-runner.adoc | 88 +++++++++---------- .../legacy/session-clustering-infinispan.adoc | 8 +- .../startup/screen-empty-base-listconfig.adoc | 4 +- .../startup/screen-empty-base.adoc | 4 +- .../screen-http-webapp-deploy-listconfig.adoc | 4 +- .../startup/screen-http-webapp-deploy.adoc | 4 +- .../startup/screen-list-logging-modules.adoc | 4 +- .../startup/screen-list-modules.adoc | 4 +- .../administration/startup/start-jar.adoc | 52 +++++------ .../startup/startup-base-vs-home.adoc | 24 ++--- .../startup/startup-classpath.adoc | 4 +- .../administration/startup/startup-jpms.adoc | 36 ++++---- .../startup/startup-modules.adoc | 12 +-- .../startup/startup-overview.adoc | 28 +++--- .../startup/startup-unix-service.adoc | 52 +++++------ .../startup/startup-windows-service.adoc | 24 ++--- .../tuning/garbage-collection.adoc | 12 +-- .../administration/tuning/high-load.adoc | 28 +++--- .../connectors/configuring-connectors.adoc | 24 ++--- .../connectors/configuring-ssl.adoc | 12 +-- .../contexts/temporary-directories.adoc | 12 +-- .../configuring/security/jaas-support.adoc | 4 +- .../security/jetty-home-and-jetty-base.adoc | 80 ++++++++--------- .../security/secure-passwords.adoc | 16 ++-- .../asciidoc/development/ant/jetty-ant.adoc | 8 +- .../embedding/embedding-jetty.adoc | 4 +- .../embedding/jetty-helloworld.adoc | 12 +-- .../development/frameworks/metro.adoc | 4 +- .../asciidoc/development/frameworks/osgi.adoc | 8 +- .../development/frameworks/spring-usage.adoc | 4 +- .../asciidoc/development/frameworks/weld.adoc | 12 +-- .../maven/jetty-jspc-maven-plugin.adoc | 4 +- .../maven/jetty-maven-helloworld.adoc | 24 ++--- .../development/maven/jetty-maven-plugin.adoc | 24 ++--- .../reference/contributing/documentation.adoc | 36 ++++---- .../contributing/release-testing.adoc | 48 +++++----- .../contributing/releasing-jetty.adoc | 52 +++++------ .../reference/contributing/source-build.adoc | 4 +- .../debugging/enable-remote-debugging.adoc | 4 +- .../reference/jetty-xml/jetty-xml-syntax.adoc | 18 ++-- .../reference/platforms/cloudfoundry.adoc | 4 +- 64 files changed, 512 insertions(+), 512 deletions(-) diff --git a/KEYS.txt b/KEYS.txt index 5db338b664f4..095380ac7639 100644 --- a/KEYS.txt +++ b/KEYS.txt @@ -1,8 +1,8 @@ -# GPG Release Key Fingerprints -Jan Bartel AED5 EE6C 45D0 FE8D 5D1B 164F 27DE D4BF 6216 DB8F -Jesse McConnell 2A68 4B57 436A 81FA 8706 B53C 61C3 351A 438A 3B7D -Joakim Erdfelt 5989 BAF7 6217 B843 D66B E55B 2D0E 1FB8 FE4B 68B4 -Joakim Erdfelt B59B 67FD 7904 9843 67F9 3180 0818 D9D6 8FB6 7BAC +# GPG Release Key Fingerpr==== +Jan Bartel AED5 EE6C 45D0 FE8D 5D1B 164F 27DE D4BF 6216 ==== +Jesse McConnell 2A68 4B57 436A 81FA 8706 B53C 61C3 351A 438A ==== +Joakim Erdfelt 5989 BAF7 6217 B843 D66B E55B 2D0E 1FB8 FE4B ==== +Joakim Erdfelt B59B 67FD 7904 9843 67F9 3180 0818 D9D6 8FB6 ==== Joakim Erdfelt BFBB 21C2 46D7 7768 3628 7A48 A04E 0C74 ABB3 5FEA Simone Bordet 8B09 6546 B1A8 F026 56B1 5D3B 1677 D141 BCF3 584D Olivier Lamy F254 B356 17DC 255D 9344 BCFA 873A 8E86 B437 2146 diff --git a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc index c1e18f5c4767..278fe27a6aa3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/alpn/alpn.adoc @@ -325,9 +325,9 @@ The solution that we use with Maven is to specify an additional command line arg You can enable debug logging for the ALPN implementation in this way: -.... +---- ALPN.debug = true; -.... +---- Since the ALPN class is in the boot classpath, we chose not to use logging libraries because we do not want to override application logging library choices; therefore the logging is performed directly on `System.err`. @@ -425,19 +425,19 @@ This section is for Jetty developers that need to update the ALPN implementation Clone the OpenJDK repository with the following command: [source, screen] -.... +---- $ hg clone https://hg.openjdk.java.net/jdk8u/jdk8u jdk8u $ cd !$ $ ./get_source.sh -.... +---- To update the source to a specific tag, use the following command: [source, screen] -.... +---- $ ./make/scripts/hgforest.sh update -.... +---- The list of OpenJDK tags can be obtained from this page: https://hg.openjdk.java.net/jdk8u/jdk8u/tags[OpenJDK 8 Tags]. diff --git a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc index ad97e5355c62..a0de5e94c000 100644 --- a/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/annotations/using-annotations-embedded.adoc @@ -24,10 +24,10 @@ You will need to place the following Jetty jar files onto the classpath of your application. You can obtain them from the https://www.eclipse.org/jetty/download.html[Jetty distribution], or the https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-annotations[Maven repository]: -.... +---- jetty-plus.jar jetty-annotations.jar -.... +---- You will also need the http://asm.ow2.org/[asm] jar, which you can obtain from link:{MVNCENTRAL}/org/eclipse/jetty/orbit/org.objectweb.asm/3.3.1.v201105211655/org.objectweb.asm-3.3.1.v201105211655.jar[this link.] diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index 59b3ff0b24d3..33375020c376 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -32,9 +32,9 @@ The most common use is to rewrite request URIs, but it is capable of much more: The standard Jetty distribution bundle contains the `jetty-rewrite` link:#startup-modules[module], so all you need to do is to enable it using one of the link:#start-jar[module commands], eg: [source, screen] -.... +---- $ java -jar start.jar --add-to-start=rewrite -.... +---- _[NOTE] ==== diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc index acfc429b00a7..17591ffe2a0f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/statistics-handler.adoc @@ -36,9 +36,9 @@ Jetty currently has two main statistics collection mechanisms: The `StatisticsHandler` and `ConnectionStatistics` are not included in the default Jetty configuration, these need to be configured manually or enabled using the Jetty `stats` module on the command line. [source, screen] -.... +---- $ java -jar {$jetty.home}/start.jar --add-to-start=stats -.... +---- In addition to these, the `SessionHandler` and `DefaultSessionCache` classes collect statistics for sessions. These statistics are enabled by default and are accessible via JMX interface. diff --git a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc index 25013557712d..2a459c2920be 100644 --- a/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/fastcgi/configuring-fastcgi.adoc @@ -32,11 +32,11 @@ Refer to xref:jetty-downloading[] for more information about how to install Jett The fourth step is to create a Jetty base directory (see xref:startup-base-and-home[]), called in the following `$JETTY_BASE`, where you setup the configuration needed to support FastCGI in Jetty, and configure the `fcgi`, `http` and `deploy` modules, so that Jetty will be able to accept HTTP requests from browsers, convert them in FastCGI, and proxy them to `php-fpm`: [source, screen] -.... +---- $ mkdir -p /usr/jetty/wordpress $ cd /usr/jetty/wordpress $ java -jar $JETTY_HOME/start.jar --add-to-start=fcgi,http,deploy -.... +---- Therefore `$JETTY_BASE=/usr/jetty/wordpress`. @@ -139,10 +139,10 @@ Refer to the link:{JDURL}/org/eclipse/jetty/fcgi/server/proxy/FastCGIProxyServle The last step is to start Jetty (see xref:startup[]) and navigate to `http://localhost:8080` with your browser and enjoy WordPress: [source, screen] -.... +---- $ cd $JETTY_BASE $ java -jar /opt/jetty/start.jar -.... +---- [[configuring-fastcgi-http2]] ==== Configuring Jetty to Proxy HTTP/2 to FastCGI @@ -152,10 +152,10 @@ In order to configure Jetty to listen for HTTP/2 requests from clients that are Enabling the `http2` is easy; in additions to the modules you have enabled above, add the `http2` module: [source, screen] -.... +---- $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http2 -.... +---- The command above adds the `http2` module (and its dependencies) to the existing modules and uses the default Jetty keystore to provide the key material required by TLS. You will want to use your own keystore with your own private key and certificate for your own domain. @@ -172,9 +172,9 @@ These will setup a clear text connector on port 8080 for HTTP/1.1 and a TLS conn At this point, you can start Jetty (see xref:startup[]), hit `http://localhost:8080` with your browser and enjoy WordPress via HTTP/2 using a HTTP/2 enabled browser: [source, screen] -.... +---- $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar -.... +---- If you don't have a HTTP/2 enabled browser, WordPress will still be available over HTTP/1.1. diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc index 37917b810dc1..a323959308d2 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-haproxy.adoc @@ -35,9 +35,9 @@ The instructions that follow are for Linux. You will need HAProxy 1.5 or later, because it provides support for SSL and ALPN, both required by HTTP/2. Most Linux distributions have the HAProxy package available to be installed out of the box. For example on Ubuntu 15.04: [source,screen] -.... +---- $ sudo apt-get install haproxy -.... +---- Alternatively you can download the HAProxy source code and build it on your environment by following the README bundled with the HAProxy source code tarball. @@ -62,7 +62,7 @@ HAProxy will need a single file containing the X509 certificates and the private Let's use `keytool` to generate a self signed certificate: [source,screen] -.... +---- $ keytool -genkeypair -keyalg RSA -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -ext SAN=DNS:domain.com What is your first and last name? [Unknown]: *.domain.com @@ -78,7 +78,7 @@ What is the two-letter country code for this unit? [Unknown]: IT Is CN=*.domain.com, OU=Unit, O=Domain, L=Torino, ST=TO, C=IT correct? [no]: yes -.... +---- The above command will generate a self signed certificate and private key for `domain.com` and subdomains, stored in the `keystore.p12` file in PKCS#12 format. We need to extract the certificate and the private key in PEM format. @@ -86,23 +86,23 @@ We need to extract the certificate and the private key in PEM format. To extract the certificate into `certificate.pem`: [source,screen] -.... +---- $ keytool -exportcert -keystore keystore.p12 -storetype pkcs12 -storepass storepwd -rfc -file certificate.pem -.... +---- To export the private key into `private_key.pem`: [source,screen] -.... +---- $ openssl pkcs12 -in keystore.p12 -nodes -nocerts -out private_key.pem -passin pass:storepwd -.... +---- At this point you just need to concatenate the two files into one, in the correct order: [source,screen] -.... +---- $ cat certificate.pem private_key.pem > domain.pem -.... +---- The `domain.pem` file will be used later by HAProxy. @@ -113,7 +113,7 @@ Now we can setup `haproxy.cfg` to configure HAProxy. This is a minimal configuration: [source] -.... +---- global tune.ssl.default-dh-param 1024 @@ -136,7 +136,7 @@ default_backend be_http backend be_http mode tcp server domain 127.0.0.1:8282 -.... +---- The HAProxy configuration file works in the following way. The `fe_http` front-end accepts connections on port 80 and redirects them to use the `https` scheme. @@ -157,21 +157,21 @@ Since the `http2c` module depends on the `http` module, the `http` module will b Additionally, you will also enable the `deploy` module to be able to deploy a sample web application: [source,screen] -.... +---- $ JETTY_BASE=haproxy-jetty-http2 $ mkdir $JETTY_BASE $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http2c,deploy -.... +---- Now let's deploy a demo web application and start Jetty: [source,screen] -.... +---- $ cd $JETTY_BASE $ cp $JETTY_HOME/demo-base/webapps/async-rest.war $JETTY_BASE/webapps/ $ java -jar $JETTY_HOME/start.jar jetty.http.host=127.0.0.1 jetty.http.port=8282 -.... +---- Now you can browse https://domain.com/async-rest (replace `domain.com` with your own domain, or with `localhost`, to make this example work). diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 74ecbead31ac..c2b633cd22a0 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -25,7 +25,7 @@ Thus configuring HTTP/2 is a combination of configuring common properties on the The modules and XML files involved can be seen with the following commands: [source,screen] -.... +---- $ java -jar $JETTY_HOME/start.jar --list-modules ... 1) alpn-impl @@ -48,7 +48,7 @@ $ java -jar $JETTY_HOME/start.jar --list-config ... ${jetty.home}/etc/jetty-http2.xml ${jetty.home}/etc/jetty-https.xml -.... +---- The common properties associated with connectors (host,port, timeouts, etc.) can be set in the module ini files (or `start.ini` if `--add-to-start` was used): `${jetty.base}/start.d/http.ini` and `${jetty.base}/start.d/ssl.ini`. These properties are instantiated in the associated XML files: `${jetty.home}/etc/jetty-http.xml`; `${jetty.home}/etc/jetty-ssl.xml`, plus the SSL keystore is instantiated in `${jetty.home}/etc/jetty-ssl-context.xml`. diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/enabling-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/enabling-http2.adoc index 8a0f3063d726..375afe9ef99f 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/enabling-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/enabling-http2.adoc @@ -23,12 +23,12 @@ This section is written assuming that a link:#startup-base-and-home[Jetty base d A demo Jetty base that supports HTTP/1, HTTPS/1 and deployment from a webapps directory can be created with the commands: [source, screen] -.... +---- $ JETTY_BASE=http2-demo $ mkdir $JETTY_BASE $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=http,https,deploy -.... +---- The commands above create a `$JETTY_BASE` directory called `http2-demo`, and initializes the `http,` `https` and `deploy` modules (and their dependencies) to run a typical Jetty Server on port 8080 (for HTTP/1) and 8443 (for HTTPS/1). Note that the HTTPS module downloads a demo keystore file with a self signed certificate, which needs to be replaced by a Certificate Authority issued certificate for real deployment. @@ -36,9 +36,9 @@ Note that the HTTPS module downloads a demo keystore file with a self signed cer To add HTTP/2 to this demo base, it is just a matter of enabling the `http2` module with the following command: [source, screen] -.... +---- $ java -jar $JETTY_HOME/start.jar --add-to-start=http2 -.... +---- This command does not create a new connector, but instead simply adds the HTTP/2 protocol to the existing HTTPS/1 connector, so that it now supports both protocols on port 8443. To do this, it also transitively enables the ALPN module for protocol negotiation. @@ -62,13 +62,13 @@ Note that a browser pointed at this server with URL starting with `http://localh HTTP/2 can be enabled on the plain text connector and the server restarted with the following command: [source,screen] -.... +---- $ java -jar $JETTY_HOME/start.jar --add-to-start=http2c $ java -jar $JETTY_HOME/start.jar .. 2015-06-17 14:16:12.549:INFO:oejs.ServerConnector:main: Started ServerConnector@6f32cd1e{HTTP/1.1,[http/1.1, h2c, h2c-17]}{0.0.0.0:8080} 2015-06-17 14:16:12.782:INFO:oejs.ServerConnector:main: Started ServerConnector@711f39f9{SSL,[ssl, alpn, h2, h2-17, http/1.1]}{0.0.0.0:8443} .. -.... +---- No major browser currently supports plain text HTTP/2, so the 8080 port will only be able to use HTTP/2 with specific clients (eg `curl`) that use the upgrade mechanism or assume HTTP/2. diff --git a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc index 833cfc5bbeb6..e95b36f1257d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jmx/jetty-jconsole.adoc @@ -27,16 +27,16 @@ When following the instructions given below, please also ensure that you make an The simplest way to enable support is to add the JMX-Remote support module to your `{$jetty.base}`. [source, screen] -.... +---- [mybase]$ java /opt/jetty-dist/start.jar --add-to-start=jmx-remote, jmx INFO: jmx-remote initialised in ${jetty.base}/start.ini INFO: jmx initialised in ${jetty.base}/start.ini -.... +---- Then open the `{$jetty.base}/start.ini` (or `{$jetty.base}/start.d/jmx-remote.ini`) file and edit the properties to suit your needs: [source, screen] -.... +---- # # Initialize module jmx-remote # @@ -45,7 +45,7 @@ Then open the `{$jetty.base}/start.ini` (or `{$jetty.base}/start.d/jmx-remote.in ## Enable for an open port accessible by remote machines jetty.jmxrmihost=localhost jetty.jmxrmiport=1099 -.... +---- [[jetty-jconsole-monitoring]] ==== Monitoring Jetty with JConsole diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc index 5960da2caccf..eb880b944e50 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/jndi-embedded.adoc @@ -23,10 +23,10 @@ In addition to the jars that you require for your application, and the jars needed for core Jetty, you will need to place the following jars onto your classpath: -.... +---- jetty-jndi.jar jetty-plus.jar -.... +---- If you are using transactions, you will also need the `javax.transaction` api. You can obtain this jar link:{MVNCENTRAL}/org/eclipse/jetty/orbit/javax.transaction/1.1.1.v201105210645/javax.transaction-1.1.1.v201105210645.jar[here.] diff --git a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc index 6419102247db..e5327344e744 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jndi/quick-jndi-setup.adoc @@ -24,11 +24,11 @@ As the _plus_ module depends on the _JNDI_ module, you only need to enable the _ Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: [source, screen] -.... +---- cd /opt/jetty cd my-base java -jar $JETTY_HOME/start.jar --add-to-start=plus -.... +---- You can now start Jetty and use JNDI within your webapps. See link:#using-jndi[Using JNDI] for information on how to add entries to the JNDI environment that Jetty can look up within webapps. @@ -38,8 +38,8 @@ You will then need to enable the _ext_ module to ensure the jars in the `ext/` d Assuming you have Jetty installed in `/opt/jetty`, and you have made a link:#startup-base-and-home[jetty base] in `/opt/jetty/my-base`, do: [source, screen] -.... +---- cd /opt/jetty cd my-base java -jar $JETTY_HOME/start.jar --add-to-start=ext -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc index d83d19140e74..d0bc866ac9ca 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-jetty-request-logs.adoc @@ -28,12 +28,12 @@ There is one entry per request received, and commonly in the standard NCSA forma A standard request log entry includes the client IP address, date, method, URL, result, size, referrer, user agent and latency. For example: -.... +---- 123.4.5.6 - - [20/Jul/2016:10:16:17 +0000] "GET /jetty/tut/XmlConfiguration.html HTTP/1.1" 200 76793 "http://localhost:8080/jetty/tut/logging.html" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8" 342 -.... +---- [[implementing-request-log]] ==== Implementing a Request Log diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc index 308eacb2e39b..983cd3d36145 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc @@ -27,14 +27,14 @@ Please note that enabling these modules provides typical and basic functionality Enabling these frameworks in the Jetty distribution is as easy as activating any other module, by adding `--add-to-start=` to the start command for your server, such as: [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini INFO : resources transitively enabled MKDIR : ${jetty.base}/resources COPY : ${jetty.home}/modules/logging-jetty/resources/jetty-logging.properties to ${jetty.base}/resources/jetty-logging.properties INFO : Base directory was modified -.... +---- As noted above, Jetty supports a wide array of logging technologies. If a particular logging framework requires additional jar files, Jetty will automatically download these as part of enabling the associated module and any dependent modules will be transitively enabled. @@ -84,7 +84,7 @@ It can also be used on it's own to provide simple server logging. To enable the SLF4J framework, you need to activate the `logging-slf4j` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-slf4j ALERT: There are enabled module(s) with licenses. @@ -126,14 +126,14 @@ ERROR : Unsatisfied module dependencies: logging-slf4j Usage: java -jar $JETTY_HOME/start.jar [options] [properties] [configs] java -jar $JETTY_HOME/start.jar --help # for more information -.... +---- As you probably noticed, the system gives an `ERROR` when trying to enable the `logging-slf4j` on it's own. The `logging-slf4j` module itself provides the SLF4J api, but as SLF4J is often used as a binding for other logging frameworks does not by default provide an implementation. To enable the simple SLF4J implementation, we will also need to activate the `slf4j-simple-impl` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini INFO : resources transitively enabled @@ -153,7 +153,7 @@ INFO : Base directory was modified └── start.d ├── logging-slf4j.ini └── slf4j-simple-impl.ini -.... +---- Jetty is now configured to log using the SLF4J framework. A standard SLF4J properties file is located in `${jetty.base}/resources/simplelogger.properties`. @@ -166,7 +166,7 @@ This is accomplished by configuring Jetty for logging to http://logging.apache.o Implementation of Log4j can be done by enabling the `logging-log4j` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j ALERT: There are enabled module(s) with licenses. @@ -227,7 +227,7 @@ INFO : Base directory was modified │   └── log4j.xml └── start.d └── logging-log4j.ini -.... +---- Jetty is now configured to log using the Log4j framework. A standard Log4j configuration file is located in `${jetty.base}/resources/log4j.xml`. @@ -235,7 +235,7 @@ A standard Log4j configuration file is located in `${jetty.base}/resources/log4j Or, to set up Log4j2, enable the `logging-log4j2` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-log4j2 ALERT: There are enabled module(s) with licenses. @@ -299,7 +299,7 @@ INFO : Base directory was modified │   └── log4j2.xml └── start.d └── logging-log4j2.ini -.... +---- At this point Jetty is configured so that the Jetty server itself will log using Log4j2, using the Log4j2 configuration found in `{$jetty.base}/resources/log4j2.xml`. @@ -312,7 +312,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h To set up Jetty logging via Logback, enable the `logging-logback` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-logback ALERT: There are enabled module(s) with licenses. @@ -382,7 +382,7 @@ INFO : Base directory was modified │   └── logback.xml └── start.d └── logging-logback.ini -.... +---- At this point Jetty is configured so that the Jetty server itself will log using Logback, using the Logback configuration found in `{$jetty.base}/resources/logback.xml`. @@ -395,7 +395,7 @@ It is possible to have the Jetty Server logging configured so that `java.util.lo This example demonstrates how to configuring Jetty for logging to `java.util.logging` via http://slf4j.org/manual.html[SLF4J] as a binding layer. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-jul ALERT: There are enabled module(s) with licenses. @@ -448,7 +448,7 @@ INFO : Base directory was modified │   └── slf4j-jdk14-1.7.21.jar └── start.d └── logging-jul.ini -.... +---- Jetty is now configured to log using the JUL framework. A standard JUL properties file is located in `${jetty.base}/etc/java-util-logging.properties`. @@ -460,7 +460,7 @@ Included in the distribution is the `console-capture` module, which can be used To enable this functionality, activate the `console-capture` module. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini MKDIR : ${jetty.base}/logs @@ -471,24 +471,24 @@ INFO : Base directory was modified ├── logs └── start.d └── console-capture.ini -.... +---- As an example, here is the output from Logback before using the `console-capture` module: [source, screen] -.... +---- [my-base]$ java -jar ../start.jar 419 [main] INFO org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog 540 [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.0-SNAPSHOT 575 [main] INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@3c0ecd4b{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 575 [main] INFO org.eclipse.jetty.server.Server - Started @668ms -.... +---- After enabling `console-capture`, the output is as follows, which displays the location the log is being saved to: [source, screen] -.... +---- [my-base]$ java -jar ../start.jar 151 [main] INFO org.eclipse.jetty.util.log - Logging initialized @238ms to org.eclipse.jetty.util.log.Slf4jLog 196 [main] INFO org.eclipse.jetty.util.log - Console stderr/stdout captured to /installs/jetty-distribution/mybase/logs/2016_10_21.jetty.log -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index bffdd9c1ac21..2f904a3135b9 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -32,7 +32,7 @@ Included in the Jetty distribution is a logging module named `console-capture` t To enable this feature, simply activate the `console-capture` module on the command line: [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=console-capture INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini MKDIR : ${jetty.base}/logs @@ -43,7 +43,7 @@ INFO : Base directory was modified ├── logs └── start.d └── console-capture.ini -.... +---- The default configuration for logging output will create a file `${jetty.base}/logs/yyyy_mm_dd.stderrout.log` which allows configuration of the output directory by setting the `jetty.logs` property. @@ -57,7 +57,7 @@ To customize the log further, a module named `logging-jetty` is available to pro As with `console-capture`, you activate the `logging-jetty` on the command line. [source, screen] -.... +---- [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini INFO : resources transitively enabled @@ -73,14 +73,14 @@ INFO : Base directory was modified └── start.d ├── console-capture.ini └── logging-jetty.ini -.... +---- Once activated, you can find the properties file at `${jetty.base}/resources/jetty-logging.properties`. By default, the following parameters are defined. To change them, un-comment the line and substitute your naming scheme and configuration choices. [source, properties] -.... +---- ## Force jetty logging implementation #org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog @@ -93,7 +93,7 @@ To change them, un-comment the line and substitute your naming scheme and config ## Show the source file of a log location? #com.example.SOURCE=false -.... +---- There are a number of properties that can be defined in the configuration that will affect the behavior of StdErr logging with `console-capture`. @@ -124,22 +124,22 @@ There are a number of properties that can be defined in the configuration that w * Example when set to false: + [source, screen] -.... +---- 2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-9.4.0-SNAPSHOT 2016-10-21 15:31:01.400:INFO:oejs.AbstractConnector:main: Started ServerConnector@2c330fbc{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 2016-10-21 15:31:01.400:INFO:oejs.Server:main: Started @485ms -.... +---- + * Example when set to true: + [source, screen] -.... +---- 2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog 2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-9.4.0-SNAPSHOT 2016-10-21 15:31:35.174:INFO:org.eclipse.jetty.server.AbstractConnector:main: Started ServerConnector@edf4efb{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 2016-10-21 15:31:35.175:INFO:org.eclipse.jetty.server.Server:main: Started @495ms -.... +---- [[deprecated-parameters]] ==== Deprecated Parameters diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc index 8e76fc9cb549..52d8e3de1bae 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-apache-log4j.adoc @@ -24,7 +24,7 @@ This is accomplished by configuring Jetty for logging to http://logging.apache.o A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with log4j. [source, screen] -.... +---- [mybase]$ mkdir modules [mybase]$ cd modules @@ -46,7 +46,7 @@ INFO: resources initialised transitively INFO: resources enabled in ${jetty.base}/start.ini [mybase]$ java -jar /opt/jetty-dist/start.jar -.... +---- The replacement `logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc index 5e6a5a028eae..b134472af9e5 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging-native.adoc @@ -33,7 +33,7 @@ This native implementation is very non-performant and is not guaranteed to exist A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. [source, screen] -.... +---- [mybase]$ mkdir modules [mybase]$ cd modules @@ -53,7 +53,7 @@ INFO: resources initialised transitively INFO: resources enabled in ${jetty.base}/${jetty.base} [mybase]$ java -jar /opt/jetty-dist/start.jar -.... +---- The replacement `logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc index db84b95f0382..72c099c4a71b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-java-util-logging.adoc @@ -26,7 +26,7 @@ If you want to use the built-in native `JavaUtilLog` implementation, see #exampl A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for logging with `java.util.logging`. [source, screen] -.... +---- [mybase]$ mkdir modules [mybase]$ cd modules @@ -48,7 +48,7 @@ INFO: resources initialised transitively INFO: resources enabled in ${jetty.base}/start.ini [mybase]$ java -jar /opt/jetty-dist/start.jar -.... +---- The replacement `logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc index 85e2c0675566..b27c314fd461 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc @@ -38,7 +38,7 @@ See https://github.com/jetty-project/jetty-webapp-logging/blob/master/jetty-weba A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by Logback. [source,screen,] -.... +---- [mybase]$ curl -O https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-webapp-logging/9.4.27/jetty-webapp-logging-9.4.27-config.jar % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed @@ -113,7 +113,7 @@ DOWNLD: https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-webapp-logging/9. INFO : Base directory was modified $ -.... +---- This replacement `centralized-webapp-logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-sifting.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-sifting.adoc index a93a17808f97..8979e827e68e 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-sifting.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-sifting.adoc @@ -23,9 +23,9 @@ This page describes how to create log files at the server level and name them ba This can be done with SLF4J + Logback + Jetty Webapp Logging in the mix. Find example projects for this feature at github: -.... +---- https://github.com/jetty-project/jetty-and-logback-example -.... +---- .GitHub Example Project [cols=",",options="header",] diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc index fcea287e7cf5..f4a683d486ec 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback.adoc @@ -24,7 +24,7 @@ This is accomplished by configuring Jetty for logging to `Logback`, which uses h A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for logging with logback. [source, screen] -.... +---- [mybase]$ mkdir modules [mybase]$ cd modules @@ -44,7 +44,7 @@ DOWNLOAD: https://raw.githubusercontent.com/jetty-project/logging-modules/master DOWNLOAD: https://raw.githubusercontent.com/jetty-project/logging-modules/master/logback/jetty-logging.properties to resources/jetty-logging.properties [mybase]$ java -jar /opt/jetty-dist/start.jar -.... +---- The replacement `logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc index bdc0c49f6813..7e2b52919c61 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-slf4j-multiple-loggers.adoc @@ -87,7 +87,7 @@ It also requires including the other Slf4j binding JARs in the classpath, along A convenient replacement `logging` module has been created to bootstrap the `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by logback. [source, screen] -.... +---- [mybase]$ mkdir modules [mybase]$ cd modules @@ -113,7 +113,7 @@ INFO: resources initialised transitively INFO: resources enabled in ${jetty.base}/start.ini [mybase]$ java -jar /opt/jetty-dist/start.jar -.... +---- The replacement `logging.mod` performs a number of tasks. diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/jetty-server-dump.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/jetty-server-dump.adoc index e6e3777b11a4..8542d55ac1ad 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/jetty-server-dump.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/jetty-server-dump.adoc @@ -79,7 +79,7 @@ The Server MBean has a `dump()` method, which dumps everything, plus a `dumpStdE This is a dump of the OneServletContext embedded example with extra threadpool information: -.... +---- Server@59906517{STARTED}[9.4.32-SNAPSHOT] - STARTED += QueuedThreadPool[qtp488044861]@1d16f93d{STARTED,8<=8<=200,i=2,r=4,q=0}[ReservedThreadExecutor@16267862{s=2/4,p=0}] - STARTED | += ReservedThreadExecutor@16267862{s=2/4,p=0} - STARTED @@ -221,4 +221,4 @@ Server@59906517{STARTED}[9.4.32-SNAPSHOT] - STARTED +> jdk.internal.loader.ClassLoaders$AppClassLoader@2c13da15 +> jdk.internal.loader.ClassLoaders$PlatformClassLoader@7364985f key: +- bean, += managed, +~ unmanaged, +? auto, +: iterable, +] array, +@ map, +> undefined -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc index db6ef685425d..4672c3da03ff 100644 --- a/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/runner/jetty-runner.adoc @@ -35,25 +35,25 @@ Let's assume we have a very simple webapp that does not need any resources from Starting it is as simple as performing the following: [source, screen] -.... +---- > java -jar jetty-runner.jar simple.war -.... +---- This will start Jetty on port 8080, and deploy the webapp to `/`. Your webapp does not have to be packed into a war, you can deploy a webapp that is a directory instead in the same way: [source, screen] -.... +---- > java -jar jetty-runner.jar simple -.... +---- In fact, the webapp does not have to be a war or even a directory, it can simply be a Jetty link:#using-context-provider[context xml] file that describes your webapp: [source, screen] -.... +---- > java -jar jetty-runner.jar simple-context.xml -.... +---- [NOTE] ==== @@ -82,17 +82,17 @@ You can control the context paths for them using the `--path` parameter. Here's an example of deploying 2 wars (although either or both of them could be unpacked directories instead): [source, screen] -.... +---- > java -jar jetty-runner.jar --path /one my1.war --path /two my2.war -.... +---- If you have context xml files that describe your webapps, you can fully configure your webapps in them and hence you won't need to use the command line switches. Just provide the list of context files like so: [source, screen] -.... +---- > java -jar jetty-runner.jar my-first-context.xml my-second-context.xml my-third-context.xml -.... +---- [NOTE] ==== @@ -106,9 +106,9 @@ You can easily change this on the command line using the `--port` command. Here's an example that runs our simple.war on port 9090: [source, screen] -.... +---- > java -jar jetty-runner.jar --port 9090 simple.war -.... +---- ===== Using jetty.xml Files @@ -116,9 +116,9 @@ Instead of, or in addition to, using command line switches, you can use one or m Here's an example where we apply two different `jetty.xml` files: [source, screen] -.... +---- > java -jar jetty-runner.jar --config jetty.xml --config jetty-https.xml simple.war -.... +---- [[runner-configuration-reference]] ==== Full Configuration Reference @@ -126,9 +126,9 @@ Here's an example where we apply two different `jetty.xml` files: You can see the fill set of configuration options using the `--help` switch: [source, screen] -.... +---- > java -jar jetty-runner.jar --help -.... +---- Here's what the output will look like: @@ -157,9 +157,9 @@ Context opts: Print out the version of Jetty and then exit immediately. [source, screen] -.... +---- > java -jar jetty-runner.jar --version -.... +---- ===== Configuring a Request Log Cause Jetty to write a request log with the given name. @@ -167,36 +167,36 @@ If the file is prefixed with `yyyy_mm_dd` then the file will be automatically ro Note that for finer grained configuration of the link:{JDURL}/org/eclipse/jetty/server/NCSARequestLog.html[request log], you will need to use a Jetty xml file instead. [source, screen] -.... +---- > java -jar jetty-runner.jar --log yyyy_mm_dd-requests.log my.war -.... +---- ===== Configuring the Output Log Redirect the output of jetty logging to the named file. If the file is prefixed with `yyyy_mm_dd` then the file will be automatically rolled over. [source, screen] -.... +---- > java -jar jetty-runner.jar --out yyyy_mm_dd-output.log my.war -.... +---- ===== Configuring the Interface for HTTP Like Jetty standalone, the default is for the connectors to listen on all interfaces on a machine. You can control that by specifying the name or ip address of the particular interface you wish to use with the `--host` argument: [source, screen] -.... +---- > java -jar jetty-runner.jar --host 192.168.22.19 my.war -.... +---- ===== Configuring the Port for HTTP The default port number is 8080. To link:#how-to-configure-connectors[configure a https connector], use a Jetty xml config file instead. [source, screen] -.... +---- > java -jar jetty-runner.jar --port 9090 my.war -.... +---- ===== Configuring Stop You can configure a port number for Jetty to listen on for a stop command, so you are able to stop it from a different terminal. @@ -204,18 +204,18 @@ This requires the use of a "secret" key, to prevent malicious or accidental term Use the `--stop-port` and `--stop-key` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively) parameters as arguments to the `jetty-runner`: [source, screen] -.... +---- > java -jar jetty-runner.jar --stop-port 8181 --stop-key abc123 -.... +---- Then, to stop Jetty from a different terminal, you need to supply the same port and key information. For this you'll either need a local installation of Jetty, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class. Here's how to use a Jetty installation to perform a stop: [source, screen] -.... +---- > java -jar start.jar -DSTOP.PORT=8181 -DSTOP.KEY=abc123 --stop -.... +---- ===== Configuring the Container Classpath With a local installation of Jetty, you add jars and classes to the container's classpath by putting them in the `{$jetty.base}/lib` directory. @@ -226,27 +226,27 @@ You can add 1 or more. Here's an example of configuring 2 directories: [source, screen] -.... +---- > java -jar jetty-runner.jar --lib /usr/local/external/lib --lib $HOME/external-other/lib my.war -.... +---- `--jar` adds a single jar file to the container classpath. You can add 1 or more. Here's an example of configuring 3 extra jars: [source, screen] -.... +---- > java -jar jetty-runner.jar --jar /opt/stuff/jars/jar1.jar --jar $HOME/jars/jar2.jar --jar /usr/local/proj/jars/jar3.jar my.war -.... +---- `--classes` add the location of a directory containing classes to add to the container classpath. You can add 1 or more. Here's an example of configuring a single extra classes dir: [source, screen] -.... +---- > java -jar jetty-runner.jar --classes /opt/stuff/classes my.war -.... +---- [NOTE] ==== @@ -260,15 +260,15 @@ You may optionally protect access to that context with a password. Here's an example of enabling statistics, with no password protection: [source, screen] -.... +---- > java -jar jetty-runner.jar --stats unsecure my.war -.... +---- If we wished to protect access to the `/stats` context, we would provide the location of a Jetty realm configuration file containing authentication and authorization information. For example, we could use the following example realm file from the Jetty distribution: [source, screen] -.... +---- jetty: MD5:164c88b302622e17050af52c89945d44,user admin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,admin other: OBF:1xmk1w261u9r1w1c1xmq,user @@ -276,18 +276,18 @@ plain: plain,user user: password,user # This entry is for digest auth. The credential is a MD5 hash of username:realmname:password digest: MD5:6e120743ad67abfbc385bc2bb754e297,user -.... +---- Assuming we've copied it into the local directory, we would apply it like so [source, screen] -.... +---- > java -jar jetty-runner.jar --stats realm.properties my.war -.... +---- After navigating to http://localhost:8080/ a few times, we can point to the stats servlet on http://localhost:8080/stats to see the output: -.... +---- Statistics: Statistics gathering started 1490627ms ago @@ -341,4 +341,4 @@ Total messages out: 7 Memory: Heap memory usage: 49194840 bytes Non-heap memory usage: 12611696 bytes -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc index 048b8905b3cd..e0d3eebb3d51 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/legacy/session-clustering-infinispan.adoc @@ -47,10 +47,10 @@ To do that, you can use `--skip-file-validation=infinispan` argument to start.ja You will also find the following properties, either in your base's `start.d/infinispan.ini` file or appended to your `start.ini`, depending on how you enabled the module: -.... +---- ## Unique identifier for this node in the cluster jetty.infinispanSession.workerName=node1 -.... +---- jetty.infinispanSession.workerName:: The name that uniquely identifies this node in the cluster. @@ -187,6 +187,6 @@ To do this, firstly ensure that you have included the lines containing the `getS Then, create the file `${jetty.base}/resources/hotrod-client.properties`. Add the following line to this file: -.... +---- infinispan.client.hotrod.marshaller=org.eclipse.jetty.session.infinispan.WebAppMarshaller -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc index e88b55511454..4227b352e615 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base-listconfig.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [mybase]$ java -jar $JETTY_HOME/start.jar --list-config Java Environment: @@ -67,4 +67,4 @@ No classpath entries and/or version information available show. Jetty Active XMLs: ------------------ (no xml files specified) -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc index 463339e99ce4..26bda37fb581 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-empty-base.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [jetty]$ mkdir mybase [jetty]$ cd mybase [mybase]$ ls -la @@ -30,4 +30,4 @@ WARNING: Nothing to start, exiting ... Usage: java -jar start.jar [options] [properties] [configs] java -jar start.jar --help # for more information -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc index 4ff9fa35d5ac..54039d3c92bf 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy-listconfig.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [mybase]$ java -jar $JETTY_HOME/start.jar --list-config Java Environment: @@ -83,4 +83,4 @@ ${jetty.home}/etc/jetty.xml ${jetty.home}/etc/jetty-webapp.xml ${jetty.home}/etc/jetty-deploy.xml ${jetty.home}/etc/jetty-http.xml -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc index a91018219089..9686194bd889 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-http-webapp-deploy.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [mybase]$ java -jar $JETTY_HOME/start.jar --add-to-start=http,webapp,deploy INFO : webapp initialized in ${jetty.base}/start.ini INFO : server transitively enabled, ini template available with --add-to-start=server @@ -27,4 +27,4 @@ INFO : http initialized in ${jetty.base}/start.ini INFO : deploy initialized in ${jetty.base}/start.ini MKDIR : ${jetty.base}/webapps INFO : Base directory was modified -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc index bd342af54911..7934cbec2ac6 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-logging-modules.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=logging,-internal Available Modules: @@ -91,4 +91,4 @@ Modules for tag 'requestlog': Depend: server, logback-core, resources LIB: lib/logback/logback-access-${logback.version}.jar XML: etc/jetty-logback-access.xml -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc index cb67e500ccdc..d0fb9fd89347 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/screen-list-modules.adoc @@ -17,7 +17,7 @@ // [source, screen] -.... +---- [mybase]$ java -jar ../start.jar --list-modules Available Modules: @@ -728,4 +728,4 @@ Modules for tag 'session': Tags: session Depend: server XML: etc/sessions/id-manager.xml -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index fffc3dff8300..50fa5ba36839 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -22,11 +22,11 @@ The most basic way of starting the Jetty standalone server is to execute the `start.jar`, which is a bootstrap for starting Jetty with the configuration you want. [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ java -jar start.jar 2013-09-23 11:27:06.654:INFO:oejs.Server:main: jetty-{VERSION} ... -.... +---- Jetty is a highly modularized web server container. Very little is mandatory and required, and most components are optional; you enable or disable them according to the needs of your environment. @@ -90,10 +90,10 @@ Lists the resolved configuration that will start Jetty. * Server XML configuration files --dry-run:: Print the command line that the start.jar generates, then exit. This may be used to generate command lines when the start.ini includes -X or -D arguments: -.... +---- $ java -jar start.jar --dry-run > jetty.sh $ . jetty.sh -.... +---- --dry-run=:: Print specific parts of the command line. The parts are a comma separated list of: @@ -104,17 +104,17 @@ Print specific parts of the command line. The parts are a comma separated list o * "args" - the arguments passed to the main class It is possible to decompose the start command: -.... +---- $ OPTS=$(java -jar start.jar --dry-run=opts,path) $ MAIN=$(java -jar start.jar --dry-run=main) $ ARGS=$(java -jar start.jar --dry-run=args) $ java $OPTS -Dextra=opt $MAIN $ARGS extra=arg -.... +---- Alternatively to create an args file for java: -.... +---- $ java -jar start.jar --dry-run=opts,path,main,args > /tmp/args $ java @/tmp/args -.... +---- --exec:: Forces the start to use a forked instance of java to run Jetty. Some modules include `--exec` in order to set java command line options. @@ -164,9 +164,9 @@ If a module contains an .ini template with properties, you can also edit these p To do this, simply list the property and its value after the `-add-to-start` command, such as in the following example: + [source, screen] -.... +---- $ java -jar start.jar --add-to-start=http jetty.http.port=8379 jetty.http.host=1.2.3.4 -.... +---- + Doing this will uncomment the property in the associated .ini file and set it to the value specified. --update-ini:: @@ -174,14 +174,14 @@ Used to update a specified property or properties that exist in an existing .ini Jetty scans the command line, `${jetty.base}` and `${jetty.home}` for .ini files that have the specified property and update it accordingly. + [source, screen] -.... +---- $ java -jar ../start.jar --update-ini jetty.http.port=8417 ConfigSource ConfigSource ${jetty.base} INFO : http property updated jetty.http.port=8417 INFO : http updated ${jetty.base}/start.d/http.ini ConfigSource ${jetty.home} -.... +---- + --create-startd:: Creates a `${jetty.base}/start.d/` directory. @@ -198,13 +198,13 @@ Please see link:#start-vs-startd[Start.ini vs. Start.d] for more information. Advanced feature: Creates a graphviz http://graphviz.org/content/dot-language[dot file] of the module graph as it exists for the active `${jetty.base}`. + [source, screen] -.... +---- # generate module.dot $ java -jar start.jar --module=websocket --write-module-graph=modules.dot # post process to a PNG file $ dot -Tpng -o modules.png modules.dot -.... +---- + See http://graphviz.org/[graphviz.org] for details on http://graphviz.org/content/command-line-invocation[how to post-process this dotty file] into the output best suited for your needs. @@ -252,18 +252,18 @@ This requires the use of a "secret" key, to prevent malicious or accidental term Use the `STOP.PORT` and `STOP.KEY` (or `-DSTOP.PORT=` and `-DSTOP.KEY=`, respectively, which will set these as system parameters) parameters as arguments to the `start.jar`: [source, screen] -.... +---- > java -jar ${JETTY_HOME}/start.jar STOP.PORT=1234 STOP.KEY=secretpassword -.... +---- Then, to stop Jetty from a different terminal, you need to supply this port and key information. You can either use a copy of the Jetty distribution, the link:#jetty-maven-plugin[jetty-maven-plugin], the link:#jetty-ant[jetty-ant plugin], or a custom class to accomplish this. Here's how to use the Jetty distribution, leveraging `start.jar`, to perform a stop: [source, screen] -.... +---- > java -jar start.jar STOP.PORT=8181 STOP.KEY=abc123 --stop -.... +---- [NOTE] ==== @@ -292,33 +292,33 @@ Default is https://repo1.maven.org/maven2/. If you have a need for a shaded version of `start.jar` (such as for Gradle), you can achieve this via a Maven dependency. [source, xml] -.... +---- org.eclipse.jetty jetty-start {VERSION} shaded -.... +---- ==== Start.jar without exec or forking. Some Jetty modules include the `--exec` option so that java command line options can be set. Also some `start.jar` options (eg. `--jpms`) include an implicit `--exec`. To start jetty without forking a new JVM instance from the start JVM, the `--dry-run` option can be used to generate a command line: -.... +---- $ CMD=$(java -jar start.jar --dry-run) $ $CMD -.... +---- It is possible to decompose the start command so that it can be modified: -.... +---- $ OPTS=$(java -jar start.jar --dry-run=opts,path) $ MAIN=$(java -jar start.jar --dry-run=main) $ ARGS=$(java -jar start.jar --dry-run=args) $ java $OPTS -Dextra=opt $MAIN $ARGS extra=arg -.... +---- Alternatively to create an args file for java: -.... +---- $ java -jar start.jar --dry-run=opts,path,main,args > /tmp/args $ java @/tmp/args -.... \ No newline at end of file +---- \ No newline at end of file diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc index 5b6974dcb18f..04478176fc95 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-base-vs-home.adoc @@ -55,7 +55,7 @@ For more details on how startup with start.jar works, see link:#executing-startj The Jetty Distribution comes with an example `${jetty.base}` which enables the various demonstration webapps and server configurations. [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ ls -la total 496 @@ -85,12 +85,12 @@ drwxrwxr-x 2 user group 4096 Oct 8 06:54 webapps/ 2013-10-16 09:08:47.817:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-distribution-{VERSION}/demo-base/webapps/] at interval 1 2013-10-16 09:08:48.072:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION! ... -.... +---- If you want to see what the Jetty base looks like without executing Jetty, you can simply list the configuration by using the `--list-config` command. [source, screen] -.... +---- [demo-base]$ java -jar $JETTY_HOME/start.jar --list-config Java Environment: @@ -212,7 +212,7 @@ Jetty Active XMLs: ${jetty.home}/etc/jetty-rewrite.xml ${jetty.base}/etc/demo-rewrite-rules.xml ${jetty.base}/etc/test-realm.xml -.... +---- The `--list-config` command line option displays what the configuration will look like when starting Jetty. This includes information on the Java environment to the system properties, the classpath and the Active Jetty IoC XML used to build up the Jetty server configuration. @@ -222,7 +222,7 @@ Of note, is that the output will make it known where the configuration elements If you look at the `${jetty.base}/start.ini` you will see a layout similar to below. [source, screen] -.... +---- [my-base]$ cat start.ini # Enable security via jaas, and configure it @@ -256,7 +256,7 @@ jetty.dump.stop=false --module=resources --module=client --module=annotations -.... +---- In this example, `${jetty.base}/start.ini` is the main startup configuration entry point for Jetty. You will see that we are enabling a few modules for Jetty, specifying some properties, and also referencing some Jetty IoC XML files (namely the `etc/demo-rewrite-rules.xml` and `etc/test-realm.xml` files) @@ -274,7 +274,7 @@ The Jetty `start.jar` and XML files always assume that both `${jetty.home}` and You can opt to manually define the `${jetty.home}` and `${jetty.base}` directories, such as this: [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -285,14 +285,14 @@ You can opt to manually define the `${jetty.home}` and `${jetty.base}` directori 2013-10-16 09:08:47.802:INFO:oejs.Server:main: jetty-{VERSION} 2013-10-16 09:08:47.817:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/my-base/webapps/] at interval 1 ... -.... +---- Alternately, you can declare one directory and let the other one be discovered. The following example uses default discovery of `${jetty.home}` by using the parent directory of wherever `start.jar` itself is, and a manual declaration of `${jetty.base}`. [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -301,7 +301,7 @@ The following example uses default discovery of `${jetty.home}` by using the par 2013-10-16 09:08:47.802:INFO:oejs.Server:main: jetty-{VERSION} 2013-10-16 09:08:47.817:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/my-base/webapps/] at interval 1 ... -.... +---- But Jetty recommends that you always start Jetty from the directory that is your `${jetty.base}` and starting Jetty by referencing the `start.jar` in your `{$jetty.home}` remotely. @@ -309,7 +309,7 @@ the `start.jar` in your `{$jetty.home}` remotely. The following demonstrates this by allowing default discovery of `${jetty.home}` via locating the `start.jar`, and using the `user.dir` System Property for `${jetty.base}`. [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ pwd /home/user/jetty-distribution-{VERSION} @@ -319,7 +319,7 @@ The following demonstrates this by allowing default discovery of `${jetty.home}` 2013-10-16 09:08:47.802:INFO:oejs.Server:main: jetty-{VERSION} 2013-10-16 09:08:47.817:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/my-base/webapps/] at interval 1 ... -.... +---- [IMPORTANT] ==== diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc index 914b44744c2c..eacf1d1a97a3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-classpath.adoc @@ -55,7 +55,7 @@ The `--list-classpath` command line option is used as such. (Demonstrated with the link:#demo-base[demo-base from the Jetty Distribution]) [source, screen] -.... +---- [demo-base]$ java -jar $JETTY_HOME/start.jar --list-classpath Jetty Server Classpath: @@ -105,6 +105,6 @@ Note: order presented here is how they would appear on the classpath. 39: {VERSION} | ${jetty.home}/lib/websocket/websocket-common-{VERSION}.jar 40: {VERSION} | ${jetty.home}/lib/websocket/websocket-server-{VERSION}.jar 41: {VERSION} | ${jetty.home}/lib/websocket/websocket-servlet-{VERSION}.jar -.... +---- Of note is that an attempt is made to list the internally declared version of each artifact on the Server Classpath, which can potentially help when diagnosing classpath issues. diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc index e4bd538d81ef..d7a6e767394a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-jpms.adoc @@ -37,7 +37,7 @@ or greater, and explicitly referencing the "enterprise" classes as dependencies, To start Jetty on the module-path rather than the class-path, it is enough to add the `--jpms` option to the command line, for example: [source, screen] -.... +---- $ mkdir my-jetty-base $ cd my-jetty-base $ java -jar $JETTY_HOME/start.jar --add-to-start=http @@ -46,7 +46,7 @@ INFO : http initialized in ${jetty.base}/start.ini INFO : threadpool transitively enabled, ini template available with --add-to-start=threadpool INFO : Base directory was modified $ java -jar $JETTY_HOME/start.jar --jpms -.... +---- The example above creates a link:#startup-base-and-home[Jetty base directory] and enables the `http` module using the `--add-to-start` command. The server then starts Jetty on the module-path using the `--jpms` option. @@ -60,19 +60,19 @@ You will have two JVMs running: one that runs `start.jar` and one that runs Jett If you are interested in the details of how the command line to run Jetty on the module-path looks like, you can add the `--dry-run` option: [source, screen] -.... +---- $ java -jar $JETTY_HOME/start.jar --jpms --dry-run -.... +---- This will give an output looking something like this (broken in sections for clarity): [source, screen] -.... +---- /opt/openjdk-11+28/bin/java --module-path /opt/jetty/lib/servlet-api-3.1.jar:/opt/jetty/lib/jetty-schemas-3.1.jar:/opt/jetty/lib/jetty-http-9.4.13-SNAPSHOT.jar:... --patch-module servlet.api=/opt/jetty/lib/jetty-schemas-3.1.jar --module org.eclipse.jetty.xml/org.eclipse.jetty.xml.XmlConfiguration /opt/jetty/etc/jetty-threadpool.xml /opt/jetty/etc/jetty.xml ... -.... +---- The `--module-path` option specifies the list of Jetty jars. This list depends on the Jetty modules that have been enabled via the link:#startup-modules[`--add-to-start`] command. @@ -96,13 +96,13 @@ When Jetty runs on the class-path, this is easily achieved by using a link:#cust [source, screen] .mysql.mod -.... +---- [description] MySQL module [lib] lib/mysql/mysql-connector-java-*.jar -.... +---- However, when running on the module-path, things are quite different. @@ -113,7 +113,7 @@ To add the JPMS module `java.sql` to the module graph, you need to modify your c [source, screen] .mysql.mod -.... +---- [description] MySQL module @@ -122,7 +122,7 @@ lib/mysql/mysql-connector-java-*.jar [jpms] add-modules: java.sql -.... +---- The new `[jpms]` section is only used when Jetty is started on the module-path via the `--jpms` command line option. @@ -132,7 +132,7 @@ If `mysql-connector-java-*.jar` were a proper JPMS modular jar with name (for ex [source, screen] .mysql.mod -.... +---- [description] MySQL module @@ -141,21 +141,21 @@ lib/mysql/mysql-connector-java-*.jar [jpms] add-modules: com.mysql.jdbc -.... +---- The JPMS module `java.sql` does not need to be explicitly added because it would be a dependency of the `com.mysql.jdbc` module and therefore automatically added to the module graph. The `[jpms]` section has the following format: [source, screen] -.... +---- [jpms] add-modules: (,)* patch-module: =(:)* add-opens: /=(,)* add-exports: /=(,)* add-reads: =(,)* -.... +---- [[jpms-module-path-alternative]] ==== Alternative way to start Jetty on the module-path @@ -166,20 +166,20 @@ that specifies that you want to run using JPMS (and possibly add some JPMS speci [source, screen] .jpms.mod -.... +---- [ini] --jpms [jpms] # Additional JPMS configuration. -.... +---- The `[ini]` section is equivalent to passing the `--jpms` option to the command line. The `[jpms]` section (see also the link:#jpms-advanced-config[advanced JPMS configuration section]) allows you specify additional JPMS configuration. [source, screen] -.... +---- $ mkdir jetty-base-jpms $ cd jetty-base-jpms $ mkdir modules @@ -189,4 +189,4 @@ $ cp /tmp/jpms.mod modules/ $ java -jar $JETTY_HOME/start.jar --add-to-start=http,jpms # Jetty will start on the module-path. $ java -jar $JETTY_HOME/start.jar -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc index 280040057839..36da4432b9bd 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-modules.adoc @@ -70,7 +70,7 @@ Modules activated when a `start.d` directory exists will be stored as a single f Below is an example of a fresh `${jetty.base}` that will create a `start.d` directory and activate several modules. [source, screen] -.... +---- [jetty.home]$ mkdir mybase [jetty.home]$ cd mybase/ [mybase]$ java -jar ../start.jar --create-startd @@ -96,7 +96,7 @@ drwxr-xr-x 3 staff staff 102 Aug 29 15:16 .. -rw-r--r-- 1 staff staff 2250 Aug 29 15:19 server.ini -rw-r--r-- 1 staff staff 265 Aug 29 15:19 webapp.ini -rw-r--r-- 1 staff staff 177 Aug 29 15:19 websocket.ini -.... +---- In the example, we first create a new `${jetty.base}` and then create the `start.d` directory with the `--create-startd` command. Next, we use the `--add-to-start` command which activates the modules and creates their respective ini files in the `start.d` directory. @@ -106,7 +106,7 @@ Doing this will create the `start.d` directory and copy your existing `start.ini Any new modules added to the server will have their own `.ini` file created in the `start.d` directory. [source, screen] -.... +---- [mybase]$ java -jar ../start.jar --add-to-start=server,client,webapp,websocket INFO : webapp initialised in ${jetty.base}/start.ini INFO : server initialised in ${jetty.base}/start.ini @@ -131,7 +131,7 @@ INFO : Base directory was modified └── start.d ├── ssl.ini └── start.ini -.... +---- [NOTE] -- @@ -161,7 +161,7 @@ Listed in the ini file is the associated module file and any properties that can Below is an example of the `requestlog.ini` file: [source, screen] -.... +---- # --------------------------------------- # Module: requestlog --module=requestlog @@ -192,7 +192,7 @@ Below is an example of the `requestlog.ini` file: ## Whether to log LogLatency # jetty.requestlog.loglatency=false -.... +---- The first lines name the module file being called (located in `{$jetty.home/modules}`). Subsequent lines list properties that can be changed as well as a description for each property. diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc index 646c71f30599..37424d2db03a 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-overview.adoc @@ -72,16 +72,16 @@ XML Files:: The simplest way to start Jetty is via the `start.jar` mechanism using the following Java command line: [source, screen] -.... +---- [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=8080 -.... +---- This command uses the `start.jar` mechanism to bootstrap the classpath, properties, and XML files with the metadata obtained from the `http` module. Specifically the `http` module is defined in the `${jetty.home}/modules/http.mod` file, and includes the following: [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ cat modules/http.mod [depend] server @@ -92,7 +92,7 @@ etc/jetty-http.xml [ini-template] jetty.http.port=8080 http.timeout=30000 -.... +---- The `http` module declares that `http` depends on the server module, uses the `jetty-http.xml` file, and can be parameterized with `jetty.http.port` and `http.timeout` parameters. The INI-template section is not actually used by the command above, so the `jetty.http.port` must still be defined on the command line. @@ -100,7 +100,7 @@ The INI-template section is not actually used by the command above, so the `jett Following the server dependency, the `${jetty.home}/modules/server.mod` file includes: [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ cat modules/server.mod [lib] lib/servlet-api-3.1.jar @@ -116,7 +116,7 @@ etc/jetty.xml [ini-template] threads.min=10 threads.max=200 -.... +---- The `server` module declares the libraries the server needs and to use `jetty.xml` file. The combined metadata of the `http` and `server` modules results in `start.jar` generating the effective Java command line required to start Jetty. @@ -124,7 +124,7 @@ The combined metadata of the `http` and `server` modules results in `start.jar` Another way to see this is by asking Jetty what its configuration looks like by appending --list-config to the command line: [source, screen] -.... +---- [jetty-distribution-{VERSION}]$ java -jar start.jar --module=http jetty.http.port=9099 --list-config Java Environment: @@ -174,7 +174,7 @@ Jetty Active XMLs: ------------------ ${jetty.home}/etc/jetty.xml ${jetty.home}/etc/jetty-http.xml -.... +---- This represents the entirety of the configuration that is applied to start Jetty. @@ -183,7 +183,7 @@ If you don't want to use the `start.jar` bootstrap, you can start Jetty using a The following is the equivalent Java command line for what the `start.jar` bootstrap above performs. [source, screen] -.... +---- [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ echo jetty.http.port=8080 > /tmp/jetty.properties [jetty-distribution-{VERSION}]$ export JETTY_HOME=`pwd` @@ -203,14 +203,14 @@ org.eclipse.jetty.xml.XmlConfiguration \ /tmp/jetty.properties \ $JETTY_HOME/etc/jetty.xml \ $JETTY_HOME/etc/jetty-http.xml -.... +---- The Java command line sets up the classpath with the core Jetty jars and the servlet API, executes the XmlConfiguration class and passes it some XML files that define the server and an HTTP connector running on the port defined in the `jetty.properties` file. You can further simplify the startup of this server by using the INI template defined by the modules to create a `start.ini` file with the command: [source, screen] -.... +---- [user]$ cd jetty-distribution-{VERSION} [jetty-distribution-{VERSION}]$ mkdir example-base [example-base]$ cd example-base @@ -231,11 +231,11 @@ total 12 drwxrwxr-x 2 user webgroup 4096 Oct 4 11:55 ./ drwxrwxr-x 12 user webgroup 4096 Oct 4 11:49 ../ -rw-rw-r-- 1 user webgroup 250 Oct 4 11:55 start.ini -.... +---- Once complete, you can edit the `start.ini` file to modify any parameters and you can run the server with the simple command: [source, screen] -.... +---- [example-base]$ java -jar $JETTY_HOME/start.jar -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc index 9a7dd5004cef..6b4ebd990fed 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-unix-service.adoc @@ -28,7 +28,7 @@ This script is suitable for setting up Jetty as a service in Unix. The minimum steps to get Jetty to run as a Service include: [source, screen] -.... +---- [/opt/jetty]# tar -zxf /home/user/downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# cd jetty-distribution-{VERSION}/ [/opt/jetty/jetty-distribution-{VERSION}]# ls @@ -43,7 +43,7 @@ JETTY_HOME=/opt/jetty/jetty-distribution-{VERSION} [/opt/jetty/jetty-distribution-{VERSION}]# service jetty start Starting Jetty: OK Wed Nov 20 10:26:53 MST 2013 -.... +---- From this demonstration we can see that Jetty started successfully as a Unix Service from the `/opt/jetty/jetty-distribution-{VERSION}` directory. @@ -58,11 +58,11 @@ The techniques outlined here assume an installation on Linux (demonstrated on Ub Prepare some empty directories to work with. [source, screen] -.... +---- # mkdir -p /opt/jetty # mkdir -p /opt/web/mybase # mkdir -p /opt/jetty/temp -.... +---- The directory purposes are as follows: @@ -80,14 +80,14 @@ Jetty 9.3 requires Java 8 (or greater) to run. Make sure you have it installed. [source, screen] -.... +---- # apt-get install openjdk-8-jdk -.... +---- Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html [source, screen] -.... +---- # java -version java version "1.6.0_27" OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2) @@ -113,15 +113,15 @@ update-alternatives: using /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java to pro java version "1.7.0_25" OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) -.... +---- It is recommended that you create a user to specifically run Jetty. This user should have the minimum set of privileges needed to run Jetty. [source, screen] -.... +---- # useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty -.... +---- This will create a user called `jetty`, belonging to the group called `jetty`, with no shell access (aka `/bin/false`), and home directory at `/opt/jetty/temp`. @@ -130,12 +130,12 @@ Download a copy of the Jetty distribution from the link:#jetty-downloading[Offic Unpack it into place. [source, screen] -.... +---- [/opt/jetty]# tar -zxf /home/user/Downloads/jetty-distribution-{VERSION}.tar.gz [/opt/jetty]# ls -F jetty-distribution-{VERSION}/ [/opt/jetty]# mkdir /opt/jetty/temp -.... +---- It might seem strange or undesirable to unpack the first portion of the jetty-distribution directory name too. But starting with Jetty 9 the split between `${jetty.home}` and `${jetty.base}` allows for easier upgrades of Jetty itself while isolating your webapp specific configuration. @@ -154,7 +154,7 @@ While this is still supported, we encourage you to setup a proper `${jetty.base} -- [source, screen] -.... +---- # cd /opt/web/mybase/ [/opt/web/mybase]# ls [/opt/web/mybase]# java -jar /opt/jetty/jetty-distribution-{VERSION}/start.jar \ @@ -171,7 +171,7 @@ While this is still supported, we encourage you to setup a proper `${jetty.base} INFO : Base directory was modified [/opt/web/mybase]# ls -F start.ini webapps/ -.... +---- At this point you have configured your `/opt/web/mybase` to enable the following modules: @@ -192,43 +192,43 @@ See xref:start-jar[] for more details and options on setting up and configuring Copy your war file into place. [source, screen] -.... +---- # cp /home/user/projects/mywebsite.war /opt/web/mybase/webapps/ -.... +---- Most service installations will want Jetty to run on port 80, now is the opportunity to change this from the default value of `8080` to `80`. Edit the `/opt/web/mybase/start.ini` and change the `jetty.http.port` value. [source, screen] -.... +---- # grep jetty.http.port /opt/web/mybase/start.ini jetty.port=80 -.... +---- Change the permissions on the Jetty distribution and webapp directories so that the user you created can access it. [source, screen] -.... +---- # chown --recursive jetty /opt/jetty # chown --recursive jetty /opt/web/mybase -.... +---- Next we need to make the Unix System aware that we have a new Jetty Service that can be managed by the standard `service` calls. [source, screen] -.... +---- # cp /opt/jetty/jetty-distribution-{VERSION}/bin/jetty.sh /etc/init.d/jetty # echo "JETTY_HOME=/opt/jetty/jetty-distribution-{VERSION}" > /etc/default/jetty # echo "JETTY_BASE=/opt/web/mybase" >> /etc/default/jetty # echo "JETTY_USER=jetty" >> /etc/default/jetty # echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty -.... +---- Test out the configuration: [source, screen] -.... +---- # service jetty status Checking arguments to Jetty: START_INI = /opt/web/mybase/start.ini @@ -254,14 +254,14 @@ RUN_CMD = /usr/bin/java -jar /opt/jetty/jetty-distribution-{VERSION}/start.jar console-capture.xml jetty-started.xml -.... +---- You now have a configured `${jetty.base}` in `/opt/web/mybase` and a `${jetty.home}` in `/opt/jetty/jetty-distribution-{VERSION}`, along with the service level files necessary to start the service. Test the service to make sure it starts up and runs successfully. [source, screen] -.... +---- # service jetty start Starting Jetty: OK Wed Nov 20 12:35:28 MST 2013 @@ -272,6 +272,6 @@ Jetty running pid=2958 [/opt/web/mybase]# ps u 2958 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND jetty 2958 5.3 0.1 11179176 53984 ? Sl 12:46 0:00 /usr/bin/java -Djetty... -.... +---- You should now have your server running. diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc index 3305348e9600..b549f7bc1990 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/startup-windows-service.adoc @@ -28,7 +28,7 @@ The techniques outlined here are based on Windows 7 (64-bit), using JDK 8 (64-bi Prepare some empty directories to work with. [source, screen] -.... +---- C:\> mkdir opt C:\> cd opt C:\opt> mkdir jetty @@ -48,7 +48,7 @@ C:\opt> dir 11/21/2013 04:06 PM myappbase 11/21/2013 04:06 PM temp 0 File(s) 0 bytes -.... +---- The directory purposes are as follows: @@ -70,12 +70,12 @@ This is intentionally kept separate from the standard temp directories of Window Or download Java 8 from: http://www.oracle.com/technetwork/java/javase/downloads/index.html [source, screen] -.... +---- C:\opt>java -version java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) -.... +---- Download a copy of the ZIP distribution from the link:#jetty-downloading[Official Eclipse Download Site] @@ -84,7 +84,7 @@ Extract the contents of the `jetty-distribution-{VERSION}` directory to `C:\opt\ Once complete, the contents of the `C:\opt\jetty` directory should look like this: [source, screen] -.... +---- C:\opt\jetty>dir Volume in drive C has no label. Volume Serial Number is C8CF-820B @@ -110,7 +110,7 @@ C:\opt\jetty>dir 11/21/2013 12:13 PM webapps 6 File(s) 453,659 bytes 11 Dir(s) 306,711,420,928 bytes free -.... +---- Download a copy of the https://commons.apache.org/proper/commons-daemon/binaries.html[Apache ProcRun] native binaries. @@ -123,7 +123,7 @@ The ZIP file has both 32 bit and 64 bit versions of this file. Once you are complete, the contents of `C:\opt` directory should look like this: [source, screen] -.... +---- C:\opt> dir Volume in drive C has no label. Volume Serial Number is DEAD-BEEF @@ -139,14 +139,14 @@ C:\opt> dir 11/21/2013 04:11 PM 104,448 prunmgr.exe 11/21/2013 04:11 PM 80,896 prunsrv.exe 2 File(s) 185,344 bytes -.... +---- Now it's time to setup your new `${jetty.base}` directory to have all of your WebApps and the configurations that they need. We'll start by specifying which modules we want to use (this will create a start.ini file and also create a few empty directories for you) [source, screen] -.... +---- C:\opt\myappbase>java -jar ..\jetty\start.jar --add-to-start=deploy,http,console-capture WARNING: deploy initialised in ${jetty.base}\start.ini (appended) @@ -174,7 +174,7 @@ C:\opt\myappbase>dir 11/21/2013 12:49 PM webapps 1 File(s) 1,355 bytes 4 Dir(s) 306,711,064,576 bytes free -.... +---- At this point you have configured your `C:\opt\myappbase` to enable the following modules: @@ -193,9 +193,9 @@ See the section on xref:start-jar[] for more details and options on setting up a At this point you merely have to copy your WAR files into the `{$jetty.base}/webapps` directory. [source, screen] -.... +---- C:\opt\myappbase> copy C:\projects\mywebsite.war webapps\ -.... +---- At this point you should have your directories, Java, the Jetty distribution, and your webapp specifics setup and ready for operation. diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc index b96373d6b2a7..8afb0d074210 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/garbage-collection.adoc @@ -32,7 +32,7 @@ They provide good information about the GC activity of your JVM, producing logs .JDK 8 Garbage Collection Logging Configuration [source,screen] -.... +---- -Xloggc:/path/to/myjettybase/logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails @@ -40,18 +40,18 @@ They provide good information about the GC activity of your JVM, producing logs -XX:+PrintReferenceGC -XX:+PrintTenuringDistribution -XX:+PrintAdaptiveSizePolicy -.... +---- .JDK 9 Garbage Collection Logging Configuration [source,screen] -.... +---- Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log:time,level,tags -.... +---- There are not many recommended options for GC that can apply to all users. However, the most obvious one is to disable explicit GC (this is performed regularly by RMI and can introduce an abnormal amount of GC pauses). [source,screen] -.... +---- -XX:+DisableExplicitGC -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc index 73c29c8dcc2c..6a5f3bad0250 100644 --- a/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/tuning/high-load.adoc @@ -55,12 +55,12 @@ You can configure most of these in `/etc/security/limits.conf` or via `sysctl`. You should increase TCP buffer sizes to at least 16MB for 10G paths and tune the auto-tuning (keep in mind that you need to consider buffer bloat). [source, screen] -.... +---- $ sysctl -w net.core.rmem_max=16777216 $ sysctl -w net.core.wmem_max=16777216 $ sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" $ sysctl -w net.ipv4.tcp_wmem="4096 16384 16777216" -.... +---- ====== Queue Sizes @@ -70,19 +70,19 @@ If you are running a high-volume server and connections are getting refused at a This setting can take a bit of finesse to get correct: if you set it too high, resource problems occur as it tries to notify a server of a large number of connections, and many remain pending, but if you set it too low, refused connections occur. [source, screen] -.... +---- $ sysctl -w net.core.somaxconn=4096 -.... +---- The `net.core.netdev_max_backlog` controls the size of the incoming packet queue for upper-layer (Java) processing. The default (2048) may be increased and other related parameters adjusted with: [source, screen] -.... +---- $ sysctl -w net.core.netdev_max_backlog=16384 $ sysctl -w net.ipv4.tcp_max_syn_backlog=8192 $ sysctl -w net.ipv4.tcp_syncookies=1 -.... +---- ====== Ports @@ -90,20 +90,20 @@ If many outgoing connections are made (for example, on load generators), the ope Thus it is best to increase the port range, and allow reuse of sockets in `TIME_WAIT`: [source, screen] -.... +---- $ sysctl -w net.ipv4.ip_local_port_range="1024 65535" $ sysctl -w net.ipv4.tcp_tw_recycle=1 -.... +---- ====== File Descriptors Busy servers and load generators may run out of file descriptors as the system defaults are normally low. These can be increased for a specific user in `/etc/security/limits.conf`: -.... +---- theusername hard nofile 40000 theusername soft nofile 40000 -.... +---- ====== Congestion Control @@ -111,17 +111,17 @@ Linux supports pluggable congestion control algorithms. To get a list of congestion control algorithms that are available in your kernel run: [source, screen] -.... +---- $ sysctl net.ipv4.tcp_available_congestion_control -.... +---- If cubic and/or htcp are not listed, you need to research the control algorithms for your kernel. You can try setting the control to cubic with: [source, screen] -.... +---- $ sysctl -w net.ipv4.tcp_congestion_control=cubic -.... +---- ====== Mac OS diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index 05f4c062661d..ef1b14356dd3 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -35,7 +35,7 @@ Out of the box, Jetty provides several link:#startup-modules[modules] for enabli If you startup Jetty with the `--list-modules=connector` command, you can see a list of all available connector modules: [source, screen] -.... +---- [mybase]$ java -jar $JETTY_HOME/start.jar --list-modules=connector Available Modules: @@ -178,13 +178,13 @@ Modules for tag 'connector': Depend: unixsocket-http XML: etc/jetty-unixsocket-secure.xml ... -.... +---- To enable a connector, simply activate the associated module. Below is an example of activating both the `http` and `https` modules in a fresh link:#startup-base-and-home[Jetty base] using the link:#start-vs-startd[start.d directory]: [source, screen] -.... +---- [mybase] java -jar $JETTY_HOME/start.jar --create-startd MKDIR : ${jetty.base}/start.d INFO : Base directory was modified @@ -204,14 +204,14 @@ INFO : Base directory was modified └── start.d ├── http.ini └── https.ini -.... +---- When the `http` and `https` modules were activated, so too were any modules they were dependent on, in this case `server` and `ssl`, as well as any dependencies for those modules, such as the `etc` and `ketystore` directories for `ssl`. At this point the server has been configured with connectors for both HTTP and HTTPS and can be started: [source, screen] -.... +---- [mybase] java -jar $JETTY_HOME/start.jar 2017-08-31 10:19:58.855:INFO::main: Logging initialized @372ms to org.eclipse.jetty.util.log.StdErrLog 2017-08-31 10:19:59.076:INFO:oejs.Server:main: jetty-9.4.6.v20170531 @@ -220,14 +220,14 @@ At this point the server has been configured with connectors for both HTTP and H 2017-08-31 10:19:59.151:INFO:oejus.SslContextFactory:main: x509=X509@5d624da6(mykey,h=[],w=[]) for SslContextFactory@2ef9b8bc(file:///Users/staff/installs/repository/jetty-distribution-{VERSION}/mybase/etc/keystore,file:///Users/staff/installs/repository/jetty-distribution-{VERSION}/mybase/etc/keystore) 2017-08-31 10:19:59.273:INFO:oejs.AbstractConnector:main: Started ServerConnector@2b98378d{SSL,[ssl, http/1.1]}{0.0.0.0:8443} 2017-08-31 10:19:59.274:INFO:oejs.Server:main: Started @791ms -.... +---- When modules are enabled, they are loaded with several default options. These can be changed by editing the associated module ini file in the `start.d` directory (or the associated lines in `server.ini` if your implementation does not use `start.d`). For example, if we examine the `http.ini` file in our `start.d` directory created above, we will see the following settings: [source, screen] -.... +---- # --------------------------------------- # Module: http # Enables a HTTP connector on the server. @@ -261,30 +261,30 @@ For example, if we examine the `http.ini` file in our `start.d` directory create ## HTTP Compliance: RFC7230, RFC2616, LEGACY # jetty.http.compliance=RFC7230 -.... +---- To make a change to these settings, uncomment the line (by removing the #) and change the property to the desired value. For example, if you wanted to change the HTTP port to 5231, you would edit the line as follows: [source, screen] -.... +---- ... ## Connector port to listen on jetty.http.port=5231 ... -.... +---- Now when the server is started, HTTP connections will enter on port 5231: [source, screen] -.... +---- [mybase] java -jar ../start.jar 2017-08-31 10:31:32.955:INFO::main: Logging initialized @366ms to org.eclipse.jetty.util.log.StdErrLog 2017-08-31 10:31:33.109:INFO:oejs.Server:main: jetty-9.4.6.v20170531 2017-08-31 10:31:33.146:INFO:oejs.AbstractConnector:main: Started ServerConnector@2ef9b8bc{HTTP/1.1,[http/1.1]}{0.0.0.0:5231} ... 2017-08-31 10:31:33.263:INFO:oejs.Server:main: Started @675ms -.... +---- Every module has their own set of configuration options, and reviewing them all is recommended. For additional information on the module system, please refer to our documentation on link:#startup-modules[Startup Modules]. diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index 804605f2287a..93f49d151d34 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -361,7 +361,7 @@ image::configuring/connectors/images/certificate-chain.png[title="Certificate ch [literal] .The structure of KeyStore file: -.... +---- ├── PrivateKeyEntry │   ├── PrivateKey │   ├── Certificate chain @@ -372,7 +372,7 @@ image::configuring/connectors/images/certificate-chain.png[title="Certificate ch │   └── Intermediary CA certificate └── TrustedCertEntry    └── Root CA certificate -.... +---- [NOTE] ==== @@ -639,21 +639,21 @@ the other is `$JETTY/etc/truststore` which contains intermediary CA and root CA. [literal] .The structure of `$JETTY/etc/keystore` -.... +---- └── PrivateKeyEntry    ├── PrivateKey    └── Certificate chain       └── Server certificate (end entity) -.... +---- [literal] .The structure of `$JETTY/etc/truststore` -.... +---- ├── TrustedCertEntry │   └── Intermediary CA certificate └── TrustedCertEntry    └── Root CA certificate -.... +---- [[configuring-sslcontextfactory]] ==== Configuring the Jetty SslContextFactory diff --git a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc index b1aa864338dd..2c83a7e86b83 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/contexts/temporary-directories.adoc @@ -27,15 +27,15 @@ Whether you set the location of the temporary directory - or you let Jetty creat By default, Jetty will create a temporary directory for each web application. The name of the directory will be of the form: -.... +---- "jetty-"+host+"-"+port+"-"+resourceBase+"-_"+context+"-"+virtualhost+"-"+randomdigits+".dir" -.... +---- For example: -.... +---- jetty-0.0.0.0-8080-test.war-_test-any-8900275691885214790.dir -.... +---- Where `0.0.0.0` is the host address, `8080` is the port, `test.war` is the resourceBase, `test` is the context path (with / converted to _), `any` is the virtual host, and `randomdigits` are a string of digits guaranteed to be unique. @@ -156,7 +156,7 @@ You will also need verify the line including the `--exec` command is not comment Below is an example of the standard `jvm.ini` file altered to include a reference to a temp directory. [source, screen] -.... +---- # --------------------------------------- # Module: jvm # A noop module that creates an ini template useful for @@ -186,7 +186,7 @@ Below is an example of the standard `jvm.ini` file altered to include a referenc # -XX:+PrintCommandLineFlags # -XX:+DisableExplicitGC -Djava.io.tmpdir=/path/to/desired/directory -.... +---- ==== The "work" Directory diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc index a2b36c44e44a..83b60fb960bf 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jaas-support.adoc @@ -150,9 +150,9 @@ There are 2 aspects to this: To accomplish the above, use the Jetty link:#startup-overview[startup] link:#startup-modules[modules mechanism] to add the JAAS link:#startup-modules[module]: [source, screen] -.... +---- java -jar start.jar --add-to-start=jaas -.... +---- [NOTE] ==== diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc index 2879a356b729..5358d071ac4b 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/jetty-home-and-jetty-base.adoc @@ -54,15 +54,15 @@ It also assumes you are using `start.ini` to configure your server features. 1. Create a base directory anywhere. + [source, screen] -.... +---- [/home/user]$ mkdir my-base [/home/user]$ cd my-base -.... +---- 2. Add the modules for SSL, HTTP, and webapp deployment. Adding modules in this way will append the associated module properties to the `${jetty.base}/start.ini` file. + [source, screen] -.... +---- [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --add-to-start=http,https,deploy INFO : webapp transitively enabled, ini template available with --add-to-start=webapp @@ -79,11 +79,11 @@ MKDIR : ${jetty.base}/etc COPY : ${jetty.home}/modules/ssl/keystore to ${jetty.base}/etc/keystore MKDIR : ${jetty.base}/webapps INFO : Base directory was modified -.... +---- 3. Look at your directory. + [source, screen] -.... +---- [my-base]$ ls -la total 20 drwxrwxr-x 4 user group 4096 Oct 8 06:55 ./ @@ -91,52 +91,52 @@ drwxr-xr-x 103 user group 4096 Oct 8 06:53 ../ drwxrwxr-x 2 user group 4096 Oct 8 06:55 etc/ -rw-rw-r-- 1 user group 815 Oct 8 06:55 start.ini drwxrwxr-x 2 user group 4096 Oct 8 06:55 webapps/ -.... +---- 4. Copy your WAR files into webapps. + [source, screen] -.... +---- [my-base]$ ls -la [my-base]$ cp ~/code/project/target/gadget.war webapps/ -.... +---- 5. Copy your keystore into place. + [source, screen] -.... +---- [my-base]$ cp ~/code/project/keystore etc/keystore -.... +---- 6. Edit the `start.ini` to configure your SSL settings. + [source, screen] -.... +---- [my-base]$ cat start.ini -.... +---- 7. Initialize module ssl. + -.... +---- --module=ssl -.... +---- 8. Define the port to use for secure redirection. + -.... +---- jetty.secure.port=8443 -.... +---- 9. Set up a demonstration keystore and truststore. + -.... +---- jetty.keystore=etc/keystore jetty.truststore=etc/keystore -.... +---- 10. Set the demonstration passwords. + -.... +---- jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 -.... +---- 11. Initialize the module server. + -.... +---- --module=server threads.min=10 threads.max=200 @@ -144,24 +144,24 @@ threads.timeout=60000 #jetty.host=myhost.com jetty.dump.start=false jetty.dump.stop=false -.... +---- 12. Initialize module http. + -.... +---- --module=http jetty.http.port=8080 http.timeout=30000 -.... +---- 13. Initialize module deploy. + -.... +---- --module=deploy -.... +---- Look at the configuration you have at this point. [source, screen] -.... +---- [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-config Java Environment: @@ -229,17 +229,17 @@ Jetty Active XMLs: ${jetty.home}/etc/jetty-http.xml ${jetty.home}/etc/jetty-ssl.xml ${jetty.home}/etc/jetty-deploy.xml -.... +---- Now start Jetty. [source, screen] -.... +---- [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar 2013-10-08 07:06:55.837:INFO:oejs.Server:main: jetty-{VERSION} 2013-10-08 07:06:55.853:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/my-base/webapps/] at interval 1 2013-10-08 07:06:55.872:INFO:oejs.ServerConnector:main: Started ServerConnector@72974691{HTTP/1.1}{0.0.0.0:8080} -.... +---- [[reviewing-ssl-config]] ==== Reviewing the Configuration @@ -262,7 +262,7 @@ Notice that you have `--module=` here and there; you have wrapped up the g You can see the list of modules: [source, screen] -.... +---- [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar --list-modules Jetty All Available Modules: @@ -440,7 +440,7 @@ Jetty Active Module Tree: + Module: ssl [enabled] + Module: webapp [transitive] + Module: deploy [enabled] -.... +---- These are the modules by name, the libraries they bring in, the XML configurations they use, the other modules they depend on (even optional ones), and if the module is in use, where it was enabled. @@ -449,9 +449,9 @@ While you can manage the list of active modules yourself, it is much easier to e If you want to start using a new module: [source, screen] -.... +---- [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --add-to-start=https -.... +---- This adds the `--module=` lines and associated properties (the parameterized values mentioned above), to your `start.ini`. @@ -482,9 +482,9 @@ For more information on the `start.jar` in 9.1, see xref:start-jar[]. 2. Go to your base directory and just use the distribution, no editing. + [source, screen] -.... +---- [my-base]$ java -jar /home/user/jetty-distribution-{VERSION}/start.jar -.... +---- * The Jetty distribution provides, out of the box, the XML configuration files, in this case `jetty-http.xml` and `jetty-ssl.xml`. These can be found in the `${jetty.home}/etc/` directory. * We have parameterized all of the configurable values in those XMLs. @@ -506,9 +506,9 @@ By default, the module system keeps things sane, and transitively includes all d You can see what the configuration looks like, after all of the modules are resolved, without starting Jetty via: [source, screen] -.... +---- [my-base] $ java -jar ../jetty-distribution-{VERSION}/start.jar --list-config -.... +---- Just because the JARs exist on disk does not mean that they are in use. The configuration controls what is used. @@ -518,6 +518,6 @@ Notice that only a subset of the JARs from the distribution are in use. The modules you have enabled determine that subset. [source, screen] -.... +---- [my-base]$ java -jar ~/jetty-distribution-{VERSION}/start.jar --list-config -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc index f886c5fe2bf7..be1a4a185d9b 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/security/secure-passwords.adoc @@ -33,30 +33,30 @@ The class `org.eclipse.jetty.util.security.Password` can be used to generate all Run it without arguments to see usage instructions: [source, screen] -.... +---- $ java -cp lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password Usage - java org.eclipse.jetty.util.security.Password [] If the password is ?, the user will be prompted for the password -.... +---- For example, to generate a secured version of the password `password` for the user `username`: [source, screen] -.... +---- $ java -cp ../lib/jetty-util-{VERSION}.jar org.eclipse.jetty.util.security.Password username password 2017-12-13 11:19:27.928:INFO::main: Logging initialized @95ms to org.eclipse.jetty.util.log.StdErrLog password OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v MD5:5f4dcc3b5aa765d61d8327deb882cf99 CRYPT:usjRS48E8ZADM -.... +---- If using a external tool to create/verify the MD5 hash (such as `md5sum` or `md5`), be sure to verify a carriage return (CR) or new line is not added. For example: [source, screen] -.... +---- //With a CR included $ echo password | md5sum 286755fad04869ca523320acce0dc6a4 *- @@ -64,14 +64,14 @@ $ echo password | md5sum //Using the `-n` option to exclude a new line from being added. $ echo -n password | md5sum 5f4dcc3b5aa765d61d8327deb882cf99 *- -.... +---- [IMPORTANT] ==== When using the `DIGEST` method in tandem with an MD5 hash, you must hash the entire `user:realm:password` string or you will encounter issues with authenticating. ==== [source, screen] -.... +---- $ java -cp ../lib/jetty-util-9.4.7.v20170914.jar org.eclipse.jetty.util.security.Password username username:realm:password 2017-12-13 11:34:33.263:INFO::main: Logging initialized @97ms to org.eclipse.jetty.util.log.StdErrLog username:realm:password @@ -81,7 +81,7 @@ CRYPT:usulxZfApLefk $ echo -n username:realm:password | md5sum 66999343281b2624585fd58cc9d36dfc *- -.... +---- You can now cut and paste whichever secure version you choose into your configuration file or Java code. diff --git a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc index dabaca72b63f..a10715cad120 100644 --- a/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc +++ b/jetty-documentation/src/main/asciidoc/development/ant/jetty-ant.adoc @@ -101,9 +101,9 @@ This is the minimal configuration you need. You can now start Jetty on the defau At the command line enter: [source, screen] -.... +---- > ant jetty.run -.... +---- ==== Configuring the Jetty Container @@ -348,9 +348,9 @@ stopping::: To stop jetty via Ant, enter: + [source, screen] -.... +---- > ant jetty.stop -.... +---- execution without pausing ant::: diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc index 2cc5bd0c4f9f..9ba569557d0d 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc @@ -117,14 +117,14 @@ For example, when a `ContextHandler` calls some application listeners to inform The `HandlerWrapper` is specialized to the link:{JDURL}/org/eclipse/jetty/server/handler/ScopedHandler.html[`ScopedHandler`] abstract class, which supports a daisy chain of scopes. For example if a `ServletHandler` is nested within a `ContextHandler`, the order and nesting of execution of methods is: -.... +---- Server.handle(...) ContextHandler.doScope(...) ServletHandler.doScope(...) ContextHandler.doHandle(...) ServletHandler.doHandle(...) SomeServlet.service(...) -.... +---- Thus when the `ContextHandler` handles the request, it does so within the scope the `ServletHandler` has established. diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc index 1e7c8421096f..cde3c3f8ab79 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/jetty-helloworld.adoc @@ -41,11 +41,11 @@ Please consider using link:#jetty-maven-helloworld[Maven] to manage your project Use curl as follows: [source, screen] -.... +---- > mkdir Demo > cd Demo > curl -o jetty-all-uber.jar https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/{VERSION}/jetty-all-{VERSION}-uber.jar -.... +---- [[writing-helloworld-example]] ==== Writing a HelloWorld Example @@ -65,10 +65,10 @@ include::{SRCDIR}/examples/embedded/src/main/java/org/eclipse/jetty/embedded/Hel The following command compiles the HelloWorld class: [source, screen] -.... +---- > mkdir classes > javac -d classes -cp jetty-all-uber.jar HelloWorld.java -.... +---- [[running-handler-and-server]] ==== Running the Handler and Server @@ -76,9 +76,9 @@ The following command compiles the HelloWorld class: The following command runs the HelloWorld example: [source, screen] -.... +---- > java -cp classes:jetty-all-uber.jar org.eclipse.jetty.embedded.HelloWorld -.... +---- You can now point your browser at http://localhost:8080/[http://localhost:8080] to see your hello world page. diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc index 42ea9b3fce6b..9bdb7d0f6bcc 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/metro.adoc @@ -44,7 +44,7 @@ The Metro distribution you downloaded should also contain several example web ap Here's an example of the log output from Jetty when one of the sample Metro wars (from `$metro.home/samples/async`) is deployed to Jetty: [source, screen] -.... +---- [2093] java -jar start.jar 2013-07-26 15:47:53.480:INFO:oejs.Server:main: jetty-9.0.4.v20130625 @@ -59,4 +59,4 @@ INFO: WSSERVLET14: JAX-WS servlet initializing 2013-07-26 15:47:56.853:INFO:oejs.ServerConnector:main: Started ServerConnector@47dce809{HTTP/1.1}{0.0.0.0:8080} -.... +---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index 6338804c9797..ed38b3c3d025 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -148,9 +148,9 @@ If the path is relative, it is resolved against either *jetty.home* or **jetty.h You can use this ability to mix and match jetty configuration files to add functionality, such as adding in a https connector. Here's an example of adding a HTTPS connector, using the relevant files from the jetty-distribution: + -.... +---- etc/jetty.xml, etc/jetty-http.xml, /opt/jetty/etc/jetty-ssl.xml, /opt/jetty/etc/jetty-https.xml, etc/jetty-deploy.xml -.... +---- + Note that regardless of whether you set the *jetty.home* or *jetty.home.bundle* property, when Jetty executes the configuration files, it will set an appropriate value for *jetty.home* so that references in xml files to `` will work. @@ -1089,7 +1089,7 @@ org.osgi.framework.system.packages=org.osgi.framework;version=1.7.0, org.osgi.fr You should now be able to start Felix, and deploy all the jars listed on this page. You should see output similar to this on the console, using the `felix:lb` command: -.... +---- ID|State |Level|Name 0|Active | 0|System Bundle (4.4.1) 1|Active | 1|ASM (7.0) @@ -1128,7 +1128,7 @@ You should see output similar to this on the console, using the `felix:lb` comma 35|Active | 1|Eclipse Compiler for Java(TM) (3.8.2.v20130121-145325) 36|Active | 1|Mortbay EL API and Implementation (8.5.33.1) 37|Active | 1|Mortbay Jasper (8.5.33.1) -.... +---- ===== Eclipse diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc index ec3ba3619621..890eed06ff0d 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/spring-usage.adoc @@ -29,9 +29,9 @@ The skeleton of a jetty spring module can be enabled from the jetty-distribution For example: [source, screen] -.... +---- $ java -jar start.jar --add-to-start=spring -.... +---- This (or the alternative link:#start-jar[--add-to-start]=spring command) creates a `${jetty.home}/lib/spring` directory and populates it with the jetty-spring integration jar. It does NOT supply the spring jars and their dependencies. diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc index 4bf2372455c8..670844f714df 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/weld.adoc @@ -31,21 +31,21 @@ This can be accomplished either by enabling one of the startup link:#startup-mod * the `cdi-decorate` module is the preferred Weld integration. The activation of this module by Weld can be confirmed by the following Weld log: [source, screen] -.... +---- INFO: WELD-ENV-001212: Jetty CdiDecoratingListener support detected, CDI injection will be available in Listeners, Servlets and Filters. -.... +---- * the `cdi-spi` module works with Weld, but may restrict some non standard features. The activation of this module by Weld can be confirmed by the following Weld log: [source, screen] -.... +---- INFO: WELD-ENV-001213: Jetty CDI SPI support detected, CDI injection will be available in Listeners, Servlets and Filters. -.... +---- * the deprecated `cdi2` module works with Weld prior to 3.1.2.Final. The activation of this module by Weld can be confirmed by the following Weld log: [source, screen] -.... +---- INFO: WELD-ENV-001201: Jetty 7.2+ detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported. -.... +---- To activate the preferred `cdi-decorate` module use: ------------------------- diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc index 58d7e7344b9d..11099192bbde 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-jspc-maven-plugin.adoc @@ -165,9 +165,9 @@ For example, the following profile will only be invoked if the flag `-Dprod` is The following invocation would cause your code to be compiled, the jsps to be compiled, the and s inserted in the `web.xml` and your webapp assembled into a war: [source, screen] -.... +---- $ mvn -Dprod package -.... +---- [[jspc-overlay-precompile]] ==== Precompiling Jsps with Overlaid Wars diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc index d5d0ebc2c04a..b06d69fe48f8 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-helloworld.adoc @@ -45,11 +45,11 @@ Maven uses convention over configuration, so it is best to use the project struc You can use _link:#archetypes[http://maven.apache.org/guides/introduction/introduction-to-archetypes.html[archetypes]]_ to quickly setup Maven projects, but we will set up the structure manually for this simple tutorial example: [source, screen] -.... +---- > mkdir JettyMavenHelloWorld > cd JettyMavenHelloWorld > mkdir -p src/main/java/org/example -.... +---- [[creating-helloworld-class]] ===== Creating the HelloWorld Class @@ -151,15 +151,15 @@ Use an editor to create the file `pom.xml` in the `JettyMavenHelloWorld` directo You can now compile and execute the HelloWorld class by using these commands: [source, screen] -.... +---- > mvn clean compile exec:java -.... +---- You can point your browser to `http://localhost:8080` to see the _Hello World_ page. You can observe what Maven is doing for you behind the scenes by using the `mvn dependency:tree` command, which reveals the transitive dependency resolved and downloaded as: [source, screen] -.... +---- > mvn dependency:tree [INFO] Scanning for projects... ... @@ -183,7 +183,7 @@ You can observe what Maven is doing for you behind the scenes by using the `mvn [INFO] Finished at: 2016-08-01T13:46:42-04:00 [INFO] Final Memory: 15M/209M [INFO] ------------------------------------------------------------------------ -.... +---- [[developing-standard-webapp-with-jetty-and-maven]] ==== Developing a Standard WebApp with Jetty and Maven @@ -193,12 +193,12 @@ Now we will examine instead how to develop a standard webapp with Maven and Jett First create the Maven structure (you can use the maven webapp archetype instead if you prefer): [source, screen] -.... +---- > mkdir JettyMavenHelloWarApp > cd JettyMavenHelloWebApp > mkdir -p src/main/java/org/example > mkdir -p src/main/webapp/WEB-INF -.... +---- [[creating-servlet]] ===== Creating a Servlet @@ -302,9 +302,9 @@ Use an editor to create the file `pom.xml` with the following contents in the `J Now you can both build and run the web application without needing to assemble it into a war by using the link:#jetty-maven-plugin[jetty-maven-plugin] via the command: [source, screen] -.... +---- > mvn jetty:run -.... +---- You can see the static and dynamic content at `http://localhost:8080/hello` @@ -317,8 +317,8 @@ The full reference is at link:#jetty-maven-plugin[Configuring the Jetty Maven Pl You can create a Web Application Archive (WAR) file from the project with the command: [source, screen] -.... +---- > mvn package -.... +---- The resulting war file is in the `target` directory and may be deployed on any standard servlet server, including link:#configuring-deployment[Jetty]. diff --git a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc index 6460b2d273ea..869cd1708f81 100644 --- a/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc +++ b/jetty-documentation/src/main/asciidoc/development/maven/jetty-maven-plugin.adoc @@ -49,9 +49,9 @@ First, add `jetty-maven-plugin` to your `pom.xml` definition: Then, from the same directory as your root `pom.xml`, type: [source, screen] -.... +---- mvn jetty:run -.... +---- This starts Jetty and serves up your project on http://localhost:8080/. @@ -78,16 +78,16 @@ There are different goals to accomplish these tasks, as well as several others. To see a list of all goals supported by the Jetty Maven plugin, do: [source, screen] -.... +---- mvn jetty:help -.... +---- To see the detailed list of parameters that can be configured for a particular goal, in addition to its description, do: [source, screen] -.... +---- mvn jetty:help -Ddetail=true -Dgoal= -.... +---- [[configuring-jetty-container]] ==== Configuring the Jetty Container @@ -655,9 +655,9 @@ Use the `jvmArgs` parameter to pass system properties to the forked process. To deploy your unassembled web app to Jetty running in a new JVM: [source, screen] -.... +---- mvn jetty:run-forked -.... +---- Jetty continues to execute until you either: @@ -796,9 +796,9 @@ For example, in the configuration above support for JMX is configured by adding To deploy your unassembled web app to jetty running as a local distribution: [source, screen] -.... +---- mvn jetty:run-distro -.... +---- [[jetty-start-goal]] @@ -882,9 +882,9 @@ Here's a configuration example: Then, while Jetty is running (in another window), type: [source, screen] -.... +---- mvn jetty:stop -.... +---- The `stopPort` must be free on the machine you are running on. If this is not the case, you will get an "Address already in use" error message after the "Started ServerConnector ..." message. diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index e7e9f3f648f3..e1aaf0c27b8f 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -53,18 +53,18 @@ First you need to obtain the source of the documentation project. Clone the repository: [source, screen] -.... +---- $ git clone https://github.com/eclipse/jetty.project.git -.... +---- You will now have a local directory with all of jetty, including the jetty-documentation. Now we move on to building it. [source, screen] -.... +---- $ cd jetty.project/jetty-documentation $ mvn install -.... +---- While maven is running you may see a lot of files being downloaded. If you are not familiar with maven, then what you are seeing is maven setting up the execution environment for generating the documentation. @@ -73,7 +73,7 @@ The downloads are all of the java dependencies that are required to make this bu After a while the downloading will stop and you should see the execution of the asciidoctor-maven-plugin followed by the docbkx-maven-plugin. [source, screen] -.... +---- [INFO] --- asciidoctor-maven-plugin:1.5.3:process-asciidoc (output-html) @ jetty-documentation --- [INFO] Rendered /Users/jesse/src/projects/jetty/jetty-docs/src/main/asciidoc/index.adoc [INFO] @@ -82,12 +82,12 @@ After a while the downloading will stop and you should see the execution of the [INFO] Applying customization parameters [INFO] Chunking output. [INFO] See /Users/jesse/src/projects/jetty/jetty-docs/target/docbkx/html/index for generated file(s) -.... +---- The build is finished once you see a message akin to this: [source, screen] -.... +---- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ @@ -95,7 +95,7 @@ The build is finished once you see a message akin to this: [INFO] Finished at: Tue Oct 25 14:15:37 CDT 2011 [INFO] Final Memory: 14M/229M [INFO] ------------------------------------------------------------------------ -.... +---- You may now open your web browser and browse to the first page of the html output to see what you have produced! Generally you can do this with File -> Open File -> which will open a file system browsing screen, navigate to your jetty-documentation directory and then further into target/docbkx/html/index/index.html which is the first page of the produced documentation. @@ -112,9 +112,9 @@ In the above example you have cloned directly from our canonical documentation r Obviously we can not allow anyone immediate access to this repository so you must make a fork of it for your own and then issue back pull requests to build up documentation karma. In English that means that you would go to the url of the documentation in github: -.... +---- https://github.com/eclipse/jetty.project -.... +---- When you are on this page you will see a little button called 'Fork' which you can click and you will be taken back to your main page on github where you have a new repository. When you checkout this repository you are free to commit to your heart's delight all the changes you so direly wish to see in the Jetty documentation. @@ -126,9 +126,9 @@ Do make sure the change works and the build isn't broken though so make sure you Then commit the change. [source, screen] -.... +---- $ git commit -s -m "Tweaked the introduction to fix a horrid misspelled word." src/main/asciidoc/quickstart/introduction/topic.xml -.... +---- [NOTE] ==== @@ -139,9 +139,9 @@ This will commit the change in your local repository. You can then push the change up to your repository on github. [source, screen] -.... +---- $ git push -.... +---- Now you'll see some output showing that your change has been propagated to your repository on github. In fact if you navigate to that repository at the top of the files list you should see your comment there. @@ -174,9 +174,9 @@ id's:: The id values go into a global namespace so they must be unique across the entire document or the last example will win and any cross links will go there. Below is an example of an id. -.... +---- [[this-id-an-id]] -.... +---- link vs xref:: The `link:` item should be generally used for linking around the document when you want to choose the text that will be rendered in the link itself. @@ -188,7 +188,7 @@ version differences:: license blocks:: Each adoc file should contain the license block that exists in the index.adoc file and a copy has been added to the bottom of this page as well for reference. -.... +---- // // ======================================================================== // Copyright (c) 1995-2020 Mort Bay Consulting Pty Ltd and others. @@ -206,7 +206,7 @@ license blocks:: // You may elect to redistribute this code under either of these licenses. // ======================================================================== // -.... +---- Some admonition examples: diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc index ff0d7a5af91e..094addbaacae 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/release-testing.adoc @@ -24,22 +24,22 @@ To test a Jetty release, complete the following steps for each release you want 1. Download the staged release: + [source, screen] -.... +---- wget https://oss.sonatype.org/content/repositories/jetty-[reponumber]/org/eclipse/jetty/jetty-distribution/[jetty-version]/jetty-distribution-9.[jetty-minor-version].tar.gz -.... +---- 2. Extract to a directory of your choice. 3. Start jetty: + [source, screen] -.... +---- cd [installdir] ; java -jar start.jar -.... +---- 4. If there are no exceptions, proceed. Otherwise, investigate. 5. Open http://localhost:8080/ in a browser. In the examples section click "Test Jetty Webapp". You should see the `test.war` webapp. 6. Go through ALL the tests and verify that everything works as expected. @@ -49,34 +49,34 @@ To test a Jetty release, complete the following steps for each release you want 10. Verify that hot deployment works. + [source, screen] -.... +---- cd [installdir] ; touch [pathToJettyDistribution]/webapps.demo/test.xml -.... +---- 11. Verify that `test.war` gets redeployed in `STDOUT`. 12. Verify that the spdy example webapp and spdy-proxy do work + [source, screen] -.... +---- cd jetty_src/jetty-spdy/spdy-example-webapp mvn jetty:run-forked -.... +---- 13. Browse to https://localhost:8443 and verify that all looks ok 14. Stop the server with CTRL+C and restart it in proxy mode: + [source, screen] -.... +---- mvn -Pproxy jetty:run-forked -.... +---- 15. Browse to http://localhost:8080 and https://localhost:8443 and verify that all looks ok [[testing-cometd]] @@ -85,16 +85,16 @@ To test a Jetty release, complete the following steps for each release you want 1. Clone CometD. + [source, screen] -.... +---- clone git://github.com/cometd/cometd.git git clone git://github.com/cometd/cometd.git -.... +---- 2. Edit `pom.xml` and update `jetty-version.` + -.... +---- UTF-8 @@ -111,16 +111,16 @@ To test a Jetty release, complete the following steps for each release you want -.... +---- 3. Build Cometd: + [source, screen] -.... +---- mvn clean install -.... +---- 4. Be patient. 5. Run the loadtest as it is described here: http://cometd.org/documentation/2.x/howtos/loadtesting. Keep the default values, but make sure that you raise the clients setting to 1000. @@ -129,7 +129,7 @@ Run the loadtest until ''JIT compilation time'' is close to a value of zero (abo On a MacBook Pro i7 2.6ghz dualcore produces the following: + [source, screen] -.... +---- ======================================== Statistics Started at Fri Mar 09 13:44:35 CET 2012 @@ -199,32 +199,32 @@ Messages - Network Latency Min/Ave/Max = 1/114/417 ms Thread Pool - Concurrent Threads max = 239 | Queue Size max = 1002 | Queue Latency avg/max = 12/101 ms -.... +---- 7. Deploy `cometd.war` to the `webapps` directory of the jetty-distribution tested above. + [source, screen] -.... +---- cp cometd-demo/target/cometd-demo-[version].war [pathToJetty]/jetty-distribution-[jetty-version]/webapps/ -.... +---- 8. Start jetty and make sure there are no exceptions. + [source, screen] -.... +---- cd [pathToJetty] && java -jar start.jar -.... +---- 9. Go through all pages of the demo and test them: + -.... +---- http://localhost:8080/cometd-demo-2.4.1-SNAPSHOT/ -.... +---- If all tests are green, you are done! diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc index afc9284e16a7..494579307698 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/releasing-jetty.adoc @@ -32,16 +32,16 @@ This release script is for jetty-9 (to release jetty-7 or jetty-8 see older docu + These follow a strict format and will be used when prompted during step link:#prepare-release-step[listitem_title] below. + -.... +---- Release Version : 9.0.0.v20130322 (v[year][month][day]) Next Development Version : 9.0.1-SNAPSHOT Tag Name : jetty-9.9.0.v20130322 -.... +---- 2. We use the 'release-9' branch to avoid problems with other developers actively working on the master branch. + [source, screen] -.... +---- // Get all of the remotes $ git pull origin // Create a local tracking branch (if you haven't already) @@ -51,29 +51,29 @@ $ git checkout release-9 // Merge from master into the branch (this becomes your point in time // from master that you will be releasing from) $ git merge --no-ff master -.... +---- 3. Update the VERSION.txt with changes from the git logs, this populates the resolves issues since the last release. + [source, screen] -.... +---- $ mvn -N -Pupdate-version -.... +---- 4. Edit the VERSION.txt file to set the 'Release Version' at the top alongside the Date of this release. + [source, screen] -.... +---- $ vi VERSION.txt -.... +---- 5. Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + [source, screen] -.... +---- $ git commit -m "Updating VERSION.txt top section" VERSION.txt $ git push origin release-9 -.... +---- 6. Prepare the Release + @@ -84,12 +84,12 @@ The `eclipse-release` profile is required on the prepare in order to bring in th ==== + [source, screen] -.... +---- $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \ -DdevelopmentVersion=9.0.1-SNAPSHOT \ -Dtag=jetty-9.0.0.v20130322 \ -Peclipse-release -.... +---- 7. Perform the Release + [NOTE] @@ -98,9 +98,9 @@ This step performs the release and deploys it to a oss.sonatype.org staging repo ==== + [source, screen] -.... +---- $ mvn release:perform -.... +---- 8. Set up files for next development versions. + Edit `VERSION.txt` for 'Next Development Version' at the top. @@ -109,11 +109,11 @@ Do not date this line. Make sure everything is commit'd and pushed to github.com/eclipse/jetty.project + [source, screen] -.... +---- $ vi VERSION.txt $ git commit -m "Updating VERSION.txt top section" VERSION.txt $ git push origin release-9 -.... +---- 9. Close the staging repository on oss.sonatype.org @@ -125,11 +125,11 @@ $ git push origin release-9 * Merge back the changes in release-9 to master + [source, screen] -.... +---- $ git checkout master $ git merge --no-ff release-9 $ git push origin master -.... +---- [[releasing-aggregates]] ==== Building and Deploying Aggregate Javadoc and Xref @@ -141,11 +141,11 @@ If you don't know if you have access to this then you probably don't and will ne To build and deploy the aggregate javadoc and jxr bits: [source, screen] -.... +---- $ cd target/checkout $ mvn -Paggregate-site javadoc:aggregate jxr:jxr $ mvn -N site:deploy -.... +---- This will generate the aggregate docs and deploy them to the `/home/www/jetty//jetty-project` directory on download.eclipse.org. @@ -166,9 +166,9 @@ To localize the scripts to your environment: Once these are setup you can deploy a release to eclipse with the following incantation: [source, screen] -.... +---- $ ./promote-to-eclipse.sh 9.0.0.v20130322 -.... +---- Each of these scripts will download all of the relevant files from maven central and then copy them into the correct location on eclipse infrastructure. On the eclipse side of it they will also adjust the xref and javadoc documentation links if they remain broken as well as regenerate all of the html files on the eclipse download site. @@ -180,22 +180,22 @@ Since we are not allowed to have symbolic links on the download site we have to Maintaining the conventions we use on the site will allow all 'stable' links to be stable and not needed to update to the latest major Jetty build version: [source, screen] -.... +---- $ ssh @build.eclipse.org $ cd ~downloads/jetty/ $ rm -Rf stable-9 $ cp -r stable-9 $ ./index.sh -.... +---- This needs to be done for all Eclipse Jetty releases (regardless of version). In addition we have to work to reduce the footprint of jetty on the primary eclipse download resources so we want to move older releases to the eclipse archive site. [source, screen] -.... +---- $ cd ~/downloads/jetty $ mv /home/data/httpd/archive.eclipse.org/jetty/ $ ./index.sh -.... +---- Periodically we need to do the same for the osgi P2 repositories to keep the size of our downloads directory at a reasonable size. diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc index d32c169bb566..78dceb1b6498 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/source-build.adoc @@ -56,14 +56,14 @@ Jetty uses http://maven.apache.org/[Apache Maven 3] for managing its build and p Building Jetty should simply be a matter of changing into the relevant directory and executing the following commands: [source, screen] -.... +---- $ git clone https://github.com/eclipse/jetty.project.git $ cd jetty.project $ mvn install -.... +---- All relevant dependencies will be downloaded into your local repository automatically. diff --git a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc index 69994e2a14f0..7e36f6e53530 100644 --- a/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/debugging/enable-remote-debugging.adoc @@ -38,12 +38,12 @@ Via command line:: Add the required parameters on the commandline like so. + [source, screen] -.... +---- $ java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n -jar start.jar -.... +---- Via `start.ini`:: This approach is best used if you want to debug a particular jetty-distribution and not have to remember the commandline incantations. diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc index 3f3ed626b2fb..80a792224466 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc @@ -157,14 +157,14 @@ The ID must be unique for each object you create. For XML elements that contain only other XML Elements, there is a choice of using attributes or elements style. The following is an example of attribute style: -.... +---- -.... +---- Attribute style has the benefit of brevity, but is limited by: values can only be Strings; multivalued items can not contain ','; values may not be subject to property expansion or other elements that return values. Thus, the more verbose element style is available and the following is semantically equivalent to the attribute style above: -.... +---- result org.example.SomeClass @@ -172,12 +172,12 @@ Thus, the more verbose element style is available and the following is semantica value0 value1 -.... +---- Note that multivalued elements like `Arg` must be repeated and may not be comma-separated like they are when provided as attributes. It is possible to use a mix of styles and the following example shows a moretypical example that uses property expansion as the reason for element style: -.... +---- @@ -185,7 +185,7 @@ It is possible to use a mix of styles and the following example shows a moretypi value0 value1 -.... +---- Attributes may not be expressed as elements when their parent element is one that contains data. Thus `Arg`, `Item`, `Set`, `Put` and `Get` elements may not have their attributes expressed as elements. @@ -259,9 +259,9 @@ In `etc/jetty-logging.xml`: Then run the combined configuration using: -.... +---- java -jar start.jar etc/jetty.xml jetty-logging.xml -.... +---- [[jetty-xml-set]] ==== @@ -823,7 +823,7 @@ Here is a more practical example, taken from the handler configuration section i - .... + ---- ---- diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc index 9adb49a3f6a7..97f788780017 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/cloudfoundry.adoc @@ -46,10 +46,10 @@ To show how incredibly easy it is to use the Jetty buildpack with cloudfoundry, Refer to the CloudFoundry http://docs.cloudfoundry.com/[documentation] to get started, get the `cf` utilities installed and an environment configured. [source, screen] -.... +---- $ cf push snifftest --buildpack=git://github.com/jmcc0nn3ll/jetty-buildpack.git -.... +---- [TIP] ==== From a7207762225e853e86d966c35213d7c23616a8a1 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 20 Nov 2020 12:17:19 -0600 Subject: [PATCH 12/14] Reverting accidentally changed KEYS.txt Signed-off-by: Joakim Erdfelt --- KEYS.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/KEYS.txt b/KEYS.txt index 095380ac7639..5db338b664f4 100644 --- a/KEYS.txt +++ b/KEYS.txt @@ -1,8 +1,8 @@ -# GPG Release Key Fingerpr==== -Jan Bartel AED5 EE6C 45D0 FE8D 5D1B 164F 27DE D4BF 6216 ==== -Jesse McConnell 2A68 4B57 436A 81FA 8706 B53C 61C3 351A 438A ==== -Joakim Erdfelt 5989 BAF7 6217 B843 D66B E55B 2D0E 1FB8 FE4B ==== -Joakim Erdfelt B59B 67FD 7904 9843 67F9 3180 0818 D9D6 8FB6 ==== +# GPG Release Key Fingerprints +Jan Bartel AED5 EE6C 45D0 FE8D 5D1B 164F 27DE D4BF 6216 DB8F +Jesse McConnell 2A68 4B57 436A 81FA 8706 B53C 61C3 351A 438A 3B7D +Joakim Erdfelt 5989 BAF7 6217 B843 D66B E55B 2D0E 1FB8 FE4B 68B4 +Joakim Erdfelt B59B 67FD 7904 9843 67F9 3180 0818 D9D6 8FB6 7BAC Joakim Erdfelt BFBB 21C2 46D7 7768 3628 7A48 A04E 0C74 ABB3 5FEA Simone Bordet 8B09 6546 B1A8 F026 56B1 5D3B 1677 D141 BCF3 584D Olivier Lamy F254 B356 17DC 255D 9344 BCFA 873A 8E86 B437 2146 From 10fcf04b53bfe6f216113420369776b9d3c5859f Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 12:42:08 -0600 Subject: [PATCH 13/14] Clean up --- .../extras/default-handler.adoc | 5 +++-- .../extras/rewrite-handler.adoc | 2 +- .../introduction/jetty-coordinates.adoc | 2 +- .../introduction/what-version.adoc | 2 +- .../reference/contributing/documentation.adoc | 21 ++++++++++--------- .../reference/jetty-xml/jetty-xml-syntax.adoc | 2 +- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc index e11fd4240be5..79c248173ef0 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/default-handler.adoc @@ -34,10 +34,11 @@ As in the example below, if a resource to be served is not matched within the re This class is a useful template to either extend and embrace or simply provide a similar implementation for customizing to your needs. There is also an link:#error-handler[Error Handler] that services errors related to the servlet api specification, so it is best to not get the two confused. -_[NOTE] +[NOTE] ==== The `DefaultHandler` will also handle serving out the `flav.ico` file should a request make it through all of the other handlers without being resolved. -_==== +==== + [source, java] ---- Server server = new Server(8080); diff --git a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc index 33375020c376..bc57d9644c57 100644 --- a/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/extras/rewrite-handler.adoc @@ -36,7 +36,7 @@ The standard Jetty distribution bundle contains the `jetty-rewrite` link:#startu $ java -jar start.jar --add-to-start=rewrite ---- -_[NOTE] +[NOTE] ==== If you are running the standard Jetty distribution with the sample test webapp, there will be a demo of the rewrite module at http://localhost:8080/test/rewrite/ ==== diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc index ab2c02a7e4f4..da528353898f 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-coordinates.adoc @@ -19,7 +19,7 @@ [[quickstart-jetty-coordinates]] === Finding Jetty in Maven -_[IMPORTANT] +[IMPORTANT] ==== It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc index d60af5a6784f..d1f13e2dfcc8 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/what-version.adoc @@ -23,7 +23,7 @@ Jetty 9 is the most recent version of Jetty and has a great many improvements ov This documentation which focuses on Jetty 9. While many people continue to use older versions of Jetty, we generally recommend using Jetty 9 as it represents the version of Jetty that we will actively maintain and improve over the next few years. -_[IMPORTANT] +[IMPORTANT] ==== It is important that only stable releases are used in production environments. Versions that have been deprecated or are released as Milestones (M) or Release Candidates (RC) are not suitable for production as they may contain security flaws or incomplete/non-functioning feature sets. diff --git a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc index e1aaf0c27b8f..9d277307c827 100644 --- a/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/contributing/documentation.adoc @@ -210,31 +210,32 @@ license blocks:: Some admonition examples: -__________________________________________ + [NOTE] +==== A note about the previous case to be aware of. -______________________________________________ +==== -________________________________________ [IMPORTANT] +==== Important notes are marked with an icon. -________________________________________ +==== -________________________________ [TIP] +==== Tips that make your life easier. -________________________________ +==== -_______________________________________________________ [CAUTION] +==== Places where you have to be careful what you are doing. -_______________________________________________________ +==== -__________________________________________________________________________________________________________________ [WARNING] +==== Where extreme care has to be taken. Data corruption or other nasty things may occur if these warnings are ignored. -__________________________________________________________________________________________________________________ +==== ==== Oddities diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc index 80a792224466..5980f7d83121 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/jetty-xml-syntax.adoc @@ -823,7 +823,7 @@ Here is a more practical example, taken from the handler configuration section i - ---- + ... ---- From faf0c074dee6a2089b878a9878e32a4f042a96aa Mon Sep 17 00:00:00 2001 From: Chris Walker Date: Fri, 20 Nov 2020 12:57:26 -0600 Subject: [PATCH 14/14] Fixing icons --- jetty-documentation/src/main/asciidoc/index.adoc | 1 - pom.xml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/jetty-documentation/src/main/asciidoc/index.adoc b/jetty-documentation/src/main/asciidoc/index.adoc index e60180573c0b..82d77ad8f4a1 100644 --- a/jetty-documentation/src/main/asciidoc/index.adoc +++ b/jetty-documentation/src/main/asciidoc/index.adoc @@ -22,7 +22,6 @@ :revnumber: {VERSION} :toc: -:icons: font include::quick-start/part.adoc[] include::configuring/part.adoc[] diff --git a/pom.xml b/pom.xml index ea442fb745c2..7bb95de4cbb7 100644 --- a/pom.xml +++ b/pom.xml @@ -751,6 +751,7 @@ ${project.version} ${maven.build.timestamp} left + font

DeFl!1SLAXDehEpP6a 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 Z{y$;@la-k{dBy+$002ovPDHLkV1k%+*3$q0 diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.svg b/jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.svg deleted file mode 100644 index a93014b18b5b..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/jetty-logo-shadow.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty-logo.svg b/jetty-documentation/src/main/docbkx-resources/images/jetty-logo.svg deleted file mode 100644 index 5f8d6fd7167e..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/jetty-logo.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/jetty.gif b/jetty-documentation/src/main/docbkx-resources/images/jetty.gif deleted file mode 100644 index 9c767e0cc74313bec1f0ab14bc8238fb7fe76633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9918 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 - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/tip.png b/jetty-documentation/src/main/docbkx-resources/images/tip.png deleted file mode 100644 index 5c4aab3bb3543191c360387c4af9a3cbaa051345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoM0VEi-?r};1DW)WEcNYeRRlUkaK;CUn7srr_ zTcwkB3m#VBagbEhuIO1a$!w|j^feEHv@=+|woj32oF*6|l<3XH$!T}Lao)e6jJhoQ z_vr?OZVprC|7iZ8xaicUR0b&zR-JdP408=+?zC0Rn8IN&QLTWhMIcU0X8P7uUN4WB zR_?a_;&p>ll{>(OzfJ4N{OX={Q&zNgO}j31DC;|ya^r9Fjd348&p+!^cT+^sws+=& zCu*T*mRNK3PE;$BNx$Fa_9(Y=&DoXLMFRd#U31O)<`W^F&-o=xbIqK-c?mr!bmn>! zky6TW;ML~4nXw$T{yra=OteL6G!=B;0=?;6;u=vBoS#-wo>-L1;Gm(b>6x3Dp6Z*J zo|&AjV4`QFXQ5zesc&GRZ(yj9T$EW{Qt6OeSzMBtte0A>mr`1gpI4%noS!>!m*Ngk zP=bxiOwUU!DFvFBnrfM1VQy}0X_lO7WM-b2nq**TZkb|inr2~`WR#dJWc*7VsEZGz hD*$LMgOO>4k%_i}w!yxSoa=!y44$rjF6*2UngF(YpwIvS diff --git a/jetty-documentation/src/main/docbkx-resources/images/tip.svg b/jetty-documentation/src/main/docbkx-resources/images/tip.svg deleted file mode 100644 index 4a64a1500ec5..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/tip.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/images/warning.png b/jetty-documentation/src/main/docbkx-resources/images/warning.png deleted file mode 100644 index 1c33db8f34a8b42b373179b46a2d8d8a10e061a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1241 zcmeHH+e?!H6#vDtmgHCxG{Q}12(7`~)|MMe^RnTlY0JD#q1sIwW1DTCqzzwWg@Q=t zBC2Iceu@w4LHM97Gb5%*E%9MN*%m}jvs!{N@Pd8$H}vS?TsRzlzr#5kPPe|YG%fXL zDu6VdR$WC$&Oc)^X#ZjK-7LU>{!F!o39xr+d_Vw5fMTEwpb-s#9q<5Nzz6gIepyU?Lctpr{ZK zVzWaWPAC)#17S8h%;AIuf(Q_yeIybEqS0s^i1YdJcsv0ln9M{Xkpz;-I_^=P))~D~!!Hvpq{Dl8O{rN@cECkt>#DncX%I(O&3i_YgL-$m$VU zT3cLBLS%M1`o{TBX}S|Tbhc)vk!Yp)%rdDd&my(RPsxl%lU$)tC?(1~WuEwClUQn! n$Q8O{Mxt@ukkcT{K0> diff --git a/jetty-documentation/src/main/docbkx-resources/images/warning.svg b/jetty-documentation/src/main/docbkx-resources/images/warning.svg deleted file mode 100644 index fc8d7484cb72..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/images/warning.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-resources/js/highlight.pack.js b/jetty-documentation/src/main/docbkx-resources/js/highlight.pack.js deleted file mode 100644 index a4ea792352a8..000000000000 --- a/jetty-documentation/src/main/docbkx-resources/js/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){l+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);f.reverse().forEach(o)}else"start"==g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(M);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof L.sL;if(e&&!x[L.sL])return n(M);var t=e?l(L.sL,M,!0,y[L.sL]):f(M,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(y[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,M=""):e.eB?(k+=n(t)+r,M=""):(k+=r,M=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(M+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(M+=t),k+=b();do L.cN&&(k+=""),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),M="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"")+'"');return M+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,y={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var M="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function f(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=l(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?l(n,r,!0):f(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=(e||"").toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[{cN:"title",b:"[a-zA-Z](\\.?\\w)*",r:0},e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}});hljs.registerLanguage("ini",function(e){var c={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"title",b:/^\s*\[+/,e:/\]+/},{cN:"setting",b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},c,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("xml",function(t){var s="[A-Za-z0-9\\._:-]+",c={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php"},e={eW:!0,i:/]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[e],starts:{e:"",rE:!0,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[e],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars"]}},c,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},e]}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",b={cN:"doctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},n=[e.C("#","$",{c:[b]}),e.C("^\\=begin","^\\=end",{c:[b],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:c}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o="[>?]>",l="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",N=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+o+"|"+l+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:n.concat(N).concat(d)}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:i,l:o,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",r,a,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,a,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l]},{cN:"decorator",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("golo",function(e){return{k:{keyword:"println readln print import module function local return let var while for foreach times in case when match with break continue augment augmentation each find filter reduce if then else otherwise try catch finally raise throw orIfNull",typename:"DynamicObject|10 DynamicVariable struct Observable map set vector list array",literal:"true false null"},c:[e.HCM,e.QSM,e.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(t)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:t.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+i,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:i,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:o,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=i,s.c=i,{aliases:["pl"],k:t,c:i}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}]},i={cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma ifdef ifndef",c:[{b:/\\\n/,r:0},{bK:"include",e:"$",c:[r,{cN:"string",b:"<",e:">",i:"\\n"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage("http",function(t){return{aliases:["https"],i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={cN:"preprocessor",b:/<\?(php)?|\?>/},i={cN:"string",c:[e.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"},a]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,i,t]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,t]}}); \ No newline at end of file diff --git a/jetty-documentation/src/main/docbkx-stylesheet/fo/docbook.xsl b/jetty-documentation/src/main/docbkx-stylesheet/fo/docbook.xsl deleted file mode 100644 index b36ab89ee437..000000000000 --- a/jetty-documentation/src/main/docbkx-stylesheet/fo/docbook.xsl +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - target/docbkx/pdf/jetty/ - false - - .svg - - - true - - - - .,: - - - wrap - \ - - - - - - 75% - - - - - - - - #E0E0E0 - 0.5pt - solid - #575757 - 3pt - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - -auto - - - - - - - - appendix toc,title - article/appendix nop - article toc,title - book toc,title,figure,table,example,equation - chapter toc,title - part toc,title - preface toc,title - qandadiv toc - qandaset toc - reference toc,title - sect1 toc - sect2 toc - sect3 toc - sect4 toc - sect5 toc - section toc - set toc,title - - -., - - - - - - - - - - - - - - - - - - - - - - - - - -The Definitive Reference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 100% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jetty-documentation/src/main/docbkx-stylesheet/html/docbook.xsl b/jetty-documentation/src/main/docbkx-stylesheet/html/docbook.xsl deleted file mode 100644 index 9d8ab67149e1..000000000000 --- a/jetty-documentation/src/main/docbkx-stylesheet/html/docbook.xsl +++ /dev/null @@ -1,438 +0,0 @@ - - - - - - - - - - - - - - - - - - - appendix toc,title - article/appendix nop - article toc,title - book toc,title,figure,table,example,equation - chapter toc,title - part toc,title - preface toc,title - qandadiv toc - qandaset toc - reference toc,title - sect1 toc - sect2 toc - sect3 toc - sect4 toc - sect5 toc - section toc - set toc,title - - - - - - - - - - - - - - - - - - - - - - - - - - - stylesheet - css/highlighter/foundation.css - - - js/highlight.pack.js - - - hljs.initHighlightingOnLoad(); - - - - text/css - stylesheet - css/font-awesome/font-awesome.min.css - - - - - - - - - - - - - - - - -
- - Jetty Logo - -
- - - Version: - - -
- -
-
- - - - -