Не удается подключить службу JAX-RS к шаблону MVC - PullRequest
6 голосов
/ 24 января 2012

Я пытаюсь использовать шаблон JAX-RS '(Джерси) MVC.Попытки достичь http://localhost:8080/myproject/foos/test приводят к ошибке, которая гласит:

java.io.IOException: The template name, /view, could not be resolved to a fully qualified template name

http://localhost:8080/myproject/foos приводит к той же ошибке.

Чего мне не хватает?

Ресурс:

package resources;

import com.sun.jersey.api.view.Viewable;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("foos")
public class FooResource {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable get() {

        return new Viewable("/index", this);

    }   

    @GET
    @Path("{id}")
    @Produces(MediaType.TEXT_HTML)
    public Viewable get(@PathParam("id") String id) {

        return new Viewable("/view", id);

    } 

}

Просмотров:

WEB-INF / jsp / resources / FooResource

  • index.jsp
  • view.jsp

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <filter>
        <filter-name>jersey</filter-name>
        <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
            <param-value>/(resources|images|js|styles|(WEB-INF/jsp))/.*</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>jersey</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <description>Set the default, base template path to the WEB-INF folder.</description>
            <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
            <param-value>/WEB-INF/jsp</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

</web-app>

Ответы [ 4 ]

5 голосов
/ 25 января 2012

Внесены следующие изменения:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <welcome-file-list>
        <welcome-file>welcome.jsp</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>jersey</filter-name>
        <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>controllers</param-value>
        </init-param>        
        <init-param>
            <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
            <param-value>/((WEB-INF/views))/.*</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
            <param-value>/WEB-INF/views/</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.Redirect</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
            <param-value>true</param-value>
        </init-param>        
    </filter>
    <filter-mapping>
        <filter-name>jersey</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

Ресурс:

@Path("foos")
public class FooResource {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable index() {

        return new Viewable("/foos/index", this);

    }   

    @GET
    @Path("{id}")
    @Produces(MediaType.TEXT_HTML)
    public Viewable view(@PathParam("id") String id) {

        return new Viewable("/foos/view", id);

    } 

}

Просмотров: 1009 * *

  • \ welcome.jsp
  • \ WEB-INF \ вид \ Foos \
    • index.jsp
    • View.jsp
1 голос
/ 23 января 2014

У меня была та же самая ошибка, работающая под Jetty 9. Приложение работало нормально, используя mvn clean jetty: запустил , но у него была эта ошибка, когда он был упакован как война и развернут под Jetty.Это исправление в web.xml, которое работало для меня:

         <init-param>
             <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
-            <param-value>/WEB-INF/views/</param-value>
+            <param-value>/WEB-INF/views</param-value>
         </init-param>

Да, вот и все.Так что, надеюсь, это поможет тому, кто сталкивается с этим.Мой конфиг в основном такой же, как у Крейга, но с дополнительной косой чертой.

0 голосов
/ 24 января 2012

Имя должно быть полностью квалифицированным, например /index.jsp или /index.html.

0 голосов
/ 24 января 2012

Из первоначальной проверки я думаю, что вы хотите поместить index.jsp и view.jsp непосредственно в WEB-INF / jsp.

...