Java 如何创建一个类似“的域”;http://username.example.com" 在J2EE web应用程序中?
我是一名web应用程序开发人员,只是一名初学者。 我正在设计一个小型的J2EE web应用程序(例如,服务名称如下)。它使用ApacheTomcat。 规范:当用户注册到web应用程序时,他将获得一个自定义域,如Java 如何创建一个类似“的域”;http://username.example.com" 在J2EE web应用程序中?,java,tomcat,jakarta-ee,Java,Tomcat,Jakarta Ee,我是一名web应用程序开发人员,只是一名初学者。 我正在设计一个小型的J2EE web应用程序(例如,服务名称如下)。它使用ApacheTomcat。 规范:当用户注册到web应用程序时,他将获得一个自定义域,如 如何在web应用程序中实现这一点。我还在开发这个应用程序。我还没有主持过 如果您在windows上,请编辑\windows\system32\drivers\etc\hosts文件并添加如下行: 127.0.0.1 username.mysite.com <VirtualH
如何在web应用程序中实现这一点。我还在开发这个应用程序。我还没有主持过 如果您在windows上,请编辑\windows\system32\drivers\etc\hosts文件并添加如下行:
127.0.0.1 username.mysite.com
<VirtualHost *:80>
ProxyRequests On
ProxyVia On
<Proxy http://example.com> #FIXDOMAIN
Order deny,allow
Allow from all
</Proxy>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC] #FIXDOMAIN
RewriteRule ^(.*)$ http://example.com$1?proxy_domain=%{HTTP_HOST} [P,QSA] #FIXDOMAIN
JkMount /* default
ServerName example.com #FIXDOMAIN
ServerAlias *.example.com #FIXDOMAIN
<!-- Other normal options go here -->
</VirtualHost>
然后,当服务器运行时,您可以打开浏览器并键入:
http://username.mysite.com
http://username.mysite.com:8080
或者随便什么,看看网站
您需要管理员权限才能执行此操作
如果您在linux上,则需要编辑/etc/hosts,并执行相同的操作
但是,在部署时,更多的是配置Web服务器和dns服务器。因此,如果您想获得完整的体验,您应该在本地安装dns服务器,并将其用作网络名称服务器。这是一项更复杂的任务,说明取决于您是在linux还是windows上,以及您使用的是哪个Web服务器
然后,您必须在应用程序中编写一些代码来检查服务器变量,以找出使用了哪个子域,并基于此进行处理。看起来您正在Tomcat上寻找虚拟主机。然后需要在Tomcat中配置子域:
web应用程序仅控制从上下文根开始的URL部分。因此,如果“www.mysite.com/”上有一个web应用程序,它可以处理到“www.mysite.com/alice”或“www.mysite.com/bob”的请求,但如果Tomcat服务器中没有配置,它将不会处理到“alice.mysite.com/”的请求。这意味着,对于每个新用户,Tomcat都需要配置新的子域。我认为这不能从web应用程序内部完成。您需要在Apache配置中为每个子域创建一个虚拟主机,如:
服务器管理员webmaster@subdomain1.example.com
DocumentRoot/www/subdomain1.example.com
ServerName subdomain1.example.com
ErrorLog logs/subdomain1.example.com host.example.com-error\u log
CustomLog logs/subdomain1.example.com-access_log common
但有一个问题。如果您的解决方案需要创建文件夹、添加虚拟主机和重新启动apache,这对我来说并不好。我将如何处理此问题:
如果使用这种方式,只需设置上述内容一次,然后将子域添加到存储中,这似乎比创建子文件夹和修改Apache配置更灵活。您可以创建一个通配符虚拟主机
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
</VirtualHost>
ServerName example.com
ServerAlias*.example.com
然后使用类似于HttpServletRequest#getRequestURL()
的方法处理应用程序代码中的子域
首先,您需要让用户的浏览器识别“username.mysite.com”的位置。这需要DNS配置,通常采用“CNAME通配符”的形式。请注意,如果您想在试用阶段控制自己,dyndns.org在其动态DNS Pro包中提供了此功能
第二个问题是,您需要告诉Tomcat从主机名派生用户,并为每个用户提供一个特殊的站点。实现这一点最简单的方法很可能是使用一个servlet过滤器,该过滤器对URL中的主机名进行“品味”,并设置jsp页面所需的属性。我知道这是一个老问题,但最近我实际上想出了一个适用于Tomcat的答案: 首先,您需要Apache背后的Tomcat 其次,您需要创建如下网站定义:
127.0.0.1 username.mysite.com
<VirtualHost *:80>
ProxyRequests On
ProxyVia On
<Proxy http://example.com> #FIXDOMAIN
Order deny,allow
Allow from all
</Proxy>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC] #FIXDOMAIN
RewriteRule ^(.*)$ http://example.com$1?proxy_domain=%{HTTP_HOST} [P,QSA] #FIXDOMAIN
JkMount /* default
ServerName example.com #FIXDOMAIN
ServerAlias *.example.com #FIXDOMAIN
<!-- Other normal options go here -->
</VirtualHost>
这将创建一个Apache可以处理的通配符域。mod_rewrite
规则将把URL重写为Tomcat能够理解的单个URL。然后,通过mod_proxy
,子域与名为proxy_domain
的GET
参数一起被代理到基本域,以确定原始用户名
这是一个相当复杂的解决方案(可能不是非常可扩展的解决方案),因为ApacheTomcat不支持通配符域。但它确实有效 我希望所有用户在应用程序运行时都能使用此功能。。这可能吗?我怎么做?用户进入他的域并通过该域登录到他的帐户…如果你能告诉我你是在windows还是linux上,我可以发布具体的说明。如果你两个类型,请告诉我们,因为我们渴望了解这两种场景:Apache httpd配置还是Apache Tomcat配置?所以我需要为我站点中的“每个用户”进行此配置?@lakshmanan:您最初将问题标记为“Apache”而不是“Tomcat”。“apache”一词是“apachehttpd服务器”的同义词,而不是“apachetomcat”。您从Sam、kinjal和Vincent那里得到的基于Apache HTTPD的答案不正确。这些不适用于Tomcat。但是,您可以在ApacheTomcat旁边安装ApacheHTTP服务器,并在Tomcat连接器(mod_jk)的帮助下将其作为代理提交给Tomcat。要获得真正的ApacheTomcat答案,请查看Thorbjorn和mjustin的答案。还可以如何完成这类工作?永远是