在实际开发过程中,由于之前是一个功能对应一个Servlet,这会导致由于功能的增多而导致Servlet的类型过于繁多,应当将应优化为一个模板一个Servlet,即相当于一个数据库中的一个表对应一个Servlet,然后在Servlet中提供多种方法,完成用户的请求
基本的流程图如下
注意的是,为了防止中文乱码的问题,应当在设置中的Maven->Runner->VM Options中设置为:-Dfile.encoding=gb2312
步骤:
-
创建一个BaseServlet,用于获取用户请求的方法并实施
public class BaseServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //完成方法的分配 //1.获取请求路径 String url = request.getRequestURI(); //2.获取方法名称 String menthodName = url.substring(url.lastIndexOf("/")+1); //3.获取方法对象 //谁调用了我?我代表谁? try { //获取方法,其中this表示继承该BaseServlet的字Servlet Method method = this.getClass().getMethod(menthodName, HttpServletRequest.class,HttpServletResponse.class); //4.执行方法 method.invoke(this,request,response); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
2.分别创建不同模板的Servlet,用于存放多种方法,在这里我便创建了UserServlet
@WebServlet("/User/*")
public class UserServlet extends BaseServlet {
//声明UserServlet的业务对象
private UserService service = new UserServiceImpl();
/**
way:对应的方法
* /
public void way(HttpServletRequest request,HttpServletResponse response)throws
ServletException, IOException{
/*
在该区域写上对应的方法
*/
}
}
最后,只需在页面中主页中改变其路径,即"User/对应的方法名"