关于Servlet的优化,我有话要说

关于Servlet的优化,我有话要说

在这里插入图片描述

在编写Servlet的时候,你是否会出现一个功能用一个Servlet编写,这篇文章将介绍如何优化这种问题:就是一个模块一个Servlet

目录结构

原来的目录结构
优化前的目录
现在的目录结构:

在这里插入图片描述

实现逻辑关系:在这里插入图片描述

步骤

新建一个BaseServlet继承HttpServlet,再新建一个UserServlet继承BaseServlet
BaseServlet:

package cn.itcast.travel.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;

/**
 * @author 张振东
 * @version V1.0
 * @Title:
 * @Package
 * @Description: (用一句话描述该文件做什么)
 * @date:
 */
@WebServlet("/baseServlet")
public class BaseServlet extends HttpServlet {
   @Override
   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成方法请求
      String uri = req.getRequestURI();
      // /trvael/user/add
      System.out.println("uri="+uri);

      //获取方法名称
      String methodName = uri.substring(uri.lastIndexOf("/")+1);
      System.out.println(methodName);
      //获取方法对象
        //谁调用我我代表谁
      //System.out.println(this);
      try {
         Method method=this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);//执行方法
         method.invoke(this,req,resp);
      } catch (NoSuchMethodException e) {
         e.printStackTrace();
      } catch (IllegalAccessException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }

   }
}

UserServlet:

package cn.itcast.travel.web.servlet;

import cn.itcast.travel.domain.ResultInfo;
import cn.itcast.travel.domain.User;
import cn.itcast.travel.service.UserService;
import cn.itcast.travel.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * @author 张振东
 * @version V1.0
 * @Title:
 * @Package
 * @Description: (用一句话描述该文件做什么)
 * @date:
 */
@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
   private UserService userService = new UserServiceImpl();
   /**
    * 注册
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      request.setCharacterEncoding("utf-8");
      String check =request.getParameter("check");
      System.out.println(check);
      //从session中获取验证码
      HttpSession session = request.getSession();
      String checkcode_server=(String)session.getAttribute("CHECKCODE_SERVER");
      System.out.println(checkcode_server);
      session.removeAttribute("CHECKCODE_SERVER");//为了保证验证码只使用一次
      if(!checkcode_server.equalsIgnoreCase(check)){
         ResultInfo info = new ResultInfo();
         info.setFlag(false);
         info.setErrorMsg("验证码错误");
         //将info对象转换为json
         ObjectMapper mapper= new ObjectMapper();
         String json=mapper.writeValueAsString(info);
         //将json数剧写回到客户端
         response.setContentType("application/json;charset=utf-8");
         response.getWriter().write(json);
         return;
      }
//获取数据
      Map<String, String[]> parameterMap = request.getParameterMap();
      User user = new User();
      //封装对象
      try {
         BeanUtils.populate(user, parameterMap);
      } catch (IllegalAccessException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }
      //UserService userService = new UserServiceImpl();
      boolean flag = userService.regist(user);
      ResultInfo info = new ResultInfo();
      //响应结果
      if (flag) {
         info.setFlag(true);
      } else {
         info.setFlag(false);
         info.setErrorMsg("注册失败");
      }
      //将info对象转换为json
      ObjectMapper mapper= new ObjectMapper();
      String json=mapper.writeValueAsString(info);
      //将json数剧写回到客户端
      response.setContentType("application/json;charset=utf-8");
      response.getWriter().write(json);

   }

   /**
    * 登录功能
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      request.setCharacterEncoding("utf-8");
//获取用户名的账号和密码
      Map<String, String[]> parameterMap = request.getParameterMap();
      User user = new User();
      try {
         BeanUtils.populate(user, parameterMap);
      } catch (IllegalAccessException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }
   // UserService userService = new UserServiceImpl();
      User u = userService.login(user);
      ResultInfo resultInfo = new ResultInfo();
      //判断用户是否为null
      if (u == null) {
         resultInfo.setFlag(false);
         resultInfo.setErrorMsg("用户名或者密码错误");
      }
      if (u != null && !"Y".equals(u.getStatus())) {
         resultInfo.setFlag(false);
         resultInfo.setErrorMsg("您尚未激活,请激活");
      }
      if (u != null && "Y".equals(u.getStatus())) {
         resultInfo.setFlag(true);

      }
      ObjectMapper mapper = new ObjectMapper();
      response.setContentType("application/json;charset=utf-8");
      request.getSession().setAttribute("user",u);
      mapper.writeValue(response.getOutputStream(),resultInfo);


   }

   /**
    * 查找单个对象
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      Object user =request.getSession().getAttribute("user");
      ObjectMapper mapper = new ObjectMapper();
      response.setContentType("application/json;charset=utf-8");
      mapper.writeValue(response.getOutputStream(),user);
}

   /**
    * 退出功能
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //1.销毁session中的user对象
      request.getSession().invalidate();
      //2.页面重定向
      response.sendRedirect(request.getContextPath()+"/login.html");
   }

   /**
    * 验证功能
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String code =request.getParameter("code");
      if(code!=null){
         //UserService userService =new UserServiceImpl();
         boolean flag =userService.active(code);
         //判断标记
         String msg =null;
         if(flag){
            //激活成功
            msg="激活成功,请<a href="+request.getContextPath()+"/login.html>登录</a>";
         }else{
            msg="请联系管理员";
         }
         response.setContentType("text/html;charset=utf-8");
         response.getWriter().write(msg);
      }
   }
   }

效果图:
在这里插入图片描述
在这里插入图片描述

原创文章 65 获赞 238 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43688587/article/details/105893467
今日推荐