我使用了一個BaseServle,UserServlet繼承BaseServle,在UserServlet方法中,使用了請求轉發,頁面沒有成功跳轉,報了NoSuchMethodException,沒有方法例外。
我在獲取方法名的同時列印了一下方法名,我發現我轉發的html頁面login.html被列印出來了,也就是說他在獲取login.html頁面這個方法,這個方法肯定沒有啊。使用重定向就不會發生這種問題。這個是什么原因造成的呢?
uj5u.com熱心網友回復:
以下是BaseServlet代碼。uj5u.com熱心網友回復:
public class BaseServlet extends HttpServlet {@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
/*Service方法分析
* 第一步,獲取請求的URI截取最后呼叫的方法
* 根據方法名獲取方法物件,
* 執行方法物件*/
//獲取請求URI
String URI = request.getRequestURI();// 比如:/user/方法名
//截取方法名 獲取最后一個/的索引位置,加一以后才是方法名的第一位
String methodName = URI.substring(URI.lastIndexOf('/') + 1);
System.out.println(methodName);
//根據方法名獲取方法物件 注意:這里的this代表的是子類物件,因為請求的是UserService,他是子類物件
//注意子類物件的方法名要改為public,否則無法獲取物件,只能暴力反射
try {
Method method = this.getClass().getMethod(methodName,HttpServletRequest.class, HttpServletResponse.class);
//執行方法物件
method.invoke(this,request,response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
uj5u.com熱心網友回復:
這是userServlet中的方法public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("login.html").forward(request, response);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/138011.html
標籤:Web 開發
