JSP怎么生成“动态URL”?


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

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

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

java javaweb java-ee JSP 网站开发

我唔系男籽 10 years, 10 months ago

@netingcn 的回答感觉差不多啊,服务器来做这件事完全可以吧?
如果你坚持 java web 后台实现,那么设置一个 filter 来过滤所有的 jsp 页面请求,改变 URI 到对应页面即可。

どへんたい様 answered 10 years, 10 months ago

其实这个应该不是jsp来做的事,通过在web服务器中用过url rewrite轻松就可以搞定。nginx apache 都支持。tomcat 通过一个叫 UrlRewriteFilter filter在 web.xml 配置一下即可。

vasilli answered 10 years, 10 months ago

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
    }
}

子兎Muki answered 10 years, 10 months ago

Your Answer