我写了一些关于用户的servlet,最后我想将它们抽象到userServlet,所以我创建了一个userServlet扩展baseServet,通过basicServlet获取retRequestURI并获取方法名称并调用method。但是在我的userServlet中,某些方法不能跳到正确的路径,因为我猜是虚拟路径。.但是我不知道如何编写正确的路径或其他方法来解决这种情况。请查看代码
这是我的基本Servlet
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成方法的分发
//1.获取请求路径,
String requestURI = req.getRequestURI();// /case/user/add
System.out.println("请求的路径是:"+requestURI);
//2.获取方法的名称
String methodName = requestURI.substring(requestURI.lastIndexOf('/') + 1);
System.out.println("方法名称是:"+methodName); // add
try {
//3.获取方法的对象
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.执行方法
Object invoke = method.invoke( this, req, resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
this is part of my userServlet
@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("index.jsp").forward(request,response);
}
}
在我的login.jsp中,我输入正确的路径,以便baseServelt可以调用登录方法,但在这一行中 request.getRequestDispatcher(“ index.jsp”)。forward(request,response); 它跳到
localhost / case / user / index.jsp
代替
localhost / case / index.jsp
因为所有带有用户的路径都将由basicServet调用,所以baseServelt会产生一个java.lang.NoSuchMethodException;。 我想要的路径是
localhost / case / index.jsp
我如何获得正确的路径?