在eclipse下面建一个java project
建立目录结构如下:
二级目录:
(备注jetty_test是工程的根目录,etc、lib、webRoot为其二级目录)
到jetty的官方网站(http://www.eclipse.org/jetty/)下载jetty的开发包;
我下载的jetty-hightide-8.0.0.v20110901.tar.gz;
把里面的lib目录的jar包和lib/jsp目录下面的jar包导入到工程里面
说明白,其实jetty.xml和webdefault.xml其实是在我下载的
jetty-hightide-8.0.0.v20110901.tar.gz里面的etc目录下面的jetty.xml和webdefault.xml
jetty.xml:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <!-- =============================================================== --> <!-- Configure the Jetty Server --> <!-- --> <!-- Documentation of this file format can be found at: --> <!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax --> <!-- --> <!-- Additional configuration files are available in $JETTY_HOME/etc --> <!-- and can be mixed in. For example: --> <!-- java -jar start.jar etc/jetty-ssl.xml --> <!-- --> <!-- See start.ini file for the default configuraton files --> <!-- =============================================================== --> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- =========================================================== --> <!-- Server Thread Pool --> <!-- =========================================================== --> <Set name="ThreadPool"> <!-- Default queued blocking threadpool --> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name=</Set> <Set name=</Set> <Set name="detailedDump">false</Set> </New> </Set> <!-- =========================================================== --> <!-- Set connectors --> <!-- =========================================================== --> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><Property name="jetty.host" /></Set> <Set name="/></Set> <Set name=</Set> <Set name=</Set> <Set name="statsOn">false</Set> <Set name=</Set> <Set name=</Set> <Set name=</Set> </New> </Arg> </Call> <!-- =========================================================== --> <!-- Set handler Collection Structure --> <!-- =========================================================== --> <Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <Item> <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> </Item> <Item> <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> </Item> </Array> </Set> </New> </Set> <!-- =========================================================== --> <!-- extra options --> <!-- =========================================================== --> <Set name="stopAtShutdown">true</Set> <Set name="sendServerVersion">true</Set> <Set name="sendDateHeader">true</Set> <Set name=</Set> <Set name="dumpAfterStart">false</Set> <Set name="dumpBeforeStop">false</Set> </Configure>
webdefault.xml:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- ===================================================================== --> <!-- This file contains the default descriptor for web applications. --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- The intent of this descriptor is to include jetty specific or common --> <!-- configuration for all webapps. If a context has a webdefault.xml --> <!-- descriptor, it is applied before the contexts own web.xml file --> <!-- --> <!-- A context may be assigned a default descriptor by: --> <!-- + Calling WebApplicationContext.setDefaultsDescriptor --> <!-- + Passed an arg to addWebApplications --> <!-- --> <!-- This file is used both as the resource within the jetty.jar (which is --> <!-- used as the default if no explicit defaults descriptor is set) and it --> <!-- is copied to the etc directory of the Jetty distro and explicitly --> <!-- by the jetty.xml file. --> <!-- --> <!-- ===================================================================== --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" metadata-complete="true" version="2.5" > <description> Default web.xml file. This file is applied to a Web application before it's own WEB_INF/web.xml file </description> <!-- ==================================================================== --> <!-- Removes static references to beans from javax.el.BeanELResolver to --> <!-- ensure webapp classloader can be released on undeploy --> <!-- ==================================================================== --> <listener> <listener-class>org.eclipse.jetty.servlet.listener.ELContextCleaner</listener-class> </listener> <!-- ==================================================================== --> <!-- Removes static cache of Methods from java.beans.Introspector to --> <!-- ensure webapp classloader can be released on undeploy --> <!-- ==================================================================== --> <listener> <listener-class>org.eclipse.jetty.servlet.listener.IntrospectorCleaner</listener-class> </listener> <!-- ==================================================================== --> <!-- Context params to control Session Cookies --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- UNCOMMENT TO ACTIVATE <context-param> <param-name>org.eclipse.jetty.servlet.SessionDomain</param-name> <param-value>127.0.0.1</param-value> </context-param> <context-param> <param-name>org.eclipse.jetty.servlet.SessionPath</param-name> <param-value>/</param-value> </context-param> <context-param> <param-name>org.eclipse.jetty.servlet.MaxAge</param-name> <param-value>-</param-value> </context-param> --> <!-- ==================================================================== --> <!-- The default servlet. --> <!-- This servlet, normally mapped to /, provides the handling for static --> <!-- content, OPTIONS and TRACE methods for the context. --> <!-- The following initParameters are supported: --> <!-- * acceptRanges If true, range requests and responses are * supported * * dirAllowed If true, directory listings are returned if no * welcome file Forbidden. * * welcomeServlets If true, attempt to dispatch to welcome files * that are servlets, but only after no matching static * resources could be found. If false, then a welcome * file must exist on disk. If "exact", then exact * servlet matches are supported without an existing file. * Default is true. * * This must be false if you want directory listings, * but have index.jsp in your welcome file list. * * redirectWelcome If true, welcome files are redirected rather than * forwarded to. * * gzip If set to true, then static content will be served as * gzip content encoded if a matching resource is * found ending with ".gz" * * resourceBase Set to replace the context resource base * * resourceCache If set, this is a context attribute name, which the servlet * will use to look for a shared ResourceCache instance. * * relativeResourceBase * Set with a pathname relative to the base of the * servlet context root. Useful for only serving static content out * of only specific subdirectories. * * aliases If True, aliases of resources are allowed (eg. symbolic * links and caps variations). May bypass security constraints. * * maxCacheSize The maximum total size of the cache or for no cache. * maxCachedFileSize The maximum size of a file to cache * maxCachedFiles The maximum number of files to cache * * useFileMappedBuffer * If set to true, it will use mapped file buffer to serve static content * when using NIO connector. Setting this value to false means that * a direct buffer will be used instead of a mapped file buffer. * By default, this is set to true. * * cacheControl If set, all static content will have this value set as the cache-control * header. --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <servlet> <servlet-name>default</servlet-name> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> <init-param> <param-name>aliases</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>acceptRanges</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>dirAllowed</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>welcomeServlets</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>redirectWelcome</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>maxCacheSize</param-name> <param-value></param-value> </init-param> <init-param> <param-name>maxCachedFileSize</param-name> <param-value></param-value> </init-param> <init-param> <param-name>maxCachedFiles</param-name> <param-value></param-value> </init-param> <init-param> <param-name>gzip</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>resourceCache</param-name> <param-value>resourceCache</param-value> </init-param> <!-- <init-param> <param-name>cacheControl</param-name> <param-value>max-age=,public</param-value> </init-param> --> <load-on-startup></load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- ==================================================================== --> <!-- JSP Servlet --> <!-- This is the jasper JSP servlet from the jakarta project --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- The JSP page compiler and execution servlet, which is the mechanism --> <!-- used by Glassfish to support JSP pages. Traditionally, this servlet --> <!-- is mapped to URL patterh "*.jsp". This servlet supports the --> <!-- following initialization parameters (default values are in square --> <!-- brackets): --> <!-- --> <!-- checkInterval If development is false and reloading is true, --> <!-- background compiles are enabled. checkInterval --> <!-- is the time in seconds between checks to see --> <!-- ] --> <!-- --> <!-- compiler Which compiler Ant should use to compile JSP --> <!-- pages. See the Ant documenation for more --> <!-- information. [javac] --> <!-- --> <!-- classdebuginfo Should the class file be compiled with --> <!-- debugging information? [true] --> <!-- --> <!-- classpath What class path should I use while compiling --> <!-- generated servlets? [Created dynamically --> <!-- based on the current web application] --> <!-- Set to ? to make the container explicitly set --> <!-- this parameter. --> <!-- --> <!-- development Is Jasper used in development mode (will check --> <!-- for JSP modification on every access)? [true] --> <!-- --> <!-- enablePooling Determines whether tag handler pooling is --> <!-- enabled [true] --> <!-- --> <!-- fork Tell Ant to fork compiles of JSP pages so that --> <!-- a separate JVM is used for JSP page compiles --> <!-- from the one Tomcat is running in. [true] --> <!-- --> <!-- ieClassId The class-id value to be sent to Internet --> <!-- Explorer when using <jsp:plugin> tags. --> <!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] --> <!-- --> <!-- javaEncoding Java file encoding to use for generating java --> <!-- source files. [UTF-] --> <!-- --> <!-- keepgenerated Should we keep the generated Java source code --> <!-- for each page instead of deleting it? [true] --> <!-- --> <!-- logVerbosityLevel The level of detailed messages to be produced --> <!-- by this servlet. Increasing levels cause the --> <!-- generation of more messages. Valid values are --> <!-- FATAL, ERROR, WARNING, INFORMATION, and DEBUG. --> <!-- [WARNING] --> <!-- --> <!-- mappedfile Should we generate static content with one --> <!-- print statement per input line, to ease --> <!-- debugging? [false] --> <!-- --> <!-- --> <!-- reloading Should Jasper check for modified JSPs? [true] --> <!-- --> <!-- suppressSmap Should the generation of SMAP info for JSR45 --> <!-- debugging be suppressed? [false] --> <!-- --> <!-- dumpSmap Should the SMAP info for JSR45 debugging be --> <!-- dumped to a file? [false] --> <!-- False if suppressSmap is true --> <!-- --> <!-- scratchdir What scratch directory should we use when --> <!-- compiling JSP pages? [default work directory --> <!-- for the current web application] --> <!-- --> <!-- tagpoolMaxSize The maximum tag handler pool size [] --> <!-- --> <!-- xpoweredBy Determines whether X-Powered-By response --> <!-- header is added by generated servlet [false] --> <!-- --> <!-- If you wish to use Jikes to compile JSP pages: --> <!-- Set the init parameter "compiler" to "jikes". Define --> <!-- the property "-Dbuild.compiler.emacs=true" when starting Jetty --> <!-- to cause Jikes to emit error messages in a format compatible with --> <!-- Jasper. --> <!-- If you get an error reporting that jikes can't use UTF-8 encoding, --> <!-- try setting the init parameter "javaEncoding" to "ISO-8859-1". --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <servlet id="jsp" > <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>logVerbosityLevel</param-name> <param-value>DEBUG</param-value> </init-param> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <!-- <init-param> <param-name>classpath</param-name> <param-value>?</param-value> </init-param> --> <load-on-startup></load-on-startup> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspf</url-pattern> <url-pattern>*.jspx</url-pattern> <url-pattern>*.xsp</url-pattern> <url-pattern>*.JSP</url-pattern> <url-pattern>*.JSPF</url-pattern> <url-pattern>*.JSPX</url-pattern> <url-pattern>*.XSP</url-pattern> </servlet-mapping> <!-- ==================================================================== --> <!-- Dynamic Servlet Invoker. --> <!-- This servlet invokes anonymous servlets that have not been defined --> <!-- in the web.xml or by other means. The first element of the pathInfo --> <!-- of a request passed to the envoker is treated as a servlet name for --> <!-- an existing servlet, or as a class name of a new servlet. --> <!-- This servlet is normally mapped to /servlet/* --> <!-- This servlet support the following initParams: --> <!-- --> <!-- nonContextServlets If false, the invoker can only load --> <!-- servlets from the contexts classloader. --> <!-- This is false by default and setting this --> <!-- to true may have security implications. --> <!-- --> <!-- verbose If true, log dynamic loads --> <!-- --> <!-- * All other parameters are copied to the --> <!-- each dynamic servlet as init parameters --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- Uncomment for dynamic invocation <servlet> <servlet-name>invoker</servlet-name> <servlet-class>org.eclipse.jetty.servlet.Invoker</servlet-class> <init-param> <param-name>verbose</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>nonContextServlets</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>dynamicParam</param-name> <param-value>anyValue</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> --> <!-- ==================================================================== --> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- ==================================================================== --> <!-- Default MIME mappings --> <!-- The default MIME mappings are provided by the mime.properties --> <!-- resource in the org.eclipse.jetty.server.jar file. Additional or modified --> <!-- mappings may be specified here --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- UNCOMMENT TO ACTIVATE <mime-mapping> <extension>mysuffix</extension> <mime-type>mymime/type</mime-type> </mime-mapping> --> <!-- ==================================================================== --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- ==================================================================== --> <locale-encoding-mapping-list> <locale-encoding-mapping> <locale>ar</locale> <encoding>ISO-8859-6</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>be</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>bg</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ca</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>cs</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>da</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>de</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>el</locale> <encoding>ISO-8859-7</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>en</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>es</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>et</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>fi</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>fr</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>hr</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>hu</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>is</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>it</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>iw</locale> <encoding>ISO-8859-8</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ja</locale> <encoding>Shift_JIS</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ko</locale> <encoding>EUC-KR</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>lt</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>lv</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>mk</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>nl</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>no</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>pl</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>pt</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ro</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ru</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sh</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sk</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sl</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sq</locale> <encoding>ISO-8859-2</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sr</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>sv</locale> <encoding>ISO-8859-1</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>tr</locale> <encoding>ISO-8859-9</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>uk</locale> <encoding>ISO-8859-5</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>zh</locale> <encoding>GB2312</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>zh_TW</locale> <encoding>Big5</encoding> </locale-encoding-mapping> </locale-encoding-mapping-list> <security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> </web-app>
而webdefault.xml基本可以不改,因为它是用来标识文件的语言格式,基本的一些配置;
jetty.xml我们可以做一定的修改;
例如说我们可以改下服务监听的端口号,如图:
web.xml:
(备注就是web请求的配置信息,例如说设置servlet的路由)
如下面配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>org.jetty.demo.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/servlet/HelloWorldServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
好!我们现在就来建设一个如上面web.xml配置的servlet和index.jsp;
index.jsp页面
Index.jsp:
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> hello jetty! 中国! </body> </html>
HelloWorldServlet.java文件:
package org.jetty.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //Servlet public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); resp.getWriter().write("hello world!"); resp.getWriter().close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost"); super.doPost(req, resp); } }
JettyCustomServer:总的服务类,本质上是一个分发器
package org.jetty.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.xml.XmlConfiguration; import org.xml.sax.SAXException; //总的服务类,本质上是一个分发器 public class JettyCustomServer extends Server { private String xmlConfigPath; private String contextPath; private String warPath; private String resourceBase = "./webRoot"; private String webXmlPath = "./webRoot/WEB-INF/web.xml"; public JettyCustomServer(String xmlConfigPath, String contextPath, String resourceBase, String webXmlPath) { this(xmlConfigPath, contextPath, resourceBase, webXmlPath, null); } public JettyCustomServer(String xmlConfigPath, String contextPath) { this(xmlConfigPath, contextPath, null, null, null); } public JettyCustomServer(String xmlConfigPath, String contextPath, String warPath) { this(xmlConfigPath, contextPath, null, null, warPath); } public JettyCustomServer(String xmlConfigPath, String contextPath, String resourceBase, String webXmlPath, String warPath) { super(); if (StringUtils.isNotBlank(xmlConfigPath)) { this.xmlConfigPath = xmlConfigPath; readXmlConfig(); } if (StringUtils.isNotBlank(warPath)) { this.warPath = warPath; if (StringUtils.isNotBlank(contextPath)) { this.contextPath = contextPath; applyHandle(true); } } else { if (StringUtils.isNotBlank(resourceBase)) this.resourceBase = resourceBase; if (StringUtils.isNotBlank(webXmlPath)) this.webXmlPath = webXmlPath; if (StringUtils.isNotBlank(contextPath)) { this.contextPath = contextPath; applyHandle(false); } } } private void readXmlConfig() { try { XmlConfiguration configuration = new XmlConfiguration( new FileInputStream(this.xmlConfigPath)); configuration.configure(this); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (SAXException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public void applyHandle(Boolean warDeployFlag) { ContextHandlerCollection handler = new ContextHandlerCollection(); WebAppContext webapp = new WebAppContext(); webapp.setContextPath(contextPath); webapp.setDefaultsDescriptor("./jetty/etc/webdefault.xml"); if (!warDeployFlag) { webapp.setResourceBase(resourceBase); webapp.setDescriptor(webXmlPath); } else { webapp.setWar(warPath); } handler.addHandler(webapp); super.setHandler(handler); } public void startServer() { try { super.start(); System.out.println("current thread:" + super.getThreadPool().getThreads() + "| idle thread:" + super.getThreadPool().getIdleThreads()); super.join(); } catch (Exception e) { e.printStackTrace(); } } public String getXmlConfigPath() { return xmlConfigPath; } public void setXmlConfigPath(String xmlConfigPath) { this.xmlConfigPath = xmlConfigPath; } public String getContextPath() { return contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public String getResourceBase() { return resourceBase; } public void setResourceBase(String resourceBase) { this.resourceBase = resourceBase; } public String getWebXmlPath() { return webXmlPath; } public void setWebXmlPath(String webXmlPath) { this.webXmlPath = webXmlPath; } public String getWarPath() { return warPath; } public void setWarPath(String warPath) { this.warPath = warPath; } }
JettyServerStart.java:启动类,入口
package org.jetty.demo; //启动类,入口 public class JettyServerStart { public static void main(String[] args) { JettyCustomServer server = new JettyCustomServer( "./jetty/etc/jetty.xml", "/testContext"); server.startServer(); } }
运行这个类相当于启动了整个工程:
访问index.jsp
http://localhost:8080/testContext/index.jsp
访问HelloWorldServlet:
http://localhost:8080/testContext/servlet/HelloWorldServlet
jetty使用教程(嵌入eclipse开发)的更多相关文章
-
Jetty使用教程(四:21-22)—Jetty开发指南
二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...
-
Jetty使用教程(四:28-30)—Jetty开发指南
二十八.延续机制支持 28.1 延续简介 延续是一种机制用来实现类似于Servlet 3.0异步功能的异步Servlet,但提供了一个简单易操作的接口. 28.1.1 为什么使用异步Servlets ...
-
Jetty使用教程(四:23)—Jetty开发指南
二十三.Maven和Jetty 这一章节将说明如何通过Maven管理Jetty和使用Jetty的Maven插件. 23.1 使用Maven Apache Maven是一个款软件项目管理工具.基于项目对 ...
-
eclipse开发scrapy爬虫工程,附爬虫临门级教程
写在前面 自学爬虫入门之后感觉应该将自己的学习过程整理一下,也为了留个纪念吧. scrapy环境的配置还请自行百度,其实也不难(仅针对windows系统,centos配置了两天,直到现在都没整明白) ...
-
使用Eclipse开发学习 Spring Boot 教程的内容小结
spring-tool-suite使用教程,并创建spring配置文件 Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTful ...
-
Jetty使用教程(一)——开始使用Jetty
一.Jetty简介 1.1 什么是Jetty Jetty是一个提供HHTP服务器.HTTP客户端和javax.servlet容器的开源项目. 这个入门教程分为五个部分: 第一部分部分重点介绍如何使 ...
-
25个最佳最闪亮的Eclipse开发项目
http://blog.csdn.net/howareyoutodayyhz/article/details/8264599 25个最佳最闪亮的Eclipse开发项目 标签: eclipseEclip ...
-
Linux上搭建Hadoop2.6.3集群以及WIN7通过Eclipse开发MapReduce的demo
近期为了分析国内航空旅游业常见安全漏洞,想到了用大数据来分析,其实数据也不大,只是生产项目没有使用Hadoop,因此这里实际使用一次. 先看一下通过hadoop分析后的结果吧,最终通过hadoop分析 ...
-
在Eclipse中手动安装pydev插件,eclipse开发python环境配置
最近在学习Python,因为我是做java的,用惯了eclipse,所以就想用eclipse开发python,但是配置开发环境的时候发现按照网上的配置大多不行,而且都是用的在线安装,很垃圾,没办法,自 ...
随机推荐
-
Ghostscript命令实践
一. 将单张PDF文件igs.pdf转化为tiff文件. . gs -sDEVICE=tiffg4 -sOutputFile=igs.tiff -dMaxStripSize= igs.pdf -dAd ...
-
php xml转为xml或者json
<?php class XmlToArray { private $xml; private $contentAsName="content" ; private $attr ...
-
Windows内核之进程基本含义以及进程的创建
进程 1 进程的含义: 1.1 一个是操作系统用来管理进程的内核对象. 内核对象也是系统用来存放关于进程的统计信息的地方. 1.2 还有一个是地址空间,它包括全部可运行模块或DL L 模块的代 ...
-
linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
-
JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...
-
windows下scrapy安装问题,以及Twisted安装报错(error: Microsoft Visual C++ 14.0 is required.)完美解决办法
方法1(通常是失败的) 1. 命令行执行: pip3 install scrapy 不管是网络问题也好,缺少相关的包也好,用这条命令安装scrapy我就没成功过...难受 方法2(成功) 手动安装相关 ...
-
c#判断两个对象和对象中的属性是否相同(以及记录对象中的哪些字段,和详细的改变情况)
当前项目需要记录变更记录,即用户在进行编辑后,将变更操作记录下来.但是数据没有发生变化,则不记录. 代码1:(仅仅返回是否变化的标识) /// <summary> /// 反射对比实体属性 ...
-
第39章:MongoDB-集群--Replica Sets(副本集)---副本集基本原理
①操作日志oplog Oplog是主节点的local数据库中的一个固定集合,按顺序记录了主节点的每一次写操作,MongoDB的复制功能是使用oplog来实现的,备份节点通过查询这个集合就可以知道需要进 ...
-
Centos下磁盘管理---分区
1.磁盘分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a—z ...
-
word绘图画布
这样图形组合不会随着位置的变动而出现相对变化