小编典典

如何使用Jersey for Java在浏览器中呈现新的.jsp文件?

java

我的站点转到登录页面,我想在用户登录时重定向到另一个页面。我有一个“ POST”方法,该方法将“用户名”和“密码”发送到服务器,服务器检查用户名和密码存在。

这是我的方法

@POST
@Path("logIn")
public void signIn(@PathParam("profileName") String profileName, @PathParam("password") String password) {
    if (profileService.getProfile(profileName) != null && (profileService.getPassword(profileName)).equals(password)){
        //Render a new page ex "feed.jsp"
    }
    else {
          //send unsucessful message back to client??

}

客户端能够正确发布用户名和密码,并检查其是否存在…我只是不知道如何使它呈现(重定向到???)一个新页面


阅读 247

收藏
2020-11-26

共1个答案

小编典典

你可以

重定向,(使用Response.seeOther(URI),将任何需要的值作为查询参数传递。例如

@POST
@Path("logIn")
public Response login(@Context ServletContext context) {
    UriBuilder uriBuilder = UriBuilder.fromUri(URI.create(context.getContextPath()));
    uriBuilder.path(.. <path-to-your-jsp> ..);
    uriBuilder.queryParam("key1", "value1");
    uriBuilder.queryParam("key1", "value2");
    URI uri = uriBuilder.build();

    return Response.seeOther(uri).build();
}

或者你可以..

使用Jersey的JSP
MVC功能
,并在此处清楚地演示。例如

@POST
@Path("logIn")
public Viewable login() {
    Map<String, String> model = new HashMap<>();
    model.put("key1", "value1");
    model.put("key2", "value2");

    return new Viewable("/feed", model);
}

feed.jsp

<html>
    <body>
        <p>${it.key1}</p>
        <p>${it.key2}</p>
    </body>
</html>

另外: 您是否 真的 要在URI路径中传递密码?会带来巨大的安全风险。最好在请求正文中传递它。


更新

现在,我考虑了一下,您应该始终按照POST / REDIRECT /
GET
模式从登录POST
重定向。如果要在整个方法中使用JSP
MVC,则可以让控制器返回Viewable登录页面的GET(在GET上),并在成功返回POST的情况下,重定向到Feed控制器,否则重定向回同一登录页面(得到)。有几种不同的解决方案。

例如

@Path("/login")
public class LoginController {

    @GET
    public Viewable loginPage() {
        ...
        return new Viewable("/login", model);  // to login.jsp
    }

    @POST
    public Response loginPost(Form form, @Context UriInfo uriInfo) {
        ...
        UriBuilder builder = uriInfo.getBaseUriBuilder();
        if (success) {
            builder.path("/feed");  // to FeedController GET
        } else {
            builder.path("/login"); // to LoginController GET
        }

        return Response.seeOther(builder.build()).build();
    }
}

@Path("/feed")
public class FeedController {

    @GET
    public Viewable getFeed() {
        ...
        return new Viewable("/feed", model);  // to feed.jsp
    }   
}
2020-11-26