框架本身已提供了一个整合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允许的所有初始化参数:
下面将详细介绍这几个初始化参数的作用:
设置servlet编码。
如果你没有定义这个初始化参数,框架将使用默认的“UTF-8”编码。
指定框架配置文件的位置。它可以是类路径的资源文件,比如“my/config/soybean-milk.cfg.xml”; 也可以是应用的“/WEB-INF”目录下的文件,比如“/WEB-INF/cfg/soybean-milk.cfg.xml”。
如果你没有定义这个初始化参数,框架将会从从默认的“/WEB-INF/soybean-milk.config.xml”配置文件初始化。
指定外部解决对象工厂在应用(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了。
设置DispatchServlet创建的WEB执行器在应用(ServletContext)中的保存关键字,这样你便可以在需要时访问到此框架的所有内容。
如果你没有定义这个初始化参数,DispatchServlet将不会在应用中保存它创建的WEB执行器。