如何在Glassfish中创建自定义URL http://mysite.com/username?

时间:2010-02-06 09:43:22

标签: java java-ee glassfish

我正在设计一个小型J2EE Web应用程序(例如,服务名称将类似于http://www.mysite.com)。它使用Glassfish。规范:当用户注册Web应用程序时,他将获得一个自定义URL,如

http://mysite.com/username

而不是

http://mysite.com?username=username&userId=xxxx

我知道的是,这部分是目录级配置的一部分,而在Appache中,这可以通过配置.htaccess来完成。

如何在我的网络应用程序中完成此操作。我还在开发应用程序。我还没有托管它。

感谢

3 个答案:

答案 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