搜尋

首頁  >  問答  >  主體

java - JSP怎么生成“动态URL”?

也不知道“动态URL”这种叫法对不对,反正这样的需求也还不会描述。

需求如下:
譬如 http://segmentfault.com/q/1010000002910984 这样的URL,URL中的一串数字(1010000002910984)对应一个问题详情页面,我们暂且认为这也是数据库中的ID,那在JSP怎么达到这样的效果?即,数据库里有很多条数据,以ID标识,希望就是通过一个包含记录的ID的URL来到达详情页面,使用的是JSP技术。其实这样的做法在很多网站都实现了。
现在在下能做到的程度只是一个个JSP页面跳转(每个页面都是写好了的),自己道行不够深,还没想到怎么实现这样的需求。

希望大神指点,先谢谢了。

巴扎黑巴扎黑2803 天前821

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-04-17 13:59:13

    JSP就是servlet,比較好的方案寫一個servlet來統一調度請求,扮演一個路由的功能。例如SpringMVC的入口是DispatcherServlet。
    以下根據答主的問題來回答,當然我的方式並不是最好的。
    例如 http://segmentfault.com/q/1010000002910984,使用一個servlet處理所有的http://segmentfault.com/q/下的請求

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * Created by reeco_000 on 2015/6/16.
     */
    @WebServlet(name = "URLServlet",urlPatterns = "/q/*")
    public class URLServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取请求的地址
            String id = request.getRequestURI();
    
            //do something
        }
    }
    

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:59:13

    其實這個應該不是jsp來做的事,透過在web伺服器中用過url rewrite輕鬆就可以搞定。 nginx apache 都支援。 tomcat 透過一個叫 UrlRewriteFilter filter在 web.xml 配置一下即可。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:59:13

    @netingcn 的回答感覺差不多啊,伺服器來做這件事完全可以吧?
    如果你堅持java web後台實現,那麼設定一個filter來過濾所有的jsp頁面請求,改變URI到對應頁面即可。

    回覆
    0
  • 取消回覆