将Spring应用程序从Glassfish移动到Tomcat

时间:2012-03-23 13:56:45

标签: ajax spring jsp tomcat glassfish

我一直在使用Netbeans和Glassfish服务器处理Spring 3.0 Web应用程序。我现在要将应用程序部署为公共使用,但是在尝试从Glassfish迁移到Tomcat时,我遇到了错误。我的应用程序使用AJAX从应用程序中的URL获取信息,但是当我请求URL时,我得到以下内容:

  

此请求标识的资源只能根据请求“accept”标题()生成具有不可接受特征的响应。

我的控制器要求它提供的信息如下:

@RequestMapping(value = "/electricity/usage/")
public @ResponseBody List<UsageData> getEUsage(HttpSession session) {

    UsageDataDAO UsageDAO = new UsageDataDAO();

    User u = (User) session.getAttribute("user");

    List<UsageData> l = UsageDAO.getAllUsageData(u.getAccountNum(), 'e');

     return l;
}

为什么迁移到Tomcat时会发生这种情况?

1 个答案:

答案 0 :(得分:0)

发生此错误是因为您的浏览器在“Accept”标题中发送到服务器的内容与服务器可以从URL /电/用途/

返回的内容不匹配

如果您使用的是像jQuery这样的库(并且不执行跨域请求,这很重要),那么您的浏览器将发送此接受标头:

接受:application / json

您收到该错误意味着服务器不认为URL / electicity / usage可以返回JSON响应。这是在 webmvc-config.xml 文件中配置的。这就是我在JSON请求中的相关内容:

<!-- allows rendering responses in XML and JSON formats -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml"/>
            <entry key="json" value="application/json"/>
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                <property name="marshaller">
                    <bean class="org.springframework.oxm.xstream.XStreamMarshaller" p:autodetectAnnotations="true"/>
                </property>
            </bean>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
        </list>
    </property>
</bean>

请参阅本教程以在Spring MVC中实现JSON响应:http://rwehner.wordpress.com/2010/06/09/2-ways-to-create-json-response-for-ajax-request-in-spring3/

为什么这段代码适用于Glassfish,而不是Tomcat - 这是一个很好的问题......

如果您正在执行跨域请求,则本主题适用:JQuery's getJSON() not setting Accept header correctly?

相关问题