虚拟主机域名注册-常见问题 → java技术 → J2EE | |||||||
[原创]Jetty的基本配置
Jetty的基本配置与Tomcat类似,在这里主要介绍Jetty的端口设置及如何部署Web 应用。由于Jetty是个嵌入式Web服务器,因此设置方式比较特殊。 Jetty的配置文件放在etc路径下,该路径下有如下几个配置文件:
其中webdefault.xml文件是Web应用的默认配置文件,与Jetty的配置没有太大的关系,该文件通常不需要修改。 另外的三个都是Tomcat的配置文件:jetty.xml文件是默认的配置文件;jetty-jmx.xml 是启动JMX控制的配置文件;jetty-plus.xml文件是在增加Jetty扩展功能的配置文件。在启动Jetty时输入如下命令: java -jar startup.jar 默认使用jetty.xml文件时启动Jetty,即与如下命令效果相同: java -jar startup.jar etc/jetty.xml 启动时也可以指定多个配置文件,可输入如下命令: java -jar startup.jar etc/jetty.xml etc/jetty-plus.xml 打开Jetty配置文件,该配置文件的根元素是Configure,另外还会看到有如下的配置元素。
Jetty是个嵌入式Web容器,因此它的服务对应一个Server实例,可以看到配置文 件中有如下片段: <!–配置了一个Jetty服务器进程 〈Configure id=”Server” class = “org.mortbay.jetty.Server”>
Configure元素里的各种子元素,即对该Server实例的操作。在Configure元素下有如下代码所示的Set子元素,Set子元素的name属性为connectors,效果等同于调用setConnectors方法,用于设置Web服务的提供端口。该方法需要Connector数组,其包 含的Array子元素则用于设置该方法的参数。Array元素里的Item子元素,则是数组的 数据项,每个Connector对应一个连接提供者。 <3 –类似于调用setConnectors方法–> <Set name=”connectors”> <!– 为setConnectors方法传入参数–> <Array type=”org.mortbay.jetty.Connector”> <!–下面的Connector提供常见的Web服务 —> <Item> <New class=”org.mortbay.j etty.nio.SelectChannelConnector”> <Set name=”port”>8080</Set> <Set name=”maxIdleTime”>30000</Set> <Set name=”lowResourceMaxIdleTime”>3000</Set> <Set name=”Acceptors”>1</Set> </New> </Item> <!– 如果Java的nio不可用,则使用如下的Connector–> <!– <Item> <New class=”org.mortbay.j etty.bio.SocketConnector”> <Set name=”port”>8081</Set> <Set name=”maxIdleTime”>50000</Set> </New> </Item> ——> <!– Use this connector for few very active connections ONLY IF SelectChannelConnector cannot handle your load <Item> <New class=”org.mortbay.jetty.nio.BlockingChannelConnector”> <Set name=”port”>8083</Set> <Set name=”maxIdleTime”>30000</Set> <Set naiae=”lowResourceMaxIdleTime”>3000</Set> </New> </Item> <!–下面的Connector用于设置HTTPS的服务提供端口–> <Item> <New class=”org.mortbay.jetty.security.SslSocketConnector”> <Set name=11 Port”>8443</Set> <Set name=”maxIdleTime”>30000</Set> <Set name=”Keystore”><SystemProperty name =”jetty.home” default:”.” />/etc/keystore</Set> <Set name=”Password”>OBF:lvnylzlolx8elvnwlvn61x8glzlulvn4</Set> <Set name=”KeyPas sword”>OBF:Iu2ulwinllz7slz7alwnllu2g</Set> </New> </Item> </Array> </Set> 在上面的配置片段中,默认第一个Connector是有效的,该Connector就是常规Web 服务的Connector,其中的8080就是Jetty的默认端口。 笔者将该片段修改如下: <!–下面的Connector提供常见的Web服务 ——> <Item> <!–提供基于 nio 的 Connector–〉 <New class=”org.mortbay.jetty.nio.SelectChannelConnector”> <!—设置端口号—> <Set name=”port”>8886</Set> <Set name =”maxId1eTime”>30000</Set> <Set name=”lowResourceMaxIdleTime”>3000</Set> <Set name=”Acceptors”>1</Set> </New> </Item> 修改成上面所示的样例后,Jetty的服务端口为8886。这也是笔者所使用的端口。
Jetty也支持自动部署和配置文件部署。 如果使用默认的配置文件启动,webapps会自动部署目录。即所有存放在webapps 路径的Web应用将自动部署在Jetty容器中。 如果使用带Jetty扩展功能来启动,S卩增加jetty-plus.xml文件来启动,则webapps-plus 也会自动部署目录,将所有放在该路径的Web应用自动部署在Jetty容器中。 下面看如何使用配置文件来部署Web应用。 部署Web应用需使用org.mortbay.jetty.webapp.WebAppContext,该类的实例即对应 一个Web应用,并且该类还包含多个静态的重载方法:addWebApplications。该方法用 于同时部署多个Web应用,即用于配置一个自动部署目录。 jetty.xmi配置文件的片段如下: <!-_ 调用WebAppContext 的静态方法addWebApplications –> <Cal1 class=”org.mortbay.jetty.webapp.WebAppContext” name=”addWebApplications”> <!–下面用于为方法传入参数–> <ArgxRef id= “contexts”/ ></Arg> <!–指定自动部署目录–> <Arg>./webapps</Arg> <1 –配置Web应用的默认配置文件–> <ArgxSystemProperty name=” jetty .home” default=”.M />/etc/webdefault.xml</Arg> <!–是否解压缩–> <Arg type=”boolean”>True</Arg> <Arg type=”boolean”>False</Arg> </Call> jetty-plus.xml文件的片段如下: <!–调用 WebAppContext 的静态方法 addWebApplications –> <Call class=”org.mortbay.jetty.webapp.WebAppContextM name= “addWebApplications”> <!—下面用于为方法传入参数–> <ArgxRef id=” Server” /></Arg> <!–指定自动部署目录–> <Arg>./webapps-plus</Arg> <!-配置Web应用的默认配置文件–> <Arg>org/mortbay/jetty/webapp/webdefault,xml</Arg> <ArgxRef id= “plusConf ig” /></Arg> <!–是否解压缩–> <Arg type=”boolean”>True</Arg> <Arg type=”boolean”>False</Arg> </Call> 通过查看该配置文件不难发现,在每次调用addWebApplications方法后,即可增加一个Web应用的自动部署路径。如有必要,用户完全可以增加自己的自动部署路径,如 果增加了自动部署路径,则所有在该路径下的Web应用将自动部署。 如果仅需要部署一个Web应用,可以有如下两种方法:
根据前面的介绍,对于Web服务器,应尽量避免修改默认的配置文件。如果读者真 需要通过修改jetty.xml文件来部署Web应用,则应在jetty的Configure元素下增加如下 片段: <!–创建一个Web应用-_> <New class=”org.mortbay.jetty.webapp.WebAppContextM> <!- 三个构造参数–> <ArgxRef id= “contexts” /></Arg> <!-设置Web应用的文档路径–> <Arg>G:/StrutsTest/js</Arg> <1 –设置Web应用的url–> <Arg>/</Arg> <!–设置Web应用的默认配置描述符–> <Set name=”defaultsDescriptor”> <SystemProperty name=” j etty. home” default-”.” />/etc/webde fault ,xml</Set> <!–相当于调用setVirtualHosts方法,用于设置虚拟主机–> <Set name=”virtualHosts”> <!– Array表示创建一个数组一> <Array type=K java.lang.String”> <Item>localhost</Item> </Array> </Set> <!–类似于调用getSessionHandler 方法–> <Get name= •• SessionHandler” > <Set name=”SessionManager”> <New class=”org.mortbay.jetty.servlet.HashSessionManager”> <!–设置Session的超时时长–> <Set name=”maxlnactiveInterval” type=”int”>600</Set> </New> </Set> </Get> </New> 注意:该代码片段在jetty.xmi文件仅仅被注释,只要取消该代码片段注释即可。但 需要注意:jetty.xmi文件默认有个小错误,它的设置超时时长的Set元素的name属性值 为maxlnactivelntervale。实际上HashSessionManager 并没有setMaxInactivelntervale 方法, 通过查看API文档发现,它包含一个setMaxInactivelnterval方法(最后少一个e ),读者 将原有的e删除即可。 通常建议增加自己的配置文件,应尽量避免修改系统原有的配置文件。 增加的配置文件如下: <?xml version^”1.0″ encoding^”gb2312″?> <!DOCTYPE Configure PUBLIC “-//Mort Bay Consulting//DTD Configure//EN” ‘•http: //jetty, mortbay. org/configure . dtd” > 〈Configure id= “Server” class= “org .mortbay. j etty. Server1‘ > <!–创建一个Web应用–> <New class=Horg.mortbay.jetty.webapp.WebAppContext”> <!– 三个构造参数–> <ArgxRef id=,‘contexts” /></Arg> <!–设置Web应用的文档路径–> <Arg>G:/StrutsTest/j s</Arg> <!–设置Web应用的url–> <Arg>/</Arg> <! –设置Web应用的默认配置描述符–> <Set name=”defaultsDescriptor”> <Sy stemProperty name=” j etty. home” default=” •” />/etc/webdefault .xml</Set> <!–相当于调用setVirtualHosts方法,用于设置虚拟主机–> <Set name=”virtualHosts”> <I — Array表示创建一个数组–> <Array type=njava.lang.String”> <Item>localhost</Item> </Array> </Set> <!–类似于调用getSessionHandler 方法–> <Get name=”SessionHandler”> <Set name=” SessionManager •_ > <New class=”org.mortbay.jetty.servlet.HashSessionManagerM> <!–设置Session的超时时长–> <Set name=”maxlnactiveInterval” type=”int”>600</Set> </New> </Set> </Get> </New> </Configure> 将该配置文件保存在etc路径下,以后每次启动Jetty时,可直接加载该配置文件, 使用如下启动命令即可(假设该配置文件的文件名为jetty-yeeku.xml): java -jar startup.jar etc/jetty.xml etc/jetty-yeeku.xml
Jetty同样可以整合DBCP、C3P0等数据源来提供容器管理的数据源。提供容器管理 的数据源,只是Jetty JNDI绑定功能之一。 下面介绍如何在Jetty绑定JNDI,以及JNDI的使用。 增加JNDI绑定必须使用Jetty的plus功能。因此,启动时必须增加jetty-plus.xml 文件。增加JNDI的绑定同样有两个方法:
两种配置方式大同小异,区别是前者需要修改系统默认的配置文件,此处仅介绍增 加自己的配置文件方式。 在Jetty的plus中,有如下包。 org.mortbay.jetty.plus.naming:执行JNDI 绑定的包。 该包下有如下四个类。 EnvEntry:绑定简单值。 NamingEntry:抽象类,是另外三个类的父类。 Resource:用于绑定数据源等资源。 Transaction:用于绑定事务。 增加数据源绑定请按如下步骤进行。 (1) 此处绑定的数据源依然以DBCP为实现,当然也可以绑定C3P0数据源,但必 须将DBCP所需要的jar文件复制到Jetty可以使用的路径中。根据前面介绍DBCP主要 需要如下三个文件:
将这三个文件复制到Jetty的lib路径下即可,Jetty启动时会自动加载该路径的jar 文件。当然,还需将数据库驱动复制到该路径下。 (2) 增加如下配置文件: <?xml version=”1.0″?> <!– Jetty配置文件的文件头,包含DTD等信息–> <!DOCTYPE Configure PUBLIC n-//Mort Bay Consulting//DTD Configure//EN” “http://jetty.mortbay,org/configure.dtd”> <!– Jetty配置文件的根兀素–> <Conf igure id=11 Server” class=” org .mortbay .jetty. Server” > <:-配置第一个环境变量,只是一个普通值–> <New id=”woggle” class=”org.mortbay.j etty.plus.naming.EnvEntry”> <Arg>woggle</Arg> <Arg type=”java.lang.Integer”>4000</Arg> </New> <!–配置第二个环境变量,只是一个普通值–> <New id=”wiggle” class=”org.mortbay.jetty.plus.naming.EnvEntry”> <Arg>wiggle</Arg> <Arg type=”java.lang.Double”>100</Arg> <Arg type=”boolean”>true</Arg>
</New> <! 一创建一个数据源–> <New id=”dsH class = “org.apache.commons.dbcp•BasicDataSource”> <!–设置数据库驱动–> <Set name=”driverClassName”>com.mysgl.jdbc•Driver</Set> <!-设置数据库url–> <Set name=”url”>jdbc:mysql://localhost:33 06/j2ee</Set> <!–设置数据库用户名–> <Set name = “username__>root</Set> <!–设置数据库密码-_> <Set name=”password”>32147</Set> <!–设置数据库驱动–> <Set name=”maxActive” type=”int”>100</Set> <!–设置数据源最大空闲连接数–> <Set name= “maxldle’1 type =11 int” >30</Set> <!–设置数据源最大的等待数-_> <Set name =”maxWait” type=”int”>1000</Set> <!–设置数据库是否自动提交-_> <Set name=”defaultAutoCommit” type=”boolean”>true</Set> <!–设置连接是否自动删除–> <Set name=”removeAbandoned” type=”boolean”>true</Set> <!–设置数据库驱动–> <Set name=”removeAbandonedTimeout” type=”int”>60</Set> <Set name=” 1 ogAbandoned” type = ’’boolean”>true</Set> </New> <!–将实际的数据源绑定到jdbc/mydatasource这个JNDI名一> <New id=”mydatasource” class=”org.mortbay.jetty.plus.naming.Resource” <Arg>jdbc/mydatasource</Arg> <ArgxRef id= “ds ” /></Arg> </New> </Configure> 在上面的配置文件中,绑定了三个JNDI值,下面测试该JNDI的Servlet: public class TestServlet extends HttpServlet { InitialContext ic; //Servlet的初始化方法,该方法完成Context的初始化 public void init(ServletConfig config) throws ServletException { super.init(config); try { ic = new InitialContext(); } catch (Exception e) { throw new ServletException(e); } . } //service方法是Servlet的服务方法 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取JSP页面输出流 PrintStream out = new PrintStream(response.getOutputStream()); try
//在控制台输出wiggle的绑定值 System.out.printIn(ic.lookup(“wiggle”)); //在控制台输出woggle的绑定值 System.out.printIn(ic.lookup(“woggle”)); //获取绑定的数据源 DataSource ds = (DataSource)ic.lookup(“jdbc/mydatasource”); //通过数据源获取数据库连接 Connection conn = ds.getConnection(); //通过数据库连接创建Statement对象 Statement stmt = conn.createStatement(); //通过Statement对象执行SQL查询,返回ResultSet对象 ResultSet rs = stmt.executeQuery(“select * from news”); //遍历记录集 while(rs.next()) { out.printIn(rs.getString(2)); } } catch (Exception e) { e.printStackTrace(); > 在web.xml文件中增加如下片段: <servlet> <!–定义Servlet–> <servlet-name>aa</servlet-name> <servlet-class>lee.TestServlet</servlet-class> </servlet> <servlet-mapping> <J –定义 Servlet 的 url 映射–> <servlet-name>aa</servlet-name> <url-pattern>/aa</url-pattern> </servlet-mapping〉 启动Jetty,访问该Servlet,即看到数据库的访问结果。 原创文章,转载请注明: 转载自jocean官方博客 本文链接地址: Jetty的基本配置
|
|||||||
>> 相关文章 | |||||||