重写servlet,可以获取不同的方法

Posted appium

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写servlet,可以获取不同的方法相关的知识,希望对你有一定的参考价值。

public class BaseServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");//处理响应编码
        request.setCharacterEncoding("UTF-8");
        
        /**
         * 1. 获取method参数,它是用户想调用的方法 2. 把方法名称变成Method类的实例对象 3. 通过invoke()来调用这个方法
         */
        String methodName = request.getParameter("method");
        Method method = null;
        /**
         * 2. 通过方法名称获取Method对象
         */
        try {
            method = this.getClass().getMethod(methodName,
                    HttpServletRequest.class, HttpServletResponse.class);
        } catch (Exception e) {
            throw new RuntimeException("您要调用的方法:" + methodName + "它不存在!", e);
        }
        
        /**
         * 3. 通过method对象来调用它
         */
        try {
        //方法执行,method.invoke(对象, 参数列表),相当于this.method(request,response) String result
= (String)method.invoke(this, request, response);// if(result != null && !result.trim().isEmpty()) {//如果请求处理方法返回不为空 int index = result.indexOf(":");//获取第一个冒号的位置 if(index == -1) {//如果没有冒号,使用转发 request.getRequestDispatcher(result).forward(request, response); } else {//如果存在冒号 String start = result.substring(0, index);//分割出前缀 String path = result.substring(index + 1);//分割出路径 if(start.equals("f")) {//前缀为f表示转发 request.getRequestDispatcher(path).forward(request, response); } else if(start.equals("r")) {//前缀为r表示重定向 response.sendRedirect(request.getContextPath() + path); } } } } catch (Exception e) { throw new RuntimeException(e); } } }

 


以上是关于重写servlet,可以获取不同的方法的主要内容,如果未能解决你的问题,请参考以下文章

写一个servlet如果不重写service方法那么会调用哪个类的service方法来调用doGet/doPost

Android 使用两个不同的代码片段获取当前位置 NULL

servlet-jsp

JavaWeb核心——Servlet

miniui两种请求servlet方法传递参数的不同

springmvc下servlet怎么获取service及调用service的方法