知识问答

深入jetty的使用详解

深入jetty的使用详解

Jetty是一个Java Web服务器和Servlet容器,可以用于开发、测试和部署Java Web应用程序。它提供了高性能、异步IO和低内存占用等优点。下面是深入Jetty的使用详解:

安装Jetty

Jetty的官方网站提供了下载链接,下载对应版本的zip文件,解压后即可得到Jetty的安装包。然后在命令行中进入Jetty的bin目录,运行./jetty.sh start即可启动Jetty。

配置Jetty

Jetty的配置文件是jetty.xml,可以在其中设置端口、虚拟主机、日志等参数。其中最重要的是Servlet容器的配置。Jetty默认使用webdefault.xml作为默认配置文件,但我们通常需要自己写配置文件,然后在jetty.xml中引用。例如,要在Jetty中添加一个名为hello的Servlet,可以在conf目录下新建一个hello.xml文件:

<?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"><Configure class="org.eclipse.jetty.servlet.ServletContextHandler">  <Set name="contextPath">/</Set>  <Set name="displayName">Hello World</Set>  <Call name="addServlet">    <Arg>org.eclipse.jetty.servlet.ServletHolder</Arg>    <Arg>      <New class="org.eclipse.jetty.servlet.ServletHolder">        <Arg>helloServlet</Arg>        <Arg>your.package.name.HelloServlet</Arg>        <Set name="initParameter">          <Map>            <Entry>              <Item>foo</Item>              <Item>bar</Item>            </Entry>          </Map>        </Set>      </New>    </Arg>    <Arg>/hello/*</Arg>  </Call></Configure>

然后在jetty.xml中引用该配置文件:

<Configure id="Server" class="org.eclipse.jetty.server.Server">  ...  <Call name="addLifeCycleListener">    <Arg>      <New class="org.eclipse.jetty.xml.XmlConfiguration">        <The>          <Array type="java.lang.String">            <Item>conf/hello.xml</Item>          </Array>        </The>      </New>    </Arg>  </Call></Configure>

示例

下面是两个使用Jetty的示例:

示例1:简单的Hello World Servlet

package your.package.name;import java.io.IOException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {        response.setContentType("text/html");        response.setStatus(HttpServletResponse.SC_OK);        response.getWriter().println("<h1>Hello, world!</h1>");    }}

示例2:嵌入式Jetty启动一个Web应用

package your.package.name;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.webapp.WebAppContext;public class Main {    public static void main(String[] args) throws Exception {        Server server = new Server(8080);        WebAppContext webapp = new WebAppContext();        webapp.setContextPath("/");        webapp.setResourceBase("src/main/webapp");        webapp.setDescriptor("src/main/webapp/WEB-INF/web.xml");        webapp.setParentLoaderPriority(true);        server.setHandler(webapp);        server.start();        server.join();    }}