ここは新しいですが、このページを何度も読んでいます。私は複雑な問題を抱えています。私は英語が母国語ではないので、私が理解できないと、最初の場所で私を容赦します。
古いOracle Portal 10gサーバーにポートレットを作成します。ポートレットでは、javascript関数がajaxを使用してサーブレットにデータをポストします。 サーブレットを呼び出すときにユーザーを識別したい。ポートレットセッションから何かを渡すことはできますか?ポートレットのように、PortletRenderRequestがあります。ユーザー名とそのユーザーの権限を取得できます。
私の理論ポートレットの機能は短いです:フォームは、誰かがそれを記入し、サーブレットにjavascript ajaxでデータを送信すると、その送信者がデータをデータベースに挿入する権利を持っているかどうかを確認したい/彼の名前)。今では、ポートレットはユーザーデータを取得し、入力された隠し要素の値に書き出し、JavaScriptはそれを読み取り、ポストと共に送信しますが、それは簡単にハック可能で、ひどい解決策です。
サーブレットリクエストでユーザーデータを取得する方法はありますか?
は今、理論的には、次のようになります。
portlet.jsp:
<%
PortletRenderRequest pReq = (PortletRenderRequest)request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String userNev = pReq.getUser().getName();
session.setAttribute("username",userNev);
System.out.println("session ID in JSP: "+session.getId());
%>
<button class="btn" type="button">Upload data</button>
<script type="text/javascript">
$(function() {
$(".btn").click(function(){
/*.....*/
$.post("/demo/servlet", poststring);
});
});
</script>
サーブレット:
public class servlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession());
System.out.println("Session ID in servlet: "+session.getId());
/*....*/
}
}
すべてのページリフレッシュでは、コンソールの「JSPでのセッションID」は異なりますが、「サーブレットのセッションID」は変更されないため、正しいものでなければなりません。
これで、タスクは正しいHttpSessionにデータを入れることです.JSPページで何とかアクセスする必要があります。 HttpSession Session = request.getSession(); jspページのは間違ったセッションを返します(リフレッシュごとに変更されます)。
編集:
すべての質問には@Jonathanが回答しています。それはJSPページ上でHttpSessionを取得するような追加の質問につながりますか?
私は、そのセッション= HttpSession = jspページでProviderSessionを見つけましたが、サーブレットのHttpSessionと等しくはありません。
(プロバイダ登録ページのログイン頻度を「常に」に設定した場合、jspページのProviderSessionはページ更新時に変更されませんでした)
ProviderSessionとHttpSessionの違いはわかりません。 1つから別のものへ私がサーブレットからProviderSessionに到達できるのであれば、それは使用時点から同じでしょうか?
うわー、おかげで、感謝@ジョナサン! セッションにデータを入れようとしました: HttpSession Session = request.getSession(); Session.setAttribute( "loggedInUser"、userNev); System.err.println( "ellenőrzés:" + Session.getAttribute( "loggedInUser")); //大丈夫です! サーブレットでは、その属性にnullが見つかりました。 trueを に設定し、プロバイダー登録ページのログイン頻度を「ユーザーセッションごとに1回」に設定します。 –
KoRi
私はセッションID(session.getId())がjspページとサーブレットで異なることを知っているので、異なるセッションもあります。しかし、なぜ私は知らないのですか? – KoRi
@KoRiあなたの投稿を編集して問題のあるコードを追加してください。私があなたに手伝ってもらえるかどうかが分かります。私はあなたの質問を正確に理解していません。 –