如何让球衣和@webservlet一起工作

问题描述 投票:0回答:2

directory structure

如何让球衣和@webservlet一起工作?

泽西资源配置:

@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();
    }
}

web servlet

@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没有显示任何ui ..我认为应该来? 为什么http://localhost:8088/ResponseFilterweb/hello没有显示任何ui?

java jsp networking jersey servlet-filters
2个回答
1
投票

如果您使用web.xml,thisthis将是您的解决方案,但由于您不是,this可能是您唯一的选择。问题是当你使用/*作为Jersey的servlet映射时,它会占用所有请求。所以对/hello的要求将归泽西而不是LoginServlet。我链接的那些解决方案是什么导致Jersey如果在Jersey应用程序中找不到它,则转发请求。另一个解决方案是将servlet映射更改为类似/api/*(这很常见),然后您只需在/api前面添加API请求。


1
投票

使用星号(*)将无法使用@ApplicationPath

如果你使用/ *,那么你就太贪婪了,并说它应该始终匹配所有的东西,并且永远不会调用默认的servlet

请改用@ApplicationPath("/")

如果你使用/,那么你将替换容器的默认servlet

© www.soinside.com 2019 - 2024. All rights reserved.