如果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()
,这是对的吗?
我正在设想整体网址结构如何影响控制器的执行。
答案 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模式