How to achieve multiple functions in a Servlet

How to achieve multiple functions in a Servlet

Preface: Well, hit the face, front foot just said keep Servlet formal farewell, this is not the back foot again, ha ha, summed up something, or to be a tangled a bit to share it and learn important knowledge than the face, right, next time no longer about the Servlet.

 

 

demand analysis

Look at the code below, there is now a UserServlet, there are four CRUD method, according to the usual way of thinking, to achieve a function with a Servlet, this is nothing wrong, the question now is a Servlet There are four functions, then this how to to achieve it?

package com.my.servlet;

import com.my.service.UserService;
import com.my.service.impl.UserServiceImpl;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/user")
public class UserServlet extends HttpServlet {
    private UserService userService = new UserServiceImpl();

  public String add(HttpServletRequest request,HttpServletResponse response){
      userService.add();
      request.setAttribute("mess","添加成功");
      return "r:add.jsp";
  }

    public String delete(HttpServletRequest request,HttpServletResponse response){
        userService.delete();
        request.setAttribute("mess","删除成功");
        return "f:add.jsp";
    }
    public String update(HttpServletRequest request,HttpServletResponse response){
        userService.update();
        request.setAttribute("mess","修改成功");
        return "add.jsp";
    }
    public String query(HttpServletRequest request,HttpServletResponse response){
        userService.query();
        request.setAttribute("mess","查询成功");
        return "add.jsp";
    }

}

 

  

 

Thinking to solve

In fact, a simple solution to this problem, write a FatherServlet inherited from HttpServlet, subclass UserServlet service in the Servlet in the parent class () method to be invoked by the request parameters to determine which method of execution and may Speaking of which some friends do not understand how to use the parameters to judge everyone a look at the following code to understand, I mainly explain all the doubts, subclass UserServlet how to call the parent class FatherServlet in service () method, in fact, the secret in this parameter when you visit UserSerlvet bring the request parameters, the visit came UserServlet no way to solve arguments, so he will look for ways to respond in the parent class FatherServlet, perform the find, which is inherited, the parent class subclass inherits nothing wrong with it, it will be solved.

 

After solving the problem I still service () method added a judge is to redirect or forward thinking on this friendship gift, do not say, come, look at the code:

 

FatherServlet

package com.my.servlet;



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.reflect.InvocationTargetException;

import java.lang.reflect.Method;



public class FatherServlet extends HttpServlet {

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String m = req.getParameter("m");

        if (m==null||"".equals(m)){

            throw new RuntimeException("参数不能为空");

        }



        Class c = this.getClass();



        try {

            Method method = c.getMethod(m,HttpServletRequest.class,HttpServletResponse.class);

            Object o =method.invoke(this,req,resp);

            String rel =String.valueOf(o);



            //判断返回值的前缀,默认转发,r:重定向  f:转发

            if (rel.startsWith("r:")){

               rel =  rel.substring(rel.indexOf(":")+1);

               resp.sendRedirect(rel);

            }else if(rel.startsWith("f:")){

                rel = rel.substring(rel.indexOf(":")+1);

                req.getRequestDispatcher(rel).forward(req,resp);

            }else {

                req.getRequestDispatcher(rel).forward(req,resp);

            } 

        } The catch (a NoSuchMethodException E) { 

            the throw a RuntimeException new new ( "request method does not exist !!"); 

        } the catch (IllegalAccessException E) { 

            the throw a RuntimeException new new ( "request method abnormality !!"); 

        } the catch (a InvocationTargetException E) { 

            the throw a RuntimeException new new ( "request method abnormality !!"); 

        } 

    } 

}
 

  

 

 

UserServlet

package com.my.servlet;



import com.my.service.UserService;

import com.my.service.impl.UserServiceImpl;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/user")

public class UserServlet extends FatherServlet {

    private UserService userService = new UserServiceImpl();



  public String add(HttpServletRequest request,HttpServletResponse response){

      userService.add();

      request.setAttribute("mess","添加成功");

      return "r:add.jsp";

  }



    public String delete(HttpServletRequest request,HttpServletResponse response){

        userService.delete();

        request.setAttribute("mess","删除成功");

        return "f:add.jsp";

    }

    public String update(HttpServletRequest request,HttpServletResponse response){

        userService.update();

        request.setAttribute("mess","修改成功");

        return "add.jsp";

    }

    public String query(HttpServletRequest request,HttpServletResponse response){

        userService.query();

        request.setAttribute("mess","查询成功");

        return "add.jsp";

    }



}

  

 

 

Complete presentation

