BaseServlet抽取

减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,

相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。

BaseServlet:

public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成方法分发
//1.获取请求路径
String uri = req.getRequestURI();
System.out.println("请求uri:"+uri);
//获取方法名称
String methodName = uri.substring(uri.lastIndexOf('/') + 1);
System.out.println("方法名称:"+methodName);
//获取方法对象Method
//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:测试

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("add...");
} public void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("find...");
}
}

访问:

控制台:

UserServlet:把上面写的Servlet全部写到UserServlet这个方法中,复制过来就行

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
//声明一个UserService业务对象
private UserServiceImpl service = new UserServiceImpl();
/**
* 注册功能
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void rehist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//验证码的校验
String check = request.getParameter("check");
//从session中获取验证码
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
session.removeAttribute("CHECKCODE_SERVER");//保证验证码只使用一次
//比较
if (checkcode_server==null || !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数据写回客户端
//设置content-type
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
return;
} //获取数据
Map<String, String[]> map = request.getParameterMap();
//封装对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用service完成注册
//UserServiceImpl service = new UserServiceImpl();
boolean flag = service.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数据写回客户端
//设置content-type
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 {
//验证码的校验
String check = request.getParameter("check");
//从session中获取验证码
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
session.removeAttribute("CHECKCODE_SERVER");//保证验证码只使用一次
//比较
if (checkcode_server==null || !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数据写回客户端
//设置content-type
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
return;
} //获取用户名和密码数据
Map<String, String[]> map = request.getParameterMap();
//封装user对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用Service查询
//UserServiceImpl service = new UserServiceImpl();
User u = service.login(user);
request.getSession().setAttribute("user",u);
ResultInfo info = new ResultInfo();
//判断用户对象是否为null
if (u==null){
//用户名或密码错误
info.setFlag(false);
info.setErrorMsg("用户名或密码错误");
}
//判断用户是否激活
if (u!=null && !"Y".equals(u.getStatus())){
//用户尚未激活
info.setFlag(false);
info.setErrorMsg("您尚未激活,请激活");
}
//判断登录成功
if (u!=null && "Y".equals(u.getStatus())){
//登录成功
info.setFlag(true);
}
//响应数据
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),info);
} /**
* 查询单个对象
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从session中获取登录用户
Object user = request.getSession().getAttribute("user");
//将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 {
//销毁session
request.getSession().invalidate();
//跳转登录页面
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){
//调用service完成激活
//UserServiceImpl service = new UserServiceImpl();
boolean flag = service.active(code);
//判断标记
String msg = null;
if (flag){
//激活成功
msg = "激活成功,请<a href='/travel/login.html'>登录</a>";
}else {
//激活失败
msg = "激活失败,请联系管理员!";
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(msg);
}
}
}

login.html:该路径

header.html:

register.html:

UserServiceImpl:regist方法中的路径

优化完成

《黑马旅游网》综合案例六 BaseServlet 抽取的更多相关文章

  1. 黑马旅游网 ajax+html在前端实现页标签个数控制

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 黑马旅游网案例 Bug集锦

  3. Maven+JSP+Servlet+JDBC+Redis+Mysql实现的黑马旅游网

    项目简介 项目来源于:https://gitee.com/haoshunyu/travel 本系统是基于Maven+JSP+Servlet+JdbcTemplate+Redis+Mysql实现的旅游网 ...

  4. 黑马旅游网配置 pom.xml

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  5. Linux上部署黑马旅游网Bug集锦

  6. 黑马旅游网 解析url查询字符串

    function getUrlParam(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)( ...

  7. 黑马旅游网 url-pattern不加斜杠报错 java.util.concurrent.ExecutioException: org.apache.catalina.LifecycleException

  8. 黑马旅游网 ajax实现html页面共享

  9. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_18maven的java工程取mysql数据库

    使用maven创建ava功能,然后读取数据库做一个测试. 我们做的持久层,没有和页面有交互,只做一个java工程就可以了 创建的是java工程,用不用骨架都可以.这里不使用骨架,直接next 直接fi ...

  10. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_09maven概念模型图

    项目自身的信息 项目运行所依赖的扎包 运行环境信息:tomcat啊,JDK啊这些都属于运行环境 一个jar包的坐标由三个最基本的信息组成. 第一部分就是依赖管理. 第二个部分

随机推荐

  1. P8618 [蓝桥杯 2014 国 B] Log 大侠

    简要题意 给你一个长度为 \(n\) 的正整数序列 \(a\),有 \(m\) 个询问,每一个询问给出一个区间 \([l,r]\).定义函数 \(f(x)=\lfloor\log_{2}(x)+1\r ...

  2. 算法学习笔记(9): 中国剩余定理(CRT)以及其扩展(EXCRT)

    扩展中国剩余定理 讲解扩展之前,我们先叙述一下普通的中国剩余定理 中国剩余定理 中国剩余定理通过一种非常精巧的构造求出了一个可行解 但是毕竟是构造,所以相对较复杂 \[\begin{cases} x ...

  3. 第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!

    欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用各种 AI 工具,在 5 天内创建一个功能完备的农场游戏.到本系列结束时,你将了解到如何将多种 AI 工具整合到游戏开发流程中.本系列文章将向你展 ...

  4. 《HelloGitHub》第 82 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  5. 聊一聊js中元素定位的方法

    在做selenium web自动化的时候,有时通过selenium定位不到,或无法操作元素,这个时候就需要通过js来 定位/操作元素,然后通过selenium自带的execute_script()方法 ...

  6. MySQL-数据库、MySQL

    1.存取数据的演变史 1.文本文件: 文件路径不固定(导致代码兼容性下降) 数据格式不统一:(max|123, max_123) 2.软件开发目录规范: 1.规定了数据应该保存在db目录下>&g ...

  7. 线程基础知识14 ReentrantLock和ReentrantReadWriteLock

    1 简介 ReentrantLock和ReentrantReadWriteLock都是可重入锁.可重入锁,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁 ReentrantL ...

  8. 又花了半个小时将 ChatGPT 接入了钉钉机器人

    前面的文章给大家介绍了如何在个人微信中使用 ChatGPT,但是大家都知道这种操作是有风险的,所以都让大家使用小号,今天再给大家介绍一下如何在钉钉中使用机器人来调戏 AI. 流程 注册钉钉开发者平台账 ...

  9. 黑马Mybatis快速入门

    创建user表,添加数据,Mysql: 1 create database mybatis; 2 use mybatis; 3 drop table if exists tb_user; 4 crea ...

  10. [java安全基础 01]SQL+反序列化

    tomcat Servlet 什么是servlet Java Servlet是运行在 Web 服务器或应用服务器上的程序.它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或 ...