如何让球衣和@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?
使用星号(*
)将无法使用@ApplicationPath
如果你使用/ *,那么你就太贪婪了,并说它应该始终匹配所有的东西,并且永远不会调用默认的servlet
请改用@ApplicationPath("/")
如果你使用/,那么你将替换容器的默认servlet