كيف يمكنني الحصول على اسم المضيف (مع المنفذ) الذي يوجد فيه servlet

StackOverflow https://stackoverflow.com/questions/2591135

  •  25-09-2019
  •  | 
  •  

سؤال

اعتقدت أن ServletContext قد يوفر طريقة. هل توفر طريقة getAttribute () من ServletContext أي مساعدة ، أي أن هناك اسم سمة (ربما "مضيف" ، "منفذ") سيكون مفيدًا.

السبب في ذلك هو أنني أريد تشغيل طلبي أينما تم نشره ، وفي وقت ما يجب أن أسمح للمستخدم بالنقر فوق رابط يشير إلى موقع على خادم الملفات. وبالتالي أحتاج إلى الإشارة إلى المضيف والمنفذ ولا يمكنني استخدام مرجع داخلي.

هل كانت مفيدة؟

المحلول

ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)

نصائح أخرى

كائن ServletRequest الذي تم تمريره إلى طريقة DOGET ، أو طريقة DOPOST getServerName و getServerPort الطرق التي توفر هذه المعلومات.

على سبيل المثال

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}

everyone لديه إجابة جيدة. لكن أخذ المخطط واسم الخادم ومنفذه ثم mergin. هناك طريقة أبسط:

يمكنك استخدام httpservletrequest.getRequesturl و httpservletrequest.getRequesturi.

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result

لقد وجدت في مشروعي القديم السلسلة:

request.getHeader("host").contains("xxx")

ربما هو الحل؟

كما ذكر آخرون أعلاه ، يمكن استرداد المضيف والمنفذ من خلال الطلب. من ناحية أخرى ، من المستحيل على ServletContext تقديم المعلومات لأن تطبيقات Java غير مدركة لبيئة المضيف الخاصة بك. أي تطبيق مع مسار السياق "FOO" (والذي يمكن استرداده بواسطة ServletContext#getContextPath ()) يمكن أن يتلقى طلبات من منفذ HTTP 8080 ومنفذ HTTPS 8043. المرجع: https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top