servlet:如何操作uri



我正在写一个博客,但是我在用明确的URL路径组织内容方面遇到了困难。基本上,我希望创建的每个帖子都有一个唯一的URL路径,如"http://www.site.com/article/article_name"。此时,我的url看起来像"http://www.site.com/article.jsp?article=article_name",其中article.jsp通过以下方式生成不同的内容:

request.getParameter("requestedArticleName");

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

您可以使用的一种方法是创建您自己的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>

最新更新