10

ユーザーにいくつかのフォームフィールドに入力するように求めるページを作成しました。ユーザーが送信すると、フォームは以下に示すRestfulメソッドに送信されます。

@POST
@Path("addUser")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addUser(@FormParam("username") String username,
        @FormParam("password") String password,
        @FormParam("id") String id,
        @FormParam("group_name") String groupName,
        @FormParam("authority_name") String authorityName,
        @FormParam("authority_id") String authorityId
        )
{
    //Something will be done here
}


この関数の最後にあるユーザーを(たとえば)index.jspにリダイレクトするにはどうすればよいですか?

4

5 に答える 5

14

このようにコードを変更すると、addUser()は応答オブジェクトを返す必要があります

public Response addUser(@FormParam("username") String username,
        @FormParam("password") String password,
        @FormParam("id") String id,
        @FormParam("group_name") String groupName,
        @FormParam("authority_name") String authorityName,
        @FormParam("authority_id") String authorityId
        )
{
    //Something will be done here

    java.net.URI location = new java.net.URI("../index.jsp?msg=A_User_Added");
    return Response.temporaryRedirect(location).build()

}
于 2014-05-07T10:25:40.013 に答える
12

javax.ws.rs.core.UriBuilder保存するパラメータやその他のデータをマップするURIを使用して作成します。次に、を使用Response.temporaryRedirectしてリダイレクトをクライアントに返し、作成したURIを渡します。

于 2012-06-20T09:40:56.337 に答える
4

最後に、私がしたこと以外に方法はないというこの結論に達しました。
それで、これが私の解決策です。

try {
        java.net.URI location = new java.net.URI("../index.jsp?msg=A_User_Added");
        throw new WebApplicationException(Response.temporaryRedirect(location).build());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }


このブロックをコードに追加することで、必要なものを手に入れました。それがあなたにも役立つことを願っています。

于 2012-06-28T05:56:03.390 に答える
2

以下のWebサービスでのリダイレクトの使用法を参照してください。

public class LoginWebService {

    @POST
    @Path("/check")
    public Response checkDetails(@FormParam("name") String name,@FormParam("pass") String pass ) throws URISyntaxException  {

        URI uri = new URI("/login/success");
        URI uri2= new URI("http://localhost:9090/NewWebServiceproject/new/login/failure");

        if(name.equals("admin") && pass.equals("pass"))
    //@Path("http://localhost:8010/NewWebServiceproject/new/login/success");
            {
            return Response.temporaryRedirect(uri).build();
            //Response.seeOther(uri);
            //return Response.status(200).entity("user successfully login").build();
            }
        else
        {
            return Response.temporaryRedirect(uri2).build();
            //Response.seeOther(uri2);
            //return Response.status(200).entity("user logon failed").build();
            }
    }
    @POST
    @Path("/success")
    public Response successpage()
    {
    return Response.status(200).entity("user successfully login").build();
    }
    @POST
    @Path("/failure")
    public Response failurepage()
    {
    return Response.status(200).entity("user logon failed").build();
    }
}
于 2015-11-18T10:00:14.417 に答える
1

リクエストをリダイレクトするために「WebApplicationException」を使用することはお勧めできません。ジャージー(2.4.1)では、通常のサーブレットの方法(request.getServletContext()。getRequestDispatcher()。forward()または単にresponse.sendRedirect())を介して要求をリダイレクトできるはずです。

以下は、Jerseyがリクエストを処理する方法です

org.glassfish.jersey.servlet.ServletContainer.service(HttpServletRequest request, HttpServletResponse response)
      requestScope.runInScope
           final ContainerResponse response = endpoint.apply(data)
                  methodHandler.invoke(resource, method, args);
           Responder.process(ContainerResponse);

そのmethodHandlerはRESTサービスクラスであり、methodはそのサービスクラスの関数です。

ページをリダイレクトする手順は簡単になります

  1. クラスフィールドまたは関数パラメーターでジャージーインジェクション(@Context HttpServletRequestリクエスト、@ Context HttpServletResponseレスポンス)を介して(リクエスト、レスポンス)を取得します

  2. request.getServletContext()。getRequestDispatcher()を呼び出して、「転送」用のディスパッチャーを取得するか、Response.sendRedirect(url)を使用します

アプリケーションが返されると(nullのみ)、Jerseyは結果を「Responder.process(ContainerResponse)」で処理しようとします。このステップでは、応答を使用してステータスを設定します(204 nullリターンの内容はありません)。

したがって、ここで重要な点は、サービス関数から戻る前に応答オブジェクトをファイナライズ/クローズする必要があるということです。そうしないと、Jerseyが出力を上書きする可能性があります。

「WebApplicationException」がJerseyの応答を上書きする理由に関する小さなヒント。これは、org.glassfish.jersey.server.ServerRuntime.mapException()が応答結果として「webApplicationException.getResponse()」を使用するためです。

于 2013-11-29T11:21:02.313 に答える