如何通过URL控制servlet执行?

时间:2011-12-07 02:07:29

标签: java servlets

如果urlPatterns控制基本网址重写,我是否可以不使用.htaccess重写网址?我正在查看此代码:http://www.objectdb.com/tutorial/jpa/eclipse/ee/servlet

...
@WebServlet(name = "GuestServlet", urlPatterns = {"/guest"})
public class GuestServlet extends HttpServlet {
...

当我访问http://localhost:8080/Guestbook/guest时,此页面效果很好,但如果我想http://localhost:8080/Guestbook/guest/edit?id=4怎么办,我该如何在此控制器中进行设置?

在PHP中,逻辑步骤为http://localhost:8080/Guestbook/controller/function。在java中,似乎我只能使用doGet(),这是对的吗?

我正在设想整体网址结构如何影响控制器的执行。

2 个答案:

答案 0 :(得分:2)

使用/guest/*的网址格式并使用HttpServletRequest#getPathInfo()提取路径信息。

这是一个启动示例(省略了普通的检查):

@WebServlet("/guest/*")
public class GuestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String[] pathInfo = request.getPathInfo().split("/");
        String action = pathInfo[1]; // edit
        String id = pathInfo[2]; // 4
        // ...
    }

}

调用http://localhost:8080/Guestbook/guest/edit/4会将action设置为edit,将id设置为4。您可以从此步骤开始使用策略模式来调用特定的业务操作。

当然,您也可以选择基于动作的MVC框架,它将所有servlet样板文件抽象出去,例如Spring MVC。

另见:

答案 1 :(得分:1)

资源http://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/annotation/WebServlet.html

基本上你需要改变

@WebServlet(name = "GuestServlet", urlPatterns = {"/guest"})

@WebServlet(name = "GuestServlet", urlPatterns = {"/guest", "/guest/edit"})

现在你的servlet也应该处理“/ guest / edit”URL模式