global-config.xml是如何xml 配置验证关系的?与Global.java有什么关系?

global-config.xml是如何配置的?与Global.java有什么关系?_百度知道
global-config.xml是如何配置的?与Global.java有什么关系?
xml是如何配置的?与Global.java有什么关系global-config
提问者采纳
java还有很多其他配置.xml是全局配置文件,这个配置不光是Global,是全局的
谢谢您的回答
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
为您推荐:
config的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁下次自动登录
现在的位置:
& 综合 & 正文
Struts-config.xml配置文件各个元素的详解
struts-config.xml是Struts的主要配置文件,在该文件中,可以配置数据源、form-bean、action和plug-in(插件)和资源文件的信息。其文件(Struts1.2版本)主要结构如下所示:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"&
&/struts-config&
&data-sources&
&data-source&
&/data-source&
&/data-sources&
&form-beans&
&/form-bean&
&/form-beans&
&global-forwards&
&forward/&
&/global-forwards&
&action-mappings&
&action /&
&controller /&
&message-resources /&
&plug-in /&
&/struts-config&
以上各元素必须是按照这个顺序的,若开发人员打乱顺序,很可能引起Struts容器启动时出错。
当然struts-config.xml还有&display-name /&、&description /&和&icon /&子元素,因为它们用得很少,在此不再赘述。只是讲述常用的子元素的配置。
1. data-sources
本节讲述子元素data-sources的配置,该元素可以配置一个或多个data-source元素,即数据源元素,可以通过&set-property&设置driverClass、url、user、password等属性。配置实例如下:
&data-source&
&!-- 所用的JDBC驱动类,必须--&
&set-property property="driverClass" value="com.mysql.jdbc.Driver"/&
&!-- 所用的JDBC的URL,必须--&
&set-property property="url" value="jdbc:mysql://localhost/test"/&
&!-- 同时打开的最小连结数,缺省值为1,可选--&
&set-property property="minCount" value="1"/&
&!-- 同时打开的最大连结数,缺省值为2,可选--&
&set-property property="maxCount" value="5"/&
&!-- 连结到数据库的用户名,必须--&
&set-property property="user" value="root"/&
&!-- 连结到数据库的密码,必须--&
&set-property property="password" value="root"/&
&/data-source&
开发人员还可以设置Key(绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用中有多于一个的DataSource,则必须设置Key的值)、Description(关于DataSource的描述信息)、ReadOnly(如果设为true,则表示该连结是只读的,缺省为false)、LoginTimeout(创建连结的最大允许时间,以秒为单位)和AutoCommit(如果为true,则每次execute之后会强制回滚。缺省为true)属性。
在实际项目中,例如在Hibernate + Struts构建的系统中,一般使用Hibernate的hibernate.cfg.xml文件来配置数据源的信息。而在Hibernate + Struts + Spring构建的系统中,一般使用spring的配置文件(eg. applicationContext.xml)来配置数据源的信息。
2. form-beans
子元素form-beans用来配置绑定到Action的各个FormBean的实例。每个FormBean实例用form-bans的子元素form-bean来定义。form-bean又分普通的FormBan和动态FormBean。
(1)普通form-bean
普通FormBean需要定义一个JavaBean类,在form-bean元素中指定该类。普通form-bean元素的定义格式如下:
&form-bean name="FormBean的名称" type="FormBean对应JavaBean类的全路径"/&
Eg. &form-bean name="UserForm"
type="com.amigo.struts.form.user.UserForm" /&
对应的FormBean类一般是继承ActionForm类,例如下面的例子定义了一个UserForm,它具有userName和password两个属性。该类的如下:
package com.amigo.struts.form.
import org.apache.struts.action.ActionF
public class UserForm extends ActionForm {
private static final long serialVersionUID = 1L;
/** 用户名.*/
private String userN
/** 密码. */
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
(2)动态form-bean
动态form-bean不需要定义对应的javabean类,其元素都在struts-config.xml中定义。其type为:org.apache.struts.validator.DynaValidatorForm。下面的动态FormBean定义了userName和password属性,配置如下:
&form-bean name="UserForm" type="org.apache.struts.validator.DynaValidatorForm"&
&form-property name="userName" type="java.lang.String"/&
&form-property name="password" type="java.lang.String"/&
&/form-bean&
3 global-forwards
global-forwards用于配置全局转发,struts首先会在&action-mappings&元素中找对应的&forward&,若找不到,则到全局转发配置中找。它包含0个或多个&forward/&元素,格式如下所示:
&forward name="唯一的名称" path="指向资源的相对路径"/&
&global-forwards&
&forward name="failed" path="/error.jsp" /&
&forward name="success" path="/ success.jsp" /&
&/global-forwards&
&forward/&元素还有一个redirect属性,其默认值为false,如果redirect设为true的时候,则用HttpServletResponse.sendRedirect()方法,否则用RequestDispatcher.forward()方法,缺省为false。
4 action-mappings
该元素用于将Action元素定义到ActionServlet类中,它含有0到多个&action/&元素,其格式如下:
&action-mappings&
&action path="Action请求的相对路径"
type="该Action的对应类的全路径"
name="该Action绑定的FormBean"
&forward name="指定处理相应请求所对应的地址" path="相对路径"/&
&/action-mappings&
每个action子元素可包含一个或多个forward子元素。除了path、type和name属性外,action还具有如下属性:
lscope:指定ActionForm Bean的作用域(session和request),缺省为session。(可选);
linput:当Bean发生错误时返回的路径(可选);
lclassname:指定一个调用这个Action类的ActionMapping类的全名。缺省用org.apache.struts.action.ActionMapping(可选);
linclude:如果没有forward的时候,它起forward的作用(可选);
lvalidate:若为true,则会调用ActionForm的validate()方法,否则不调用,缺省为true(可选)。
forward属性也是可选的。
action元素定义举例如下:
&action-mappings&
path="/userAction"
type="com.amigo.struts.action.UserAction"
name="UserForm"
scope="request"
validate = "false"
parameter="method" &
&forward name="error" path="/user/error.jsp" /&
&forward name="success" path="/user/success.jsp"/&
&forward name="add" path="/user/addUser.jsp"/&
&forward name="update" path="/user/updateUser.jsp"/&
&forward name="list" path="/user/userList.jsp"/&
&/action-mappings&
Eg2. 有input属性的例子:
&action-mappings&
&action path="/calcAction"
type="com.amigo.struts.action.CalcAction"
name="CalcForm"
scope="request"
validate="true"
input="/index."&
&forward name="success" path="/success."/&&forward name="error" path="/error."/&
&/action-mappings&
Eg3. 仅有JSP的action元素:
&action path="/menu"
parameter="/default.jsp"
type="org.apache.struts.actions.ForwardAction" /&
首先,ActionServlet接到请求后调用ForwardAction的execute()方法,execute()根据配置的parameter属性值来forward到那个URI。
这样做的效果是:没有任何form被实例化,比较现实的情形可能是form在request更高级别的范围中定义;或者这个action被用作在应用程序编译好后充当系统参数,只需要更改这个配置文件而不需要重新编译系统。
5. message-resources
该元素用来定义资源文件,格式如下:
&message-resources parameter="给定资源文件的全名"
classname="定义处理消息资源的类名的全名"
factory="定义MessageResourcesFactory类的全名"
key="定义绑定在这个资源包中的ServletContext的属性主键"
null=" 如果为true,则找不到消息key时,则返回null "/&
message-resources的各属性中,只有parameter是必选的,其余都为可选,classname属性默认为:org.apache.struts.config.MessageResourcesConfig,factory属性默认为:org.apache.struts.util.property.MessageResourcesFacotry,key属性默认为:Action.MESSAGES_KEY,null属性默认为:true。
举例如下,在struts配置文件中添加如下信息:
Eg1. &message-resources parameter="ApplicationResources" /&
Eg2. &message-resources
parameter="com.amigo.struts. ApplicationResources "
null="false"/&
6. plug-in
该元素用于定义插件,可定义0到多个插件元素,最常见的plug-in为Struts的验证的插件,配置举例如下:
Eg1. Struts的验证的plug-in:
&plug-in className="org.apache.struts.validator.ValidatorPlugIn"&
&set-property property="pathnames"
value="/WEB-INF/validator-rules.xml, /WEB-INF/manager/validation.xml" /&
&set-property property="stopOnFirstError" value="false" /&
&/plug-in&
Eg2. Spring提供的载入插件配置:
&plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&
&set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml"/&
&/plug-in&
7. 完整配置实例
本小节举例说明struts-config.xml文件的配置:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"&
&struts-config&
&data-sources /&
&form-beans&
&form-bean name="UserForm" type="com.amigo.struts.form.user.UserForm" /&
&/form-beans&
&global-exceptions /&
&global-forwards /&
&action-mappings&
path="/userAction"
type="com.amigo.struts.action.UserAction"
name="UserForm"
scope="request"
validate = "false"
parameter="method" &
&forward name="error" path="/user/error.jsp" /&
&forward name="success" path="/user/success.jsp"/&
&forward name="add" path="/user/addUser.jsp"/&
&forward name="update" path="/user/updateUser.jsp"/&
&forward name="list" path="/user/userList.jsp"/&
&/action-mappings&
&message-resources parameter="com.amigo.struts. ApplicationResources " /&
&plug-in className="org.apache.struts.validator.ValidatorPlugIn"&
&set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/&
&set-property property="stopOnFirstError" value="false" /&
&/plug-in&
&/struts-config&
&&&&推荐文章:
【上篇】【下篇】工作中常常需要用到解析XML文件、前几天面试被问到了一些扩展知识,大跌眼镜。没有回答的让人满意、特此记录学习一下。 特点:DOM需要一次性载入XM
工作中常常需要用到解析XML文件、前几天面试被问到了一些扩展知识,大跌眼镜。没有回答的让人满意、特此记录学习一下。特点:DOM需要一次性载入XML文件到内存。&&&&& SAX不需要一次性载入,分析能够立即开始,而不是等待所有的数据被处理。&&&&& JDOM& 大量使用了Java的集合对象,大大提高了Java程序员的工作效率28原则。&&&&& DOM4J 目前来说用的最多,我们的项目也是在用DOM4j来解析。 1)DOM(JAXP Crimson解析器)&&& DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。&&& 2)SAX&&& SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。&&& 选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。&&& DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。&&& SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。&&& 3)JDOM http://www.jdom.org&&& JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。&&& JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。&&& JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。&&& JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。&&& 4)DOM4J http://dom4j.sourceforge.net&&& 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。&&& 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。&&& 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。&&& DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.&&& 2…… 比较&&& 1)DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.&&& 2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。&&& 3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。&& 3. 四种xml操作方式的基本使用方法xml文件:<?xml version="1.0" encoding="GB2312"?><RESULT><VALUE>   <NO>A1234</NO>   <ADDR>XX号</ADDR></VALUE><VALUE>   <NO>B1234</NO>   <ADDR>XX组</ADDR></VALUE></RESULT>1)DOMimport java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;public class MyXMLReader{ public static void main(String arge[]){  long lasting =System.currentTimeMillis();  try{   File f=new File("data_10k.xml");   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();   DocumentBuilder builder=factory.newDocumentBuilder();   Document doc = builder.parse(f);   NodeList nl = doc.getElementsByTagName("VALUE");   for (int i=0;i<nl.getLength();i++){    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());   }  }catch(Exception e){   e.printStackTrace();}2)SAXimport org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() {  super();} public static void main(String args[]) {  long lasting = System.currentTimeMillis();  try {   SAXParserFactory sf = SAXParserFactory.newInstance();   SAXParser sp = sf.newSAXParser();   MyXMLReader reader = new MyXMLReader();   sp.parse(new InputSource("data_10k.xml"), reader);  } catch (Exception e) {   e.printStackTrace();  }  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}  public void characters(char ch[], int start, int length) throws SAXException {  String tag = (String) tags.peek();  if (tag.equals("NO")) {   System.out.print("车牌号码:" + new String(ch, start, length));}if (tag.equals("ADDR")) {  System.out.println("地址:" + new String(ch, start, length));}}  public void startElement(String uri,String localName,String qName,Attributes attrs) {  tags.push(qName);}}3) JDOMimport java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.*;public class MyXMLReader { public static void main(String arge[]) {  long lasting = System.currentTimeMillis();  try {   SAXBuilder builder = new SAXBuilder();   Document doc = builder.build(new File("data_10k.xml"));   Element foo = doc.getRootElement();   List allChildren = foo.getChildren();   for(int i=0;i<allChildren.size();i++) {    System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());    System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());   }  } catch (Exception e) {   e.printStackTrace();}}4)DOM4Jimport java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*;public class MyXMLReader { public static void main(String arge[]) {  long lasting = System.currentTimeMillis();  try {   File f = new File("data_10k.xml");   SAXReader reader = new SAXReader();   Document doc = reader.read(f);   Element root = doc.getRootElement();   E   for (Iterator i = root.elementIterator("VALUE"); i.hasNext() {    foo = (Element) i.next();    System.out.print("车牌号码:" + foo.elementText("NO"));    System.out.println("车主地址:" + foo.elementText("ADDR"));   }  } catch (Exception e) {   e.printStackTrace();})
网友评论仅供其表达个人看法,并不表明网易立场。Tomcat server.xml配置示例 - ImportNew
| 标签: ,
几乎所有容器类型的应用都会包含一个名为 server.xml 的文件结构。基本上,其中的每个元数据或者配置都是容器完成初始化所需要的。正是由于这些内容都是可配置的,使得软件设计者或架构师可以在容器运行时或销毁时(停止)的情况下注入需要的服务。明白这一点,其重要性不亚于明白代码或软件的工作机制。
对于这篇文章,我们将通过分析 server.xml 文件来理解和配置 appache tomcat 服务器。
准备工作:
安装 Apache Tomcat 7。(从 apache tomcat 的获取源码)
安装教程可以。
1、Tomcat 安装目录
安装完成 的tomcat,被放在了你的本地存储中。对于 windows ,通常在 “ Program Files ” 文件夹下,对于 Mac 或者 Linux,可能在 /user/var/opt 或 /User/&&/Application 文件夹下。进入该目录,可以看到下面这几个文件和文件夹:
bin:Tomcat 二进制启动脚本。
conf:应用于所有 webapp 的全局配置。默认会提供如下配置:
catalina.policy 提供特殊的安全策略。
两个 Properties 文件:catalina.properties 和 logging.properties ,
四个 XML 配置文件:server.xml(Tomcat 主配置文件)、web.xml(web 应用全局部署描述)、context.xml(Tomcat 特殊配置全局选项)和 tomcat-user.xml(授权和访问控制用户名,密码和角色数据库)。
每个引擎在conf 目录下都有一个对应的子目录,例如Catalina,反过来对于每个 host 都有一个二级子目录,比如localhost。可以将上下文信息配置放在这里(类似于 context.xml ,但是对于每个在 host 下的 webapp ,该文件命名为 webapp.xml )。
lib:确保目录下的 JAR-file 对于所有 webapp 都有效。默认安装包括 servlet-api.jar(Servlet),jasper.jar(JSP)和 jasper-el.jar(EL)。外部的 JAR 文件也可以放在这里,如 MySQL JDBC 驱动(mysql-connector-java-5.1.{xx}-bin.jar )和 JSTL(jstl.jar 和 standard.jar)。
logs:包括引擎日志文件 Catalina.{yyyy-mm-dd}.log ,host 日志文件 localhost.{yyyy-mm-dd}.log,和其它应用的日志文件,如 manager 和 host-manager。访问日志(由 AccessLogValve 创建)也放在这里。
webapps:默认为 appBase – web应用的根目录。
work: contains the translated servlet source files and classes of JSP/JSF. Organized in hierarchy of engine name (Catalina), host name (localhost), webapp name, followed by the Java classes package structure.
temp:临时文件。
2、Tomcat 架构
Tomcat 是一个 HTTP 服务器。也是一个servlet 容器,可以执行 Java Servlet,将 JavaServer Page(JSP)和 JavaServerFaces(JSF)转换为 Java Servlet。Tomcat 采用了层次化和模块化的架构,如下:
图片1.0 Tomcat 架构
3、主配置文件(server.xml)
server.xml
“server.xml” 是 Tomcat 的主配置文件,在 &CATALINA_HOME&conf 目录下可以看到。后(删掉注释和格式化后)的默认”server.xml“文件如下:
&?xml version='1.0' encoding='utf-8'?&
&Server port=&8005& shutdown=&SHUTDOWN&&
&Listener className=&org.apache.catalina.core.JasperListener& /&
&Listener className=&org.apache.catalina.core.AprLifecycleListener& SSLEngine=&on& /&
&Listener className=&org.apache.catalina.core.JreMemoryLeakPreventionListener& /&
&Listener className=&org.apache.catalina.mbeans.GlobalResourcesLifecycleListener& /&
&Listener className=&org.apache.catalina.core.ThreadLocalLeakPreventionListener& /&
&GlobalNamingResources&
&Resource name=&UserDatabase& auth=&Container&
type=&org.apache.catalina.UserDatabase&
description=&User database that can be updated and saved&
factory=&org.apache.catalina.users.MemoryUserDatabaseFactory&
pathname=&conf/tomcat-users.xml& /&
&/GlobalNamingResources&
&Service name=&Catalina&&
&Connector port=&8080& protocol=&HTTP/1.1&
connectionTimeout=&20000&
redirectPort=&8443& /&
&Connector port=&8009& protocol=&AJP/1.3& redirectPort=&8443& /&
&Engine name=&Catalina& defaultHost=&localhost&&
&Realm className=&org.apache.catalina.realm.LockOutRealm&&
&Realm className=&org.apache.catalina.realm.UserDatabaseRealm&
resourceName=&UserDatabase&/&
&Host name=&localhost&
appBase=&webapps&
unpackWARs=&true& autoDeploy=&true&&
&Valve className=&org.apache.catalina.valves.AccessLogValve& directory=&logs&
prefix=&localhost_access_log.& suffix=&.txt&
pattern=&%h %l %u %t &%r& %s %b& /&
&/Service&
3.1、Server
Server(第二行)是顶级组件,代表一个 Tomcat 实例。可以包含一个或多个 Services ,其中每个 Service 都有自己的 Engines 和 Connectors。
&Server port=&8005& shutdown=&SHUTDOWN&& ...... &/Server&
3.1.1、基本属性
className:使用 Java 实现类的名称。这个类必须实现 org.apache.catalina.Server 接口。如果没有指定类名,将会使用标准实现。
address: server 在这个 TCP/IP 地址上监听一个 shutdown 命令。如果没有指定地址,将会使用 localhost。
port:server 在这个端口上监听一个 shutdown 命令。设置为 -1 表示禁用 shutdown 命令。
shutdown:连接到指定端口的 TCP/IP 收到这个命令字符后,将会关闭 Tomcat。
3.2、Listeners
Server 可以包含几个监听器。一个监听器监听指定事件,并对其作出响应。
JasperListener 作用于 Jasper JSP 引擎,该引擎负责对更新后的 JSP 页面进行重编译。
Listener className=&org.apache.catalina.core.JasperListener& /&
GlobalResourcesLifecycleListener 作用于全局资源,保证 JNDI 对资源的可达性,比如数据库。
&Listener className=&org.apache.catalina.mbeans.GlobalResourcesLifecycleListener& /&
3.2.1、基本属性
SSLEngine:使用的SSLEngine名称。off:不使用 SSL,on:使用 SSL 但不指定引擎。默认值是 on。会初始化本地 SSL 引擎,对于使用 SSLEnabled 属性的 APR/native connector 来讲,该选项必须可用。
SSLRandomSeed:指定伪随机数生成器(PRNG)的随机数种子源,默认值为 builtin。在开发环境下,可能要将其设置为 /dev/urandom , 以获得更快地启动速度。
FIPSMode:设置为 on 会请求 OpenSSL 进入 FIPS 模式(如果 OpenSSL 已经处于 FIPS 模式,将会保留该模式)。设置为 enter 会强制 OpenSSL 进入 FIPS 模式(如果 OpenSSL 已经处于 FIPS 模式,将会产生一个错误)。设置为 require 要求 OpenSSL 已经处于 FIPS 模式(如果 OpenSSL 当前没有处于 FIPS 模式将会产生一个错误)。
3.3、全局命名资源
9到15行的元素定义了 JNDI(Java 命名和目录接口)资源,其允许 Java 软件客户端通过名称搜寻和查找数据。
默认配置通过10到14行的元素定义了一个名称为 UserDatabase 的 JNDI,通过”conf/tomcat-users.xml“得到了一个用于用户授权的内存数据库。
&GlobalNamingResources&
&Resource name=&UserDatabase& auth=&Container&
type=&org.apache.catalina.UserDatabase&
description=&User database that can be updated and saved&
factory=&org.apache.catalina.users.MemoryUserDatabaseFactory&
pathname=&conf/tomcat-users.xml& /&
&/GlobalNamingResources&
你也可以定义其它全局化JNDI资源来实现连接池,比如 MySQL 数据库。
3.4、Services
一个 Service 可以连接一个或多个 Connectors 到一个引擎。默认配置定义了一个名为“Catalina”的 Service ,连接了两个 Connectors:HTTP 和 AJP 到当前的引擎。
&Service name=&Catalina&& ...... &/Service&
3.4.1、基本属性
className:该实现使用的 Java 类名称。这个类必须实现 org.apache.catalina.Service 接口。如果没有指定类名称,将会使用标准实现。
name:Service 的显示名称,如果采用了标准的 Catalina 组件,将会包含日志信息。每个 Service 与某个特定的 Server 关联的名称必须是唯一的。
3.5、Connectors
一个 Connector 关联到一个 TCP 端口,负责处理 Service 与客户端之间的交互。默认配置定义了两个 Connectors。
HTTP/1.1:处理 HTTP 请求,使得 Tomcat 成为了一个 HTTP 服务器。客户端可以通过 Connector 向服务器发送 HTTP 请求,接收服务器端的 HTTP 响应信息。
&Connector port=&8080& protocol=&HTTP/1.1& connectionTimeout=&20000& redirectPort=&8443& /&
与生产服务默认使用80端口不同,Tomcat HTTP 服务默认在 TCP 端口8080上运行 。你可以选择之间的任意数字作为端口号来运行 Tomcat 服务器,前提是该端口没有被任何其它应用使用。connectionTimeOut 属性定义了这个 connector 在链接获得同意之后,获得请求 URI line(请求信息)响应的最大等待时间毫秒数。默认为20秒。redirect 属性会把 SSL 请求重定向到 TCP 的8443端口。AJP/1.3:Apache JServ Protocol connector 处理 Tomcat 服务器与 Apache HTTP 服务器之间的交互。
&Connector port=&8009& protocol=&AJP/1.3& redirectPort=&8443& /&
可以将 Tomcat 和 Apache HTTP 服务运行在一起,Apache HTTP 服务器处理静态请求和 PHP;Tomcat 服务器负责处理 Java Servlet/JSP 。可以参阅“Tomcat 与 Apache 协同工作如何配置”。
包含了 Engine、Host、Context和 Cluster 的 Tomcat 称为容器。最高级的是 Engine,最底层的是 Context。某些组件,比如 Realm 和 Valve,也可以放在容器中。
引擎是容器中最高级别的部分。可以包含一个或多个 Host。Tomcat 服务器可以配置为运行在多个主机名上,包括虚拟主机。
&Engine name=&Catalina& defaultHost=&localhost&/&
Catalina 引擎 从 HTTP connector 接收 HTTP 请求,并根据请求头部信息中主机名或 IP 地址重定向到正确的主机上。
3.7.1、基本属性
backgroundProcessorDelay —— 这个值表示了在这个引擎和它的子容器上调用 backgroundProcess 方法之间间隔的秒数,包括所有 host 和 context。值为非负时不会调用子容器(意味着其使用自身的处理线程)。设置为正值会产生一个衍生线程。等待指定的时间之后,该线程会在这个引擎和它的所有子容器上调用 backgroundProcess 方法。如果没有指定,默认值为10,即会有10秒的延迟。
className:实现该引擎使用的 Java 类名。该类必须实现 org.apache.catalina.Engine 接口。如果没有指定,会使用标准值(下面有定义)。
defaultHost:默认主机名,定义了处理指向该服务器的请求所在主机的名称,但名称不是在这个文件中配置。
jvmRoute:在负载均衡场景下必须定义该参数,来保证 session affinity 可用,对于集群中所有 Tomcat 服务器来讲定义的名称必须是唯一的, 该名称将会被添加到生成的会话标示符中,因此,允许前端代理总是将特定会话转发到同一个 Tomcat 实例。
name:Engine 的逻辑名称,用在日志和错误信息中。当在相同的 Server 中使用多个 Service 元素时,每个 Engine 必须指定一个唯一的名称。
startStopThreads:Engine 在启动 Host 子元素时将会并发使用的线程数目。如果设置为0,将会使用 Runtime.getRuntime().availableProcessors() 的值。设置为负数,将会使用
Runtime.getRuntime().availableProcessors() + value 的值,如果结果小于1,将会使用 1 个线程。如果没有指定,默认值为 1 。
3.8、Realm
一个 Realm(域)就是一个包含 user、password 和 role 认证(比如访问控制)的数据库。你可以在任何容器中定义 Realm ,例如 Engine、Host、Context 和 Cluster。
&Realm className=&org.apache.catalina.realm.LockOutRealm&&
&Realm className=&org.apache.catalina.realm.UserDatabaseRealm& resourceName=&UserDatabase&/&
默认配置定义了一个 Catalina Engine 的 Realm(UserDatabaseRealm),对用户访问 engine 的权限进行控制。其使用定义在 GlobalNamingResources 中,名字为 UserDatabase 的 JNDI。
除了 UserDatabaseRealm 以外,还有:JDBCRealm(授权用户是否可以通过 JDBC 驱动链接到关系型数据库);DataSourceRealm(通过 JNDI 连到数据源);JNDIRealm(连接到一个 LDAP 目录)和 MemoryRealm (将 XML 文件加载到内存)。
3.8.1、基本属性
className:使用 Java 实现类的名称。这个类必须实现 org.apache.catalina.Realm 接口。
3.9、Hosts
一个 Host 定义了在 Engine 下的一个虚拟机,反过来其又支持多个 Context(web 应用)。
&Host name=&localhost& appBase=&webapps& unpackWARs=&true& autoDeploy=&true&/&
默认配置定义了一个名为 localhost 的主机。appBase 属性定义了所有 webapp 的根目录,在这种情况下是 webapps。默认情况下,每一个 webapp 的 URL 和它所在的目录名称相同。例如,默认的 Tomcat 安装目录的 webapps 下提供了四个 web 应用:docs、examples、host-manager 和 manager。只有 ROOT 是个例外,它用一个空字符串定义。也就是说,它的 URL 是
。unpackWARs 属性指定了放到 webapps 目录下的 WAR-file 是否应该被解压。对于 unpackWARs=”false“,Tomcat 将会直接从 WAR-file 运行应用,而不解压,这可能导致应用运行变慢。autoDeploy 属性指定了是否自动部署放到 webapps 目录下的应用。
3.9.1、基本属性
appBase:虚拟机应用的根目录。该目录是一个可能包含部署到虚拟机上 web 应用的路径名。也可能是一个指定的绝对路径名,或者是一个相对于 $CATALINA_BASE 目录的路径名。如果没有指定,默认会使用 webapps。
xmlBase:虚拟机 XML 根目录。该目录是一个可能包含部署到虚拟机上context XML 描述符的路径名。也可能是一个指定的绝对路径名,或者是一个相对于 $CATALINA_BASE 目录的路径名。如果没有指定,默认会使用 conf/ 目录。
createDirs:如果设置为 true,Tomcat 将会在启动阶段,尝试创建一个由 appBase 和 xmlBase 属性定义的目录。默认值是 true。如果设置为 true ,并且目录创建失败,将会打印出一个错误信息,但是不会终止启动过程。
autoDeploy:该属性的值指明了在 Tomcat 运行的时候,是否需要定时检查新的或者更新后的 web 应用。如果为 true,Tomcat 会定时检查 appBase 和 xmlBase 目录,并对找到的新 web 应用和 context XML 描述符进行部署。更新 web 应用 或 XML 上下文描述符将会触发 web 应用的重载。默认值为 true。
backgroundProcessorDelay:表示在调用这台主机的 backgroundProcess 方法和它的子容器方法,包括所有的 context,之间延迟的秒数。如果延迟值不是负数的话,不会调用子容器(意味着会使用它们自己的处理线程)。设置为正数会产生衍生线程。在等待指定的时间之后,线程将会在该 host 上调用 backgroundProcess 方法,包括它的所有子容器。host将会使用后台进程执行web 应用部署相关的任务。如果没有指定,默认值为-1,意味着 host 将会依赖于它的父引擎的后台处理线程。
className:使用的 Java 实现类的名称。该类必须实现 org.apache.catalina.Host 接口。
deployIgnore:一个正则表达式,定义了在自动部署和启动时部署的情况下需要忽略的目录。这就允许你在版本控制系统中保持自己的配置,例如,不会将 .svn 或者 CVS 文件夹部署到 appBase 目录下。该正则表达式是相对于 appBase 的。同时也是固定的,意味着是相对于整个文件或目录的名称进行的。因此,foo 只会匹配名称为 foo 的文件或目录,而不会匹配foo.war、foobar或者 myfooapp 这样的名称。如果想让“foo”匹配任意名称,可以使用 .*foo.*。
deployOnStartup:指定在 Tomcat 启动时是否需要自动部署host下的 web 应用。默认值为 true。
failCtxIfServletStartFails:设置为 true时,如果它的任意一个 load-on-startup&=0 的 servlet 停止自身启动后,停止启动它的每一个子 context 。每一个子 context 可能覆盖这个属性。如果没有指定,将会使用默认值 false。
name:通常是虚拟主机的网络名称,注册在你的域名服务器上。无论指定的主机名称是什么样的,Tomcat 在内部都会将其转换为小写。嵌套在 Engine 内部的 Host ,其中必须有一个 Host 的名称匹配 Engine 的默认 Host 设置。
startStopThreads:Host 在启动子 Context 元素时会并发使用的线程数。如果自动部署被使用的话将会使用该线程池部署新的 Context。值为0时将会使用 Runtime.getRuntime().availableProcessors() 的值。值为负数时将会使用 Runtime.getRuntime().availableProcessors() 加上该值得和,而和小于1时将会使用1个线程。如果没有指定,会使用默认值1。
undeployOldVersion:该选项的值决定 Tomcat,即自动部署进程部分,是否会检查并发部署的过时 web 应用,任何找到的应用都会被移除。只有在 autoDeploy 为 true 的情况下才会生效。如果没有指定将会使用默认值 false。
3.10、集群
Tomcat 支持服务器集群。它可以复制整个集群的会话和上下文属性。也可以部署一个 WAR 文件到所有的集群上。
3.10.1、基本属性
className:集群主类,当前只有一个是有效的, org.apache.catalina.ha.tcp.SimpleTcpCluster。
channelSendOptions: 组通讯(tribe channel)发送选项,默认为8。该选项被用来标志所有的信息通过 SimpleTcpCluster 发送。该标志指定怎样发送信息,是一个简单的逻辑或。
channelStartOptions:设置集群使用对象的启动和停止标志。默认是 Channel.DEFAULT,会启动所有的 channel 服务,包括发送者、接收者、组播发送者和组播接收者。
heartbeatBackgroundEnabled:标志是否在容器的后台线程中调用 channel 的心跳检测。默认是 false。当设置为 true 时,不要忘了禁用 channel 心跳检测线程。
notifyLifecycleListenerOnFailure:当所有的 ClusterListener 不能接收 channel 消息时,该标志位决定是否通知 LifecycleListeners。默认是 false。
3.11、Valve
Valve (阀门)作为请求的前置处理程序,可以在请求发送到应用之前拦截 HTTP 请求。可以定义在任何容器中,比如 Engine、Host、Context和 Cluster。默认配置中,AccessLogValve 会拦截 HTTP 请求,并在日志文件中创建一个日志切入点,如下:
&Valve className=&org.apache.catalina.valves.AccessLogValve& directory=&logs&
prefix=&localhost_access_log.& suffix=&.txt&
pattern=&%h %l %u %t &%r& %s %b& /&
3.11.1、基本属性
className:设置为 org.apache.catalina.ha.tcp.ReplicationValve
filter —— 对于已知文件扩展名或 url ,可以在请求中使用 Valve 通知 cluster 没有修改 session,对于本次变化 cluster 没有必要通知 session 管理者。如果请求匹配该过滤器模型,cluster 会假设 session 没有发生变化。一个filter 样例大概是这样的 filter=“.*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.css|.*.txt”。filter 使用
java.util.regex 的正则表达式。
primaryIndicator:布尔值。如果为 true,replication valve 将会把 primaryIndicatorName 属性定义的名称插入到 request 属性中。该值无论是 Boolean.TRUE 或者 Boolean.FALSE,都会被放入 request 属性中。
primaryIndicatorName:默认值为 org.apache.catalina.ha.tcp.isPrimarySession,这个值定义了一个 request 属性的名称,值是一个布尔值,表示会话所在的服务器是否为主服务器。
statistics:布尔值。如果想让 valve 收集请求的统计数据,设置为 true。默认值为 false
以下是其它一些 valve:
RemoteAddrValve:阻截来自特定的 IP 地址的请求。
RemoteHostValve:阻截基于主机名称的请求。
RequestDumperValve:记录了请求的详细信息。
SingleSignOn Valve:当置于a下时,允许单点登录到该主机下的所有应用上。
更多信息见于 server.xml 文件的顶层和嵌套级别的元素和属性,可以在查看。
4、可选配置(server-&name&.xml)
4.1、包括 server-.xml文件
现在,如果我们想要为应用修改 server.xml 文件该怎么做?不能仅仅因为一个应用修改 server.xml 文件,因为它可能会对所有应用部署的初始化产生影响。对于指定的应用如何隔离指定的变化?
答案就是:创建一个 server-&name&.xml
server-.xml 是一个自定义的文件,包含了对于一个指定 app 需要隔离的配置变化。所有这种格式的文件都会在 server.xml 文件之后被调用。
4.2、使用自定义的 server-&name&.xml 代替 server.xml
不推荐这么做,但如果想满足下自己好奇心的除外,你可以通过编辑 catalina.bat 文件来使用你自己的 server.xml 作为替代。
catalina.bat start -config confserver-&name&.xml
总的来讲,无论是 serve.xml 还是你自己的 server-&name&.xml 文件,都是 container 的核心配置。对于应用开发者和发布管理员来讲,是一种在部署 J2EE 应用的容器中放入资源文件的补充策略。其它无论以何种方式实现的 J2EE 标准容器(厂商),都有相同的配置文件,允许自定义注入和绑定,同时允许在部署、重新部署和卸载时控制哪些服务是有效的。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
java 简单易懂,有问题网上有太多解决方案了,并且java开发人员众多,程序易维护
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2016 ImportNew

我要回帖

更多关于 sqlmapconfig.xml配置 的文章

 

随机推荐