Как заставить Джерси и @webservlet работать вместе - PullRequest
0 голосов
/ 06 декабря 2018

directory structure

Как заставить джерси и @webservlet работать вместе?

Джерси ResourceConfig:

@ApplicationPath("/*")
public class ApplicationConfig extends ResourceConfig {
    public ApplicationConfig() {
        register(Greetings.class);
    }
}

Джерси Ресурс зарегистрирован вresourceConfig:

@Path("/login")
public class Greetings {
    @GET
    public Response getHelloGreeting(@Context HttpServletRequest httpRequest) {
        System.out.println("In the Greetings resource");
        String url= "http://"+httpRequest.getServerName()+":"+httpRequest.getServerPort()+httpRequest.getContextPath();
        String newURL = url+"/login.jsp";
        System.out.println(newURL);
        return Response.seeOther(URI.create(newURL)).build();
    }
}

веб-сервлет

@WebServlet(name = "LoginServlet", urlPatterns = { "/hello" })
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            ServletContext servletContext = getServletContext();
            System.out.println("inside login servlet");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
            System.out.println("request forwarded");
        }
    //other functions not important so deleted
}

Случай 1: при доступе к этим http://localhost:8088/ResponseFilterweb/login

журналам консоли:

In the Greetings resource  
http://localhost:8088/ResponseFilterweb/login.jsp             (no ui comes)

при доступе к этому http://localhost:8088/ResponseFilterweb/hello

(nothing happens 404 error)

Случай 2: Изменение пути ресурса конфигурации приложения:

@ApplicationPath("/auth")
public class ApplicationConfig extends ResourceConfig {
    public ApplicationConfig() {
        register(Greetings.class);
    }
}

при доступе к этому
http://localhost:8088/ResponseFilterweb/auth/login

In the Greetings resource  
http://localhost:8088/ResponseFilterweb/login.jsp             (Ui comes)

при доступе к этому
http://localhost:8088/ResponseFilterweb/hello

inside login servlet                                          (Ui comes)
userid is
Encoded string 
request forwarded

сомнений:
не знаю, почему login.jsp блокируется в первом случае:

почему http://localhost:8088/ResponseFilterweb/login не показывает никакого интерфейса .. я думаю, что это должно прийти?
почему http://localhost:8088/ResponseFilterweb/hello не отображается пользовательский интерфейс?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Если вы использовали web.xml, это или это было бы вашим решением, но, поскольку вы не используете, это может быть вашим единственным вариантом,Проблема состоит в том, что когда вы используете /* в качестве сервлет-сопоставления для Джерси, он включает все запросы.Таким образом, запрос на /hello пойдет на Джерси, а не на LoginServlet.Эти решения, с которыми я связался, заставляют Джерси пересылать запрос, если он не может найти его в приложении Джерси.Другое решение состоит в том, чтобы просто изменить отображение сервлета на что-то вроде /api/* (что довольно распространено), тогда вы просто добавили бы префикс API-запросов к /api.

0 голосов
/ 06 декабря 2018

Использование звездочки (*) не будет работать при использовании @ ApplicationPath

Если вы используете / *, то вы делаете его слишком жадным и говорите, чтосопоставлять все все время, и сервлет по умолчанию никогда не будет вызываться

Использовать @ApplicationPath("/") вместо

Если вы используете /, то вы заменяете контейнер по умолчаниюсервлет

...