使用Spring as Framework,如果我需要为JSP / Servlet(在Web服务器上)或Application桌面客户端或Mobile客户端提供业务逻辑服务,那么在远程服务器中完成逻辑业务(没有EJB)的唯一方法通过Servlets?
答案 0 :(得分:2)
没有。您可以通过RMI, Hessian, Burlap, JAX-RPC等公开逻辑
答案 1 :(得分:2)
这是另一种选择。但是没有什么可以阻止你创建自己的服务器或处理Spring容器的工作。
使用Servlet容器的优点是可以免费获得线程和套接字处理。 (这也适用于带有RMI服务器的RMI)
使用使用Servlet的Web Service框架的优点是您只需要处理和配置生成的代码。它适用于所有主要技术,如.NET和PHP,因为它只是XML。
高级操作环境的另一个优点是Servlet默认在端口80上发送HTTP消息。对于刚性防火墙,这是绝对最简单的解决方案。
例如,对于RMI,您需要两个端口进行通信。
如果您对在远程服务器上使用Tomcat等Web容器感兴趣,则应将Web容器放在Web容器中。
但是,如果你能在两端使用Spring,绝对最简单的选择是将Spring invokers与Java 6的捆绑Web容器一起使用。
通过良好的分层,您可以使用JUnit测试测试所有业务和集成层代码!那很优雅!
答案 2 :(得分:1)
远程服务器上的业务逻辑服务不需要通过servlet公开。公开的服务可以是您的客户端代码知道如何使用的任何内容。 Spring提供了使某些类型的通信比其他类型更容易的设施:RESTful HTTP,SOAP和RMI比JINI或独特的有线协议更容易。
答案 3 :(得分:1)
正如之前的评论中所说,你总是可以通过RMI,Hessian / Burlap,JAX-WS / JAX-RPC甚至是JMS公开你的逻辑。
对于RMI或JMS,您甚至不必更改业务接口以将其公开为远程服务。这只是配置问题。
例如,假设您有业务接口:
public interface HelloWorld {
public String getMessage();
}
及其实施:
public class SimpleHelloWorld implements HelloWorld {
public String getMessage() {
return "Hello World";
}
}
要在9000端口的localhost上通过RMI公开此服务,您需要将以下代码片段添加到Spring配置中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="helloWorldService"
class="com.apress.prospring2.ch15.remoting.SimpleHelloWorld"/>
<bean id="serviceExporter"
class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="HelloWorld" />
<property name="service" ref="helloWorldService" />
<property name="serviceInterface"
value="com.apress.prospring2.ch15.remoting.HelloWorld" />
<property name="registryPort" value="9000" />
</bean>
您的客户端配置应具有以下配置(appCtx.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="helloWorldService"
class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:9000/HelloWorld" />
<property name="serviceInterface"
value="com.apress.prospring2.ch15.remoting.HelloWorld"/>
</bean>
<bean id="helloWorldClient"
class="com.apress.prospring2.ch15.remoting.rmi.HelloWorldClient">
<property name="helloWorldService" ref="helloWorldService" />
</bean>
</beans>
这是一个简单的客户端:
public class HelloWorldClient {
private HelloWorld helloWorldService;
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("appCtx.xml");
HelloWorldClient helloWorldClient =
(HelloWorldClient) ctx.getBean("helloWorldClient");
helloWorldClient.run();
}
public void run() {
System.out.println(helloWorldService.getMessage());
}
public void setHelloWorldService(HelloWorld helloWorldService) {
this.helloWorldService = helloWorldService;
}
}
就是这样。春天将照顾其他一切。