虚拟主机域名注册-常见问题java技术 → J2EE


[原创]Jetty的基本配置
作者:

Jetty的基本配置与Tomcat类似,在这里主要介绍Jetty的端口设置及如何部署Web 应用。由于Jetty是个嵌入式Web服务器,因此设置方式比较特殊。

Jetty的配置文件放在etc路径下,该路径下有如下几个配置文件:

  • jetty.xml 文件。

  • jetty-jmx.xml 文件。

  • jetty-plus.xml 文件。

  • webdefault.xml 文件。

其中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,另外还会看到有如下的配置元素。

  • Set:相当于调用setXxx方法。

  • Get:相当于调用getXxx方法。

  • New:创建某个类的实例。

  • Arg:为方法或构造器传入参数。

  • Array:设置一个数组。

  • Item:设置数组或集合的一项。

  • Call:调用某个方法。

 

Jetty是个嵌入式Web容器,因此它的服务对应一个Server实例,可以看到配置文 件中有如下片段:

<!–配置了一个Jetty服务器进程

〈Configure id=”Server” class = “org.mortbay.jetty.Server”>

  1. 配置Jetty服务端口

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。这也是笔者所使用的端口。

  1. 部署Web应用

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应用,可以有如下两种方法:

  • 修改jetty.xml文件。

  • 增加自己的配置文件。

根据前面的介绍,对于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

  1. 配置JNDI绑定

Jetty同样可以整合DBCP、C3P0等数据源来提供容器管理的数据源。提供容器管理 的数据源,只是Jetty JNDI绑定功能之一。

下面介绍如何在Jetty绑定JNDI,以及JNDI的使用。

增加JNDI绑定必须使用Jetty的plus功能。因此,启动时必须增加jetty-plus.xml 文件。增加JNDI的绑定同样有两个方法:

  • 修改系统默认的jetty.xml文件。

  • 增加自己的配置文件。

两种配置方式大同小异,区别是前者需要修改系统默认的配置文件,此处仅介绍增 加自己的配置文件方式。

在Jetty的plus中,有如下包。 org.mortbay.jetty.plus.naming:执行JNDI 绑定的包。

该包下有如下四个类。

EnvEntry:绑定简单值。

NamingEntry:抽象类,是另外三个类的父类。

Resource:用于绑定数据源等资源。

Transaction:用于绑定事务。

增加数据源绑定请按如下步骤进行。

(1)    此处绑定的数据源依然以DBCP为实现,当然也可以绑定C3P0数据源,但必 须将DBCP所需要的jar文件复制到Jetty可以使用的路径中。根据前面介绍DBCP主要 需要如下三个文件:

  • commons-dbcp.jar

  • commons-pool.jar

  • commons-collections.jar

将这三个文件复制到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的基本配置




来源:
阅读:3553
日期:2014-07-03

【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体: 】 
上一篇:[原创]解决jQuery和其他库的冲突
下一篇:[原创]checkbox 标签详解
  >> 相关文章