我正在设计一个小型J2EE Web应用程序(例如,服务名称将类似于http://www.mysite.com)。它使用Glassfish。规范:当用户注册Web应用程序时,他将获得一个自定义URL,如
http://mysite.com/username
而不是
http://mysite.com?username=username&userId=xxxx
我知道的是,这部分是目录级配置的一部分,而在Appache中,这可以通过配置.htaccess
来完成。
如何在我的网络应用程序中完成此操作。我还在开发应用程序。我还没有托管它。
感谢
答案 0 :(得分:1)
通常,当您在servlet容器(在您的案例中为glassfish)中安装Web应用程序时,您可以定义将URL映射到Web应用程序的应用程序根目录。
如果您使用/ myapp作为应用程序根目录,容器会将请求映射到您的网络应用程序http://mysite.com/myapp/*
。 Web应用程序中的Servlet映射在映射servlet类的web.xml
中。
如果你说,将servlet com.mysite.UserServlet
映射到user
,容器会将格式http://mysite.com/myapp/user*
的所有URL映射到该servlet。您可以使用pathinfo
检索/myapp/user
之后的部分并解析它以提取用户名,以防您选择使用http://mysite.com/myapp/user/Sam
而不是http://mysite.com/myapp/user?name=Sam
等网址
修改强>
方法HttpServletRequest.getPathInfo()(quote)返回与客户端发出此请求时发送的URL关联的任何额外路径信息。额外路径信息遵循servlet路径,但在查询字符串之前。如果没有额外的路径信息,则此方法返回null。
因此,对于http://mysite.com/myapp/user/Sam
和映射到/user/
的servlet,getPathInfo()将返回Sam
,然后就可以像使用属性值一样使用它。
为此,您的web.xml
将包含如下映射:
<web-app>
<servlet>
<servlet-name>userservlet</servlet-name>
<servlet-class>com.mysite.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userservlet</servlet-name>
<url-pattern>/user/</url-pattern>
</servlet-mapping>
</web-app>
答案 1 :(得分:1)
您可以在GlassFish中使用PrettyFaces进行URL重写:http://ocpsoft.com/prettyfaces/
答案 2 :(得分:-1)
听起来您的登录页面应该在提交操作中使用POST而不是GET。
http://www.w3.org/TR/html401/interact/forms.html#submit-format