代码之家  ›  专栏  ›  技术社区  ›  Ashish Agarwal

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

  •  2
  • Ashish Agarwal  · 技术社区  · 16 年前

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

    http://mysite.com/username
    

    而不是

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

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

    我如何在我的Web应用程序中实现这一点。我还在开发这个应用程序。我还没有主持。

    谢谢

    3 回复  |  直到 15 年前
        1
  •  1
  •   Ryan    15 年前

    可以使用prettyfaces在glassfish中重写URL: http://ocpsoft.com/prettyfaces/

        2
  •  1
  •   rsp    16 年前

    通常,当您在servlet容器(在您的例子中是glassfish)中安装Web应用程序时,会定义将URL映射到Web应用程序的应用程序根目录。

    如果将/myapp用作应用程序根目录,则容器将请求映射到 http://mysite.com/myapp/* 到您的Web应用程序。Web应用程序中的servlet在 web.xml 在其中映射servlet类。

    如果你说,映射servlet com.mysite.UserServlet user 容器将映射该格式的所有URL http://mysite.com/myapp/user* 到那个servlet。你可以使用 pathinfo 之后检索部件 /myapp/user 并解析它以提取用户名,以防您选择使用类似于 http://mysite.com/myapp/user/Sam 而不是 http://mysite.com/myapp/user?name=Sam

    编辑

    方法 HttpServletRequest.getPathInfo() (QUOTE)返回与客户机发出此请求时发送的URL相关联的任何额外路径信息。额外的路径信息跟随servlet路径,但在查询字符串之前。如果没有额外的路径信息,则此方法返回空值。

    所以 http://mysite.com/myapp/user/sam 一个servlet映射到 /user/ 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>
    
        3
  •  -1
  •   Thorbjørn Ravn Andersen    16 年前

    听起来您的登录页面应该使用post而不是get in the submit操作。

    http://www.w3.org/TR/html401/interact/forms.html#submit-format