另外写一个框架用org.apache.xmlrpc.XmlRpc;
解决方案 »
- 1,1,2,3,5,8,13,21,34求第30个数是多少(要求使用递归算法)
- 向linux某个路径下写文件 如何呀给个思路 白谢谢了 俺在线
- jsp中,session内int型的值的传递与获取
- Struts return actionmapping问题
- java byte string 互转问题..
- 为什么Tomcat默认的index.jsp老是阴魂不散?
- 谁告诉我struts开发环境啊!
- tomcat servlet javabean
- 请问下面代码的意思,我总是想不通为什么要lookup("java:comp/env");
- 高手进来帮我啊!!SessionBean问题
- 请问在北京,上海每月拿5000,相当于在内地拿多少钱啊?
- eclipse3.1.2+tomcat5.5.15+lomboz3.1.2+wtp中碰到的问题,急待大家帮忙解决!多谢多谢,真的很急!!!
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;public class BeanFactoryProxy
{
private ApplicationContext ac;
private XmlBeanFactory xbf;
private BeanFactory factory; public BeanFactoryProxy(BeanFactory factory)
{
}
public BeanFactoryProxy(ApplicationContext ac)
{
this.ac = ac;
} public BeanFactoryProxy(XmlBeanFactory xbf)
{
this.xbf = xbf;
} public Object getBean(String beanId)
{
if (null != ac)
{
return ac.getBean(beanId);
}
else if (null != xbf)
{
return xbf.getBean(beanId);
}
else if (null != factory)
{
return factory.getBean(beanId);
}
else
{
throw new RuntimeException("BeanFactoryProxy has not Inited");
}
}}再写一个框架类包含该factory
public class Framework
{ private static BeanFactoryProxy beanFactoryProxy;
private static int state = -1; public static void initialize(File configFile)
{
//TODO
state = 1;
}
public static int getState(){
return state;
} public static void destroy()
{
//TODO
} /**
* @return
*/
public static BeanFactoryProxy getBeanFactoryProxy()
{
return beanFactoryProxy;
} /**
* @param proxy
*/
public static void setBeanFactoryProxy(BeanFactoryProxy proxy)
{
beanFactoryProxy = proxy;
}}在服务器启动时就装载的类
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;public class FrameworkInitializerServlet extends HttpServlet
{
public static File configFile = null; public void init(ServletConfig config) throws ServletException
{
super.init(config);
Framework.initialize(null);
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
Framework.setBeanFactoryProxy(new BeanFactoryProxy(wac));
} /**
* @see javax.servlet.Servlet#destroy()
*/
public void destroy()
{
super.destroy();
Framework.destroy();
}
}初始化rpc类服务器启动时运行
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.xmlrpc.XmlRpc;
import org.apache.xmlrpc.XmlRpcServer;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;public class XmlRpcSvcServlet extends HttpServlet
{
// XML-RPC 服务对象句柄
private XmlRpcServer server = null; /**
* (非 Javadoc)
* @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
*/
public void init(ServletConfig config) throws ServletException
{
super.init(config); // 初始化 xml-rpc server
server = new XmlRpcServer();
XmlRpc.setDefaultInputEncoding("UTF-8"); // 解析配置文件,注册xml-rpc服务
SAXBuilder sb = new SAXBuilder();
sb.setValidation(false);
try
{
Document doc =
sb.build(
config.getServletContext().getRealPath(
"/WEB-INF/xmlrpc-Config.xml"));
Element root = doc.getRootElement(); // 解析注册服务节点 RegServices/Service
Element svcsNode = root.getChild("RegServices");
List list = svcsNode.getChildren("Service");
for (int i = 0; i < list.size(); i++)
{
Element svcNode = (Element) list.get(i);
String svcName = svcNode.getAttributeValue("name");
String className = svcNode.getAttributeValue("classname");
try
{
server.addHandler(
svcName,
Class.forName(className).newInstance());
continue;
}
catch (InstantiationException e1)
{
e1.printStackTrace();
}
catch (IllegalAccessException e1)
{
e1.printStackTrace();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
System.out.println(
"Xml-Rpc Service register fail. [name:"
+ svcName
+ "; classname:"
+ className
+ "]");
}
}
catch (JDOMException e)
{
e.printStackTrace();
}
} /**
* (非 Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void service(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/xml");
byte[] result = server.execute(request.getInputStream());
response.setContentLength(result.length);
OutputStream out = response.getOutputStream();
out.write(result);
out.flush();
}
}配置要注册的类
<?xml version="1.0" ?>
<Config>
<RegServices>
<Service name="LogService" classname="XmlRpcService" />
</RegServices>
</Config>XmlRpcService
public class XmlRpcService
{ // 定义RPC服务的方法 private String xml ="..";
/**
* 数据服务接口名常量
*/
private static final String DATA_SERVICE_NAME = "logService";
//调用
public String testRpc()
{
ILogService theService =
(ILogService ) Framework.getBeanFactoryProxy().getBean(
DATA_SERVICE_NAME);
return theService.testRpc();
}
}
<web-app id="WebApp"><!-- Standard Action Servlet Configuration (with debugging) --> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener--> <servlet> <servlet-name>SpringContextServlet</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>ApplicationResources</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>validate</param-name> <param-value>true</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>ApplicationStartup</servlet-name> <servlet-class>ApplicationStartup</servlet-class> <init-param> <param-name>driver</param-name> <param-value>oracle.jdbc.driver.OracleDriver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:oracle:thin:@192.168.10.10:1521:oracledb</param-value> </init-param> <init-param> <param-name>userName</param-name> <param-value>pub</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>pub</param-value> </init-param>
<init-param> <param-name>executeTime</param-name> <param-value>23:59:59</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> <!-- Database Initialization Servlet Configuration --> <!-- Standard Action Servlet Mapping --> <servlet> <servlet-name>ProviderServlet</servlet-name> <display-name>ProviderServlet</display-name> <servlet-class>ProviderServlet</servlet-class> </servlet>applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"spring-beans.dtd">
<beans>
<import resource="config/Proj.xml" /> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>/WEB-INF/SqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/Datasource</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
sqlMap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig> <settings cacheModelsEnabled="false" lazyLoadingEnabled="false" enhancementEnabled="true" useStatementNamespaces="true"/>
<sqlMap resource="project/dao/ibatis/maps/Proj.xml"/>
bean/config.xml
<beans>
<bean id="ApplyDAO" class="project.project.dao.ApplyDAO">
<property name="dataSource">
<ref bean="dataSource" />
</property> <property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean> <bean id="ApplyService" parent="baseTxProxy">
<property name="target">
<bean class="projectCreate.service.ApplyServiceImpl">
<property name="theInfoDAO">
<ref bean="IInfoDAO" />
</property>
<property name="theLogDAO">
<ref bean="LogDAO" />
</property>
<property name="theIAppDAO">
<ref bean="AppDAO" />
</property>
<property name="theIDAO">
<ref local="lDAO" />
</property>
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
sqlMapClient.xml
..