import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class AServlet extends HttpServlet {
private Map<String, String> urlHandlerMethods = new ConcurrentHashMap<String, String>();
private String baseUrl = "";
private Object methodInvoke(Object object, String methodName,Class<?>... parameterTypes) {
try {
Class<? extends Object> classInfo = object.getClass();
Method method = classInfo.getMethod(methodName,parameterTypes);
Object result = method.invoke(object);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}
@Override
public void init() throws ServletException {
String baseUrlTmp = this.getInitParameter("baseUrl");
if(baseUrlTmp != null){
this.baseUrl = baseUrlTmp;
}
ServletContext servletContext = this.getServletContext();
String contextPath = servletContext.getContextPath();
String servletInfo = this.getServletInfo();
ServletConfig config = getServletConfig();
Class<? extends EleDocServlet> aClass = this.getClass();
Method[] declaredMethods = aClass.getDeclaredMethods();
for (Method method : declaredMethods) {
UrlMapping methodUrlMapping = method.getDeclaredAnnotation(UrlMapping.class);
if (methodUrlMapping != null) {
String methodUrl = this.baseUrl + methodUrlMapping.value();
urlHandlerMethods.put(methodUrl, method.getName());
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
String methodName = urlHandlerMethods.get(requestURI);
if (methodName == null) {
response.getWriter().println("404_not_found");
return;
}
Object result = methodInvoke(this, methodName, request.getClass(), response.getClass());
response.getWriter().println(result);
}
@UrlMapping("/index")
public String test(HttpServletRequest request, HttpServletResponse response){
return "ok";
}
}
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@interface UrlMapping {
String value() default "";
}