框架本身已提供了一个整合servlet DispatchServlet, 它会依据初始化参数构造一个WEB执行器。 在运行时,所有到这个servlet的请求都会被交给这个WEB执行器来处理。

你只需要将这个servlet添加到应用的web.xml中, 配置一些初始化参数,然后设置它可以处理URL即可。

下面是一个配置示例:

<servlet>
	<servlet-name>dispatchServlet</servlet-name>
	<servlet-class>org.soybeanMilk.web.servlet.DispatchServlet</servlet-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>soybean-milk-config</param-name>
		<param-value>/WEB-INF/soybean-milk-config.xml</param-value>
	</init-param>
	<init-param>
		<param-name>external-resolver-factory</param-name>
		<param-value>mySpringAppContextResolverFactory</param-value>
	</init-param>
	<init-param>
		<param-name>application-executor-key</param-name>
		<param-value>myWebExecutor</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatchServlet</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

上面这个示例包含了DispatchServlet允许的所有初始化参数:

下面将详细介绍这几个初始化参数的作用:

encoding(可选)

设置servlet编码。

如果你没有定义这个初始化参数,框架将使用默认的“UTF-8”编码。

soybean-milk-config(可选)

指定框架配置文件的位置。它可以是类路径的资源文件,比如“my/config/soybean-milk.cfg.xml”; 也可以是应用的“/WEB-INF”目录下的文件,比如“/WEB-INF/cfg/soybean-milk.cfg.xml”。

如果你没有定义这个初始化参数,框架将会从从默认的“/WEB-INF/soybean-milk.config.xml”配置文件初始化。

external-resolver-factory(可选)

指定外部解决对象工厂在应用(ServletContext)属性中的关键字。 如果你设置了这个初始化参数,DispatchServlet将会从应用中查找外部解决对象工厂并将它整合到框架中。

你可以使用这个初始化参数来整合其他框架,比如IOC容器Spring和Guice。

下面是一个整合Spring的过程示例:

首先,定义一个解决对象工厂类:

public class MySpringResolverFactory implements ResolverFactory
{
	private BeanFactory webApplicationContext;
	
	public MySpringResolverFactory(){}
	
	public void setWebApplicationContext(WebApplicationContext webAppContext)
	{
		this.webApplicationContext=webAppContext;
	}
	
	@Override
	public Object Object(Serializable resolverId)
	{
		return webApplicationContext.getBean(resolverId);
	}
}

定义一个应用监听器,并把它配置在web.xml中Spring初始化监听器之后:

public class MySpringResolverFactoryInitListener implements ServletContextListener
{
	public void contextDestroyed(ServletContextEvent sce)
	{
		
	}
	
	public void contextInitialized(ServletContextEvent sce)
	{
		BeanFactory springContext=ContextLoader.getCurrentWebApplicationContext(sce.getServletContext());
		
		MySpringResolverFactory rf=new MySpringResolverFactory();
		rf.setWebApplicationContext(springContext);
		
		sce.getServletContext().setAttribute("mySpringAppContextResolverFactory",rf);
	}
}

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>my.MySpringResolverFactoryInitListener</listener-class>
</listener>

然后,将你的DispatchServlet初始化参数external-resolver-factory的值设置为“mySpringAppContextResolverFactory”。

这样,你就可以在框架配置文件<invoke>标签的resolver属性中使用在Spring中定义的那些<bean>id了。

application-executor-key(可选)

设置DispatchServlet创建的WEB执行器在应用(ServletContext)中的保存关键字,这样你便可以在需要时访问到此框架的所有内容。

如果你没有定义这个初始化参数,DispatchServlet将不会在应用中保存它创建的WEB执行器