Servlets:如何操作URI

时间:2013-05-26 19:39:49

标签: jsp url servlets uri

所以我在博客上工作,但是我很难用组织清晰的URL路径来组织内容。基本上,我希望创建的每个帖子都有一个唯一的URL路径,如“http://www.site.com/article/article_name”。此时,我的网址看起来像“http://www.site.com/article.jsp?article=article_name”,其中article.jsp通过以下方式生成不同的内容:

request.getParameter("requestedArticleName");

我知道servlet映射是基于URL模式调用servlet的,但是我不太确定它是如何工作的,以及我是否需要它。

1 个答案:

答案 0 :(得分:0)

您可以使用一种方法来创建自己的Filter,它将接收来自http://www.site.com/article/ *的所有请求,并将它们重定向到您的article.jsp?name = *。

示例:

public class URLFilter implements Filter
{
    @Override
    public void  init(FilterConfig config) throws ServletException
    {

    }

    @Override
    public void doFilter(ServletRequest p_oRequest, ServletResponse p_oResponse, FilterChain p_oChain) throws IOException, ServletException
    {
        String sName = oRequest.getRequestURI();

        if(sName.lastIndexOf('/') != -1)
        {
            sName = sName.substring(sName.lastIndexOf('/') + 1);
        }
        else
        {
            // You could trap that in your article.jsp to show error message
            sName = "404";
        }

        p_oRequest.getRequestDispatcher("/article.jsp?name=" + sName).forward(p_oRequest,p_oResponse);
    }
}

当然,您需要改进并进行一些验证。此代码尚未经过测试,但基于我的JSF CMS URLFilter。

不要忘记在web.xml中添加此内容!

<filter>
    <filter-name>URLFilter</filter-name>
    <filter-class>path.to.your.URLFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>URLFilter</filter-name>
    <url-pattern>/article/*</url-pattern>
</filter-mapping>