This post is mainly to solve the problem shown in demand, first demand is resolved, put on a show full of code we need to do it, I put my tests were sorted out, facilitate the novice to learn.

 

UserDao

package com.my.dao;



public interface UserDao {

    public void add();

    public void delete();

    public void update();

    public void query();

}
 

  

 

UserDaoImpl

com.my.dao.impl Package; 



Import com.my.dao.UserDao; 



public class UserDaoImpl the implements UserDao { 

    @Override 

    public void the Add () { 

        System.out.println ( "add functionality in UserDao achieved"); 

    } 



    @Override 

    public void delete () { 

        System.out.println ( "deletion function is achieved UserDao"); 

    } 



    @Override 

    public void Update () { 

        System.out.println ( "editing achieved in UserDao") ; 

    } 



    @Override 

    public void query () { 

        System.out.println ( "search function in UserDao achieved"); 

    } 

}
 

  

 

UserService

package com.my.service;



public interface UserService {

    public void add();

    public void delete();

    public void update();

    public void query();

}

  

 

 

UserServiceImpl

package com.my.service.impl;



import com.my.dao.UserDao;

import com.my.dao.impl.UserDaoImpl;

import com.my.service.UserService;



public class UserServiceImpl implements UserService {



    private UserDao userDao = new UserDaoImpl();

    @Override

    public void add() {

        userDao.add();

    }



    @Override

    public void delete() {

        userDao.delete();

    }



    @Override

    public void update() {

        userDao.update();

    }



    @Override

    public void query() {

        userDao.query();

    }

}
 

  

 

UserServlet

package com.my.servlet;



import com.my.service.UserService;

import com.my.service.impl.UserServiceImpl;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/user")

public class UserServlet extends FatherServlet {

    private UserService userService = new UserServiceImpl();



  public String add(HttpServletRequest request,HttpServletResponse response){

      userService.add();

      request.setAttribute("mess","添加成功");

      return "r:add.jsp";

  }



    public String delete(HttpServletRequest request,HttpServletResponse response){

        userService.delete();

        request.setAttribute("mess","删除成功");

        return "f:add.jsp";

    }

    public String update(HttpServletRequest request,HttpServletResponse response){

        userService.update();

        request.setAttribute("mess","修改成功");

        return "add.jsp";

    }

    public String query(HttpServletRequest request,HttpServletResponse response){

        userService.query();

        request.setAttribute("mess","查询成功");

        return "add.jsp";

    }



}

  

 

 

FatherServlet

package com.my.servlet;



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.reflect.InvocationTargetException;

import java.lang.reflect.Method;



public class FatherServlet extends HttpServlet {

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String m = req.getParameter("m");

        if (m==null||"".equals(m)){

            throw new RuntimeException("参数不能为空");

        }



        Class c = this.getClass();



        try {

            Method method = c.getMethod(m,HttpServletRequest.class,HttpServletResponse.class);

            Object o =method.invoke(this,req,resp);

            String rel =String.valueOf(o);



            //判断返回值的前缀,默认转发,r:重定向  f:转发

            if (rel.startsWith("r:")){

               rel =  rel.substring(rel.indexOf(":")+1);

               resp.sendRedirect(rel);

            }else if(rel.startsWith("f:")){

                rel = rel.substring(rel.indexOf(":")+1);

                req.getRequestDispatcher(rel).forward(req,resp);

            }else {

                req.getRequestDispatcher(rel).forward(req,resp);

            } 

        } The catch (a NoSuchMethodException E) { 

            the throw a RuntimeException new new ( "request method does not exist !!"); 

        } the catch (IllegalAccessException E) { 

            the throw a RuntimeException new new ( "request method abnormality !!"); 

        } the catch (a InvocationTargetException E) { 

            the throw a RuntimeException new new ( "request method abnormality !!"); 

        } 

    } 

}

  

 

 

add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="z" uri="http://mycompany.com" %>

<html>

<head>

    <title>测试页面</title>

</head>

<body>



<h1>测试</h1>

${mess}



</body>

</html>

  

 

 

 

Tests show

 

 

 

 

 

 

 

The harder, the more fortunate

The last point of chicken soup to it, for a long time did not say, endure hardship, do not choose the age at ease, not the first white boy, empty sadness, life win in the turning point of change from now on, the more share, the greater your value added . . . . . . . . .

 

 

*****************************************************************************************************

My blog park Address: https://www.cnblogs.com/zyx110/

Reprint please indicate the source

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,人生赢在转折处,改变从现在开始!

支持我的朋友们记得点波推荐哦,您的肯定就是我前进的动力。

 

Guess you like

Origin www.cnblogs.com/zyx110/p/11286828.html