通用Servlet的抽取

  1. 模块化开发Servlet的方法,自定义 BaseServlet工具 继承HttpServlet;

  BaseServlet的原理是通过反射找到子类的方法,然后执行!

package com.igeek.shop.servlet;import java.io.IOException;
import java.lang.reflect.Method;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author www.igeehome.com* * TODO 所有的servlet的基类** 2018年9月8日上午10:26:54*/
public class BaseServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求参数中的methodString method = req.getParameter("method");if(method!=null){try {//通过反射调用对应的方法//通过“this”获取class对象Class clazz = this.getClass();//通过class对象和方法名获取方法对象Method m = clazz.getMethod(method, HttpServletRequest.class,HttpServletResponse.class);//通过反射机制调用方法m.invoke(this, req,resp);} catch (Exception e) {e.printStackTrace();}}}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}   

2.创建servlet继承 BaseServlet 类中不用写 doget dopost方法

package com.igeek.shop.servlet;import java.io.IOException;
import java.util.Arrays;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.igeek.shop.entity.Pager;
import com.igeek.shop.entity.Product;
import com.igeek.shop.service.ProductService;
import com.igeek.shop.service.impl.ProductServiceImpl;/*** Servlet implementation class ProductServlet*/
public class ProductServlet extends HttpServlet {private static final long serialVersionUID = 1L;private ProductService productService = new ProductServiceImpl();public ProductServlet() {super();// TODO Auto-generated constructor stub}/*** 合并ProductListServlet的功能,实现商品列表展示* @param request* @param response* @throws ServletException* @throws IOException*/private void productList(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{// 通过cid读取商品列表String cid = request.getParameter("cid");int page = 1;int size = 6;try {page = Integer.parseInt(request.getParameter("page"));} catch (Exception e) {}try {size = Integer.parseInt(request.getParameter("size"));} catch (Exception e) {}// List<Product> products = productService.findProductsByCid(cid);// request.setAttribute("products", products);// 将查询全部修改为分页查询Pager<Product> pager = productService.findByPage(cid, page, size);request.setAttribute("pager", pager);// 将cid再次携带到页面request.setAttribute("cid", cid);// 从cookie中取出readIdCookie[] cookies = request.getCookies();// 获取所有的cookie// 遍历找出浏览记录的cookieCookie readCookie = null;for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];if (cookie.getName().equals("readId")) {readCookie = cookie;break;}}//判断是否已经拿到浏览记录的cookieif(readCookie!=null){//说明已经获取到浏览记录的cookie//取出id字符串 String ids = readCookie.getValue();// 分割idString[] pids = ids.split("_");// 根据pid的数组,从底层中查询浏览记录的商品信息列表//只窃取数组的最后7位。pids = Arrays.copyOfRange(pids, pids.length-7<0?0:pids.length-7, pids.length);List<Product> rproducts = productService.findByIds(pids);// 将浏览记录的商品信息列表存储在request中request.setAttribute("rproducts", rproducts);}// 转发到列表页面request.getRequestDispatcher("product_list.jsp").forward(request, response);}/*** 合并ProductInfoServlet功能,实现商品详细信息展示的功能* @throws IOException * @throws ServletException */private void productInfo(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{//从请求参数中取出商品的IDString pid = request.getParameter("pid");//通过id读取商品的信息,Product product = productService.findProducById(pid);//将商品的信息放入request中。request.setAttribute("product", product);//将商品的ID存储到cookie中//要考虑是否以及存在了浏览记录。//如果已经存在浏览记录cookie,则将现在的ID添加到原来的浏览记录中//从reuqest中区cookieCookie[] cookies = request.getCookies();//获取到所有的cookie//保存浏览记录的cookie对象Cookie readCookie = null;//遍历cookiesfor (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//判断是否存在浏览记录的cookieif(cookie.getName().equals("readId")){//说明存在浏览记录的cookiereadCookie = cookie;break;//跳出循环}}if(readCookie!=null){//浏览记录cookie存在//将当前的ID添加到原有的记录cookie中//取出原有的浏览记录的IDString ids = readCookie.getValue();//1_3434_54545_erer3434_3434//直接将现在pid添加到原有的后面//判断浏览记录的cookie中是否存在当前的商品if(!ids.contains(pid)){//不存在就添加到后面//当记录数量超过10的时候,就删除最前面的一个记录。if(ids.split("_").length==10){ids=ids.substring(ids.indexOf("_")+1);}//将最新的浏览记录的ID追加到最后ids+="_"+pid;////再将ID设置到cookie中readCookie.setValue(ids);}}else{//如果没有浏览记录,则新创建浏览记录的cookiereadCookie = new Cookie("readId", pid);}readCookie.setPath("/");//设置cookie的路径为根目录readCookie.setMaxAge(60*60*24*7);//设置cookie的存活时间为7天。一旦设置cookie的存活时间,cookie就会存储在磁盘上。//将cookie设置到response中response.addCookie(readCookie);//转发到product_info.jsprequest.getRequestDispatcher("product_info.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

3.在请求的过程中 用URL 携带一个方法的名称给服务端。(你需要执行哪个方法名就用哪个方法)

自定义 BaseServlet,通用Servlet的抽取,模块化开发Servlet相关推荐

