Spring 和 Portlet 环境中的 Web 服务

Posted

技术标签:

【中文标题】Spring 和 Portlet 环境中的 Web 服务【英文标题】:Web Service in Spring and Portlet environment 【发布时间】:2012-01-13 22:13:20 【问题描述】:

我是 Web 服务的初学者并正在使用

    Spring 3.0 和 spring-webmvc-portlet 3.0 javax.portlet 2.0

我有如下控制器

@Controller(value = "myController")

@RequestMapping(value = "**VIEW**")

public class MyController 

 // Controller logic


现在,我想在 portlet 环境中使用 RESTful API 创建 Web 服务。 请指导我如何编写将返回 JSON 或 XML 数据的 Web 服务。


我仍在为 Web 服务没有调用 WS 而苦苦挣扎。

我正在粘贴我的 conf 文件

    web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/itemCatalog-portlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>view-servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>view-servlet</servlet-name>
    <url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>webServiceTest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>webServiceTest</servlet-name>
    <url-pattern>/myWebService/*</url-pattern>
</servlet-mapping>

    item-portlet.xml

    <aop:aspectj-autoproxy />
    
    <context:component-scan base-package="com.main.mypackage" />
    
    
    <bean
        class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean
                class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
                <property name="propertyEditorRegistrars">
                    <list>
                        <ref bean="myPropertyEditorRegistrar" />
                    </list>
                </property>
    
            </bean>
        </property>
    </bean>
    
    <bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>content.Language-ext</value>
            </list>
        </property>
    </bean>
    
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
    
    <bean name="jsonView"
        class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
        <property name="prefixJson" value="false" />
    </bean>
    
    
    <tx:annotation-driven transaction-manager="txManager" />
    

    webServiceTest-servlet.xml

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
    
      portlet.xml

    项目目录 org.springframework.web.portlet.DispatcherPortlet 文本/html 看法 content.Language-ext

    控制器

    @控制器 公共类 WebServiceTest

    @RequestMapping(value = "/myWebService/testing", method = RequestMethod.GET) 公共字符串测试方法() 返回“你好世界!成功”;

我正在尝试命中

localhost:8080:/myappname/myWebService/testing

没有结果。

【问题讨论】:

我可以使用 DispatcherServlet 配置吗?配置 Web 服务 【参考方案1】:

在portlet 环境中创建Web 服务。 1.我们需要使用org. springframework.web.servlet.DispatcherServlet 是所有可用控制器的前端控制器。所有的 HTTP 请求都将使用 Dispatcher servlet 进行分派。

在 web.xml 中添加一个条目

<servlet>
        <servlet-name>springwebservice</servlet-name>
        <servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springwebservice</servlet-name>
        <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

请仔细阅读以下调度程序servlet链接

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

    现在重要的是每个 DispatcherServlet 必须有自己的 WebApplicationContext。 WebApplicationContext 只不过是一个 xml 文件,由控制器、视图解析器、bean 等组成。

在 WEB-INF 中创建名为 springwebservice-servlet.xml 的文件。 springwebservice-servlet.xml 是一个 WebApplicationContext。

注意

在 DispatcherServlet 初始化时,Spring MVC 在您的 Web 应用程序的 WEB-INF 目录中查找一个名为 [servlet-name]-servlet.xml 的文件,并创建在那里定义的 bean,覆盖使用定义的任何 bean 的定义在全局范围内同名。

确保为 DispatcherServlet 创建新的 WebAppicationContext 并根据需要进行配置。

如果在某个地方弄错了,请指导我。

【讨论】:

以上是关于Spring 和 Portlet 环境中的 Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

带有 freemarker 和 spring 的 Liferay portlet

Liferay - 使用 portlet 在 Web Content 下创建文件夹和子文件夹

为 Liferay 开发 portlet 的限制/缺点 [关闭]

Liferay 6 - 将 Web 内容显示 Portlet 居中

为 Spring Portlet 获取异常“无法启动服务 jboss.module.service”

dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序