3

私はここで奇妙な問題を抱えています。私は本当に立ち往生しています。これをうまく機能させる必要があります。

そのため、「a href=servlet?id=10」というリンクを含む index.jsp というページがあります。このリンクをクリックすると、サーブレットの doGet() に移動します。これがサーブレットのコードです。

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
                 String action = request.getParameter("id");
                  // search database and create an arraylist
                        if(//user logged in)
                        address = "s/results.jsp";
                        else   
                        address = "results.jsp";
                   // set arraylist in session object
                RequestDispatcher dispatcher = request.getRequestDispatcher(address);
                dispatcher.forward(request,response);
     }

したがって、上記のコードは正常に機能しますが、リクエストの転送後、ブラウザは次のように URL を表示します

http://localhost/project/servlet?id=10 .

ユーザーのログインステータスに基づいて2つの異なるjspに転送しているため、上記のURLは必要ありません.1つは「s」フォルダーにあり、もう1つはその外にあります。ユーザーがログインしている場合は「s/results.jsp」に転送し、ユーザーがログインしていない場合は「results.jsp」に転送しています。

s/results.jsp の場合、results.jsp で ../ を使用して、「s」フォルダーの外部から画像やスクリプトなどのリソースにアクセスしています。

URL が s/results.jsp に変更されていないため、「../」でリソースにアクセスできず、jsp ページネーションを使用しているため、次にクリックすると URL が s/results.jsp に変更され、その中で../ を使用してリソースにアクセスできる場合

私の考えている解決策の 1 つは、すべてのリソースを s フォルダーにコピーすることですが、これにより冗長性が増します。

私の心の他の1つの解決策は、2つのjsp用に2つの異なるサーブレットを作成することですが、../でsフォルダーの外部のリソースにアクセスできるようにサーブレットを配置する場所がわかりません

私がタスクを実行できる他の良い方法はありますか..

私はこれに関する情報を見つけようとしましたが、それを理解することができませんでした.

どんな助けでも大歓迎です。

4

2 に答える 2

8

基本的に、Web ブラウザーに要求を正確にその URL に送信するように指示しました。転送によって URL が変更されることはありません。完全にサーバー側です。代わりに使用response.sendRedirect()すると、現在のリクエストがすべての属性を含めて破棄され、指定された URL でまったく新しいリクエストが作成<a href="results?id=10">されます<a href="s/results?id=10">

<a href="${user.loggedin ? 's/' : ''}results?id=10">

最後に、それに応じてサーブレット マッピングを変更し、それらの URL で呼び出されるようにします。

<url-pattern>/results</url-pattern>
<url-pattern>/s/results</url-pattern>

JSP 拡張機能が見落とされるだけです。ただし、ディスパッチャによって使用される JSP は/WEB-INFいずれにせよフォルダに属しているため、最初にサーブレットを呼び出さないとエンドユーザーが直接表示することはできません。また、より適切な URL が得られます。

于 2011-06-09T21:22:04.307 に答える
1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("id");
// search database and create an arraylist
    if(//user logged in)
        address = "s/results.jsp";
    else   
        address = "results.jsp";
    // set arraylist in session object
    RequestDispatcher dispatcher = request.getRequestDispatcher(address);
    dispatcher.forward(request,response);
 }

上記のコードで、リクエスト ディスパッチャーを使用する代わりに、

RequestDispatcher dispatcher = request.getRequestDispatcher(address);
            dispatcher.forward(request,response);

私たちは試すことができます

response.sendRedirect(request.getContextPath()+"/address");
于 2016-10-25T10:09:55.653 に答える