gpt4 book ai didi

java - 如何让 jersey 和 @webservlet 一起工作

转载 作者:行者123 更新时间:2023-12-02 01:46:21 27 4
gpt4 key购买 nike

directory structure

如何让 jersey 和 @webservlet 一起工作?

Jersey 资源配置:

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

在resourceConfig中注册的 Jersey 资源:

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

网络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没有显示任何用户界面..我认为它应该出现?
为什么http://localhost:8088/ResponseFilterweb/hello没有显示任何用户界面?

最佳答案

如果您使用的是 web.xml,thisthis将是您的解决方案,但由于您不是, this可能是你唯一的选择。问题是,当您使用 /* 作为 Jersey 的 servlet 映射时,它会占用所有请求。因此,对 /hello 的请求将发送至 Jersey,而不是 LoginServlet。我链接到的这些解决方案的作用是,如果 Jersey 在 Jersey 应用程序中找不到该请求,则它会转发该请求。另一种解决方案是将 servlet 映射更改为 /api/*(这很常见),然后您只需在 API 请求前加上 /api 前缀即可。

关于java - 如何让 jersey 和 @webservlet 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com