  1. java servlet init方法_JSP开发Servlet重写init()方法实例详解

    jsp开发servlet重写init()方法实例详解 写一个servlet时,有时需要我们重写该servlet的初始化方法,然后,究竟是重写init(servletconfig config),还是重 ...

  2. 【JavaWeb】Servlet系列——响应HTML代码、Servlet连接数据库、IDEA开发Servlet程序、Servlet对象的生命周期、GenericServelet适配器模式

    文章目录 10 向浏览器响应一段HTML代码 11 在Servlet中连接数据库,怎么做? 12 在集成开发环境当中开发Servlet程序 12.1 集成开发工具很多,其中目前使用比较多的是: 12. ...

  3. 使用IDEA开发Servlet程序

    JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...

  4. 如何开发 Servlet 程序

    文章目录 如何开发 Servlet 步骤 1:写一个类 步骤 2:编译 步骤 3:打包 步骤 4:部署 步骤 5:启动服务器 步骤 6:访问 servlet Servlet 开发示例 不使用 IDE ...

  5. 浅析:前端模块化开发规范

    浅析:前端模块化开发规范 早期的模块化解决方案 NameSpace:命名空间模式 匿名闭包:IIFE模式 模块模式:IIFE+依赖传参 ES6之前的模块化解决方案 CommonJS模块化规范 AMD模 ...

  6. 【原创】【推荐】《ASP.NET 3.5+SQL Server网站模块化开发全程实录》出版记

    进过半年多的努力,<ASP.NET 3.5+SQL Server网站模块化开发全程实录>一书终于得以由清华大学出版社顺利出版. 第一次出版此类图书,不免其中会有诸多纰漏,还望广大读者不吝指 ...

  7. 初识ABP vNext(9):ABP模块化开发-文件管理

    点击上方蓝字"小黑在哪里"关注我吧 创建模块 模块开发 应用服务 运行模块 单元测试 模块使用 前言 在之前的章节中介绍过ABP扩展实体,当时在用户表扩展了用户头像字段,用户头像就 ...

  8. 【模块化开发】之 模块化概述

    项目说明 模块化开发,是当下最重要的前端开发范式之一.模块化只是一个思想.一个理论. 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:内容较多,建议通过左侧导航栏进行阅读 模块化过程 早期模块化完全依 ...

  9. Js模块化开发的理解

    Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...

最新文章

  1. 算法导论笔记:17摊还分析
  2. jQuery的each()方法
  3. 项目经理如何把工作简单化
  4. Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
  5. MYSQL导入导出.sql文件
  6. vue弹出alert_vue.extend实现alert模态框弹窗步骤详解
  7. Pyinstaller 打包Pyside2 报错qt.qpa.plugin
  8. 让读书的人面上有光:亚马逊Kindle青春版上市
  9. 成为一名二进制分析师需要用到的Linux二进制分析工具有哪些?
  10. dnf服务器维护充钱能到账吗,DNF付费服务器故障!上百万点券充值石沉大海,程序员别睡觉啦!...
  11. table总结insertRow、deleteRow
  12. Vue3笔记_02setup与常用的Composition API(组合式API)
  13. APP被Rejected 的各种原因翻译(转)
  14. 新的天花?高通量如何加速抗猴痘病毒化合物筛选 | MedChemExpress
  15. Python-字典学习笔记(完)
  16. 刷了一个半月算法题,我薪资终于Double了
  17. elm分类器功能_一文带你读懂线性分类器
  18. Django REST framework+Vue 打造生鲜超市(四)
  19. 数字在排序数组中出现的次数
  20. ArcHydro介绍

热门文章

  1. [笔记].Nios II 软核性能基准
  2. iOS中的三大定时器
  3. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【六】设计人脸识别的识别类...
  4. 获取滚动条所在页面位置。做一个类似TX的消息框
  5. 电脑添加打印机方法/步骤
  6. Mysql8官方分布式数据库MGR最佳实践
  7. 五个案例“熄灭”Nginx漏洞隐患
  8. linux中 查看系统属性 与 可执行文件属性 的方法
  9. 2011年1月28日早会资料「招き猫」(汉语版)
  10. 关于Eclipse中各个文件(*.java *.jsp *.xml)文字大小的设定。