package com.taylor.demo;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取servletPath
String servletPath = request.getServletPath();
//去掉"/"和".do"
//"unhappy".substring(2) returns "happy"
String methodName = servletPath.substring(5);
// "hamburger".substring(4, 8) returns "urge"
methodName = methodName.substring(0, methodName.length()-3);
//得到該類下對應的方法,參數爲要操作的方法名和參數列表(避免方法的重載)
try {
Method method = this.getClass().getMethod(methodName,
HttpServletRequest.class,HttpServletResponse.class);
// 執行該方法,利用invoke()方法,第一個參數爲該方法所在類的實例,第二個爲該方法傳遞的的參數值
method.invoke(this, request,response);
} catch (Exception e) {
/*request.getRequestDispatcher("/login.jsp").forward(request, response);
throw new RuntimeException("您要調用的方法:" + methodName +
"(HttpServletRequest,HttpServletResponse),它不存在!");*/
response.sendRedirect("../error.jsp");
}
}
public void add(HttpServletRequest request, HttpServletResponse response) {
System.out.println("add方法");
}
public void update(HttpServletRequest request, HttpServletResponse response) {
System.out.println("update方法");
}
public void delete(HttpServletRequest request, HttpServletResponse response) {
System.out.println("delete方法");
}
public void query(HttpServletRequest request, HttpServletResponse response) {
System.out.println("query方法");
}
}