我只是尝试发送一个新的.jsp页面,由客户端使用URIBuilder进行呈现。所以我有一个main.js发送一个POST给服务器调用logIn()。现在我只想让它将一个新的.jsp文件发送到要呈现的客户端。到目前为止没有任何事情发生,我尝试过使用不同的文件路径 - 在我刚刚使用" Feed.jsp"作为文件路径。
我觉得还有更多内容,我没有接受。
这是我的main.js文件。它通过logIn()方法成功向服务器发送POST。我的index.jsp文件成功使用了这个main.js。
var rootURL = "http://localhost:8080/messenger/webapi";
$(function() {
$('#btnRegister').click(function() {
var username = $('#username').val();
registerProfile();
});
$('#btnSignIn').click(function() {
logIn();
});
function logIn() {
var profileJSON = formToJSON();
$.ajax({
type: 'POST',
contentType: 'application/json',
url: rootURL + "/profiles/logIn",
dataType: "json",
data: profileJSON,
success: (function(data){
alert("Success!");
})
});
}
function registerProfile() {
var profileJSON = formToJSON();
$.ajax({
type : 'POST',
contentType: 'application/json',
url: rootURL + "/profiles",
dataType: "json",
data: profileJSON,
success: (function() {
alert("Resgistered");
})
});
}
function formToJSON() {
return JSON.stringify({
"profileName": $('#username').val(),
"password" : $('#password').val(),
});
}
});
这是我的ProfileResource.java中调用的LogIn()方法。它成功地可以调用帖子,但出于某种原因,当我包含UriBuilder时,它什么都不做。
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@POST
@Path("/logIn")
public Response logIn( @Context ServletContext context) {
UriBuilder uriBuilder = UriBuilder.fromUri(URI.create(context.getContextPath()));
uriBuilder.path("Deployed Resources/webapp/Feed.jsp");
URI uri = uriBuilder.build();
return Response.seeOther(uri).build();
}
}
所以基本上我的index.jsp会呈现给客户端。我的" btnResgister"按钮完成它所需要的,我的" btnSignIn"虽然我知道它可以访问" profiles / login"但它并没有做任何事情。资源很好。
更新
我使用用户peeskillets UriUtils
类:
@POST
@Path("/logIn")
public Response logIn( @Context ServletContext context, @Context UriInfo uriInfo) {
URI contextPath = UriUtils.getFullServletContextPath(context, uriInfo);
UriBuilder uriBuilder = UriBuilder.fromUri(contextPath);
uriBuilder.path("Feed.jsp");
return Response.seeOther(uriBuilder.build()).build();
}
但POST
仍未完成。我想知道这是否与ServletContext或UriInfo参数有关......这些参数是我POST
时自动发送还是我必须使用.js
从客户端发送更多信息?
这里也是我的文件结构:
答案 0 :(得分:1)
this answer道歉。似乎ServletContext.getContextPath()
只返回相对路径而不是完整的uri。在这种情况下,当Jersey找到相对URI时,它将从应用程序的基URI构造一个完整的URI。因此,您将始终获得包含Jersey根路径的路径(它永远不会导致jsp页面。)
我不知道如何从Jersey获取完整的上下文路径(完整URI),除了做一些字符串操作。你可以使用
public class UriUtils {
public static URI getFullServletContextPath(ServletContext context,
UriInfo uriInfo) {
URI requestUri = uriInfo.getRequestUri();
String contextPath = context.getContextPath();
if (contextPath.trim().length() == 0) {
String fullContextPath = requestUri.getScheme()
+ "://" + requestUri.getRawAuthority();
return URI.create(fullContextPath);
} else {
int contextPathSize = contextPath.length();
String requestString = requestUri.toASCIIString();
String fullContextPath = requestString.substring(
0, requestString.indexOf(contextPath) + contextPathSize);
return URI.create(fullContextPath);
}
}
}
然后使用path
与jsp页面的路径UriBuilder
相对于servlet上下文路径。例如,如果您的jsp页面位于上下文路径的根目录(即webapp文件夹的根目录,或者在大多数情况下位于index.jsp的相同位置),则可以执行
@POST
public Response post(@Context ServletContext servletContext,
@Context UriInfo uriInfo) {
URI contextPath = UriUtils.getFullServletContextPath(servletContext, uriInfo);
UriBuilder uriBuilder = UriBuilder.fromUri(contextPath);
uriBuilder.path("feed.jsp");
return Response.seeOther(uriBuilder.build()).build();
}
我将对第一个链接帖子进行更正: - )