2012-05-14 52 views
3

對不起,我是新來的春天,並有一個關於httpinvokerserviceexporter的問題。春季httpinvokerserviceexporter必須客戶端在相同的框架?

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="index.htm">indexController</prop> 
       <prop key="hello.htm">test_service</prop> 
      </props> 
     </property> 
    </bean> 


    <bean name="test_service" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> 
     <property name="serviceInterface" value="hellohttp.HelloServiceInterface" /> 
     <property name="service"> 
      <ref bean="helloService"></ref> 
     </property> 
    </bean> 

而只是爲了測試,如果我的作品:我跑的URL http://localhost:8080/hello_spring/hello.htm並得到了GlassFish服務器以下stacktrack:我按照教程有一個基本的設置

WARNING: StandardWrapperValve[hello_spring]: PWC1406: Servlet.service() for servlet hello_spring threw exception 
java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2298) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2767) 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:798) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) 
    at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:64) 
    at org.springframework.remoting.rmi.CodebaseAwareObjectInputStream.<init>(CodebaseAwareObjectInputStream.java:97) 
    at org.springframework.remoting.rmi.RemoteInvocationSerializingExporter.createObjectInputStream(RemoteInvocationSerializingExporter.java:122) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.readRemoteInvocation(HttpInvokerServiceExporter.java:114) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.readRemoteInvocation(HttpInvokerServiceExporter.java:95) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:72) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 

那麼,是這個錯誤是由我使用瀏覽器而不是啓用spring和java應用程序引起的?

回答

3

HttpInvokerServiceExporter使用標準的Java二進制序列化來通過網絡從Java對象移動數據。該數據只能由另一端的Java客戶端使用(在這種情況下,由Spring Java客戶端使用)。它旨在成爲客戶端 - 服務器設置的服務器端。

你不能只是指向瀏覽器,瀏覽器就會認爲它是亂碼。

+0

對不起,我不明白,但如果它的客戶端不理解數據的應用程序,爲什麼服務器產生錯誤500? – goh

+0

@goh:因爲'HttpInvokerServiceExporter'不能接受瀏覽器發送的那種HTTP請求。它只能處理由Spring Remoting的客戶端發佈的特殊請求。 – skaffman

+0

啊......謝謝@skaffman的及時回覆。會去測試它! – goh