Java Servlet封装


封装DispatcherServlet.java

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;

/**
 * servlet封装
 * 通过反射的原理,执行方法分发
 * 在一个servlet中完成同一资源的操作
 */

public class DispatcherServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //  设置字符编码
        req.setCharacterEncoding("utf-8");
        //  获取uri
        String requestURI = req.getRequestURI();
        //  截取请求资源
        String methodName = requestURI.substring(requestURI.lastIndexOf("/") + 1);

        Method method = null;
        try {
            //  使用反射,通过请求资源获取到与该资源同名的方法对象
            method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
            //  未找到该方法,返回404
            resp.sendRedirect(req.getContextPath() + "/404.jsp");
            return;
        }
        try {
            //  执行该方法对象
            method.invoke(this, req, resp);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

使用UserServlet.java

import cn.dy.entity.User;
import cn.dy.service.UserService;
import cn.dy.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author zrh
 * @date 2022/2/18
 * @apiNote
 */
//  配置资源路径,所有user下的资源都访问这里
@WebServlet("/user/*")
public class UserServlet extends DispatcherServlet {
    private UserService userService = new UserServiceImpl();

    /**
     * 用户登录
     *
     * @param request
     * @param response
     */
    public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userService.login(username, password);
        if (user == null) {
            request.setAttribute("msg","用户名或密码错误!");
            request.getRequestDispatcher("/fail.jsp").forward(request, response);
            return;
        }
        request.getSession().setAttribute("user", user);
        response.sendRedirect(request.getContextPath() + "/index.jsp");

    }
}

测试

该服务启动后,浏览器访问该登录资源即可

文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录