在Java Web学习的初期,开发的小项目几乎都是JSP+Servlet+JDBC,长期开发下来,会发现当业务逻辑设计的接口一多的时候,充当控制器的Servlet也会越来越多,但是处理的业务逻辑相对单一。后来学习Struts2或者SpringMVC,发现它们处理起来优雅得多,但是配置起来也比纯的Servlet要繁琐,对于经常做小项目的我来说有点大材小用了,于是我根据前人的经验抽离了一个BaseServlet,用反射的机制来处理请求,这样处理业务逻辑的Servlet要相对简单的多,废话不说,把自己使用的一套拿出来晒晒。

BaseServlet

由于服务器端经常是用JSON与Android和iOS客户端进行交互,所以这里返回的就是JSON数据

//这个抽象类,BaseServlet类不需要在web.xml中进行配置
public abstract class BaseServlet extends HttpServlet {// final 防子类复写public final void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public final void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1、获得执行的方法名String methodName = request.getParameter("method");// 默认方法if (methodName == null) {methodName = "execute";}System.out.println("BaseServlet : " + this + " , " + methodName);try {// 2、通过反射获得当前运行类中指定方法,形式参数Method executeMethod = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);// 3、反射执行方法String result = (String)executeMethod.invoke(this, request, response);// 4、将json数据返回response.getWriter().write(result);} catch (NoSuchMethodException e) {throw new RuntimeException("请求的方法[" + methodName + "]不存在");} catch (Exception e) {e.printStackTrace();throw new RuntimeException("服务器异常", e);}}/*** 此方法用于复写,方便子类编程,默认执行方法*/public void execute(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}
}

真正处理业务逻辑的Servlet

需要做的就是继承上面的BaseServlet,然后根据业务需求写自己的方法即可,乍一看像SpringMVC,但是要注意这里的方法名和返回值,方法名决定了请求时的method参数的值,返回值由于是JSON,所以用的是String。

public class UserServlet extends BaseServlet {public String users(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ArrayList<User> users = new ArrayList<User>();for (int i = 0; i < 10; i++) {User user = new User(i, "zhangsan" + i, i + 10, "wukong" + i);users.add(user);}Gson gson = new Gson();return gson.toJson(users);}
}==========================================================
//自定义的一个PO
public class User {private int id;private String name;private int age;private String nickname;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public User(int id, String name, int age, String nickname) {this.id = id;this.name = name;this.age = age;this.nickname = nickname;}
}

部署Servlet

将自己的业务UserServlet部署到web.xml,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>UserServlet</servlet-name><servlet-class>test.app.api.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/UserServlet</url-pattern></servlet-mapping></web-app>

访问Servlet

部署并启动tomcat以后,打开浏览器访问:http://localhost/AppTestAPI/UserServlet?method=users
结果如下:

返回JSON结果.png

Java Web之BaseServlet的抽取相关推荐

  1. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  2. 书城管理系统(Java web)

    书城管理系统(Java web) 书城项目第一阶段:表单验证 验证用户名:必须由字母,数字下划线组成,并且长度为 5 到 12 位 验证密码:必须由字母,数字下划线组成,并且长度为 5 到 12 位 ...

  3. Java Web 网络商城案例演示五(用户激活)

    Java Web 网络商城案例演示五(用户激活) 1.用户激活 2.登录 3.退出 4.抽取公共页面 5.查询所有分类 6.首页热门商品_最新商品显示 7.商品详情显示 8.基础分页操作 9.首页分类 ...

  4. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    写在前面: 本文是转自:http://www.oschina.net/question/12_52027  的文章,如果要求删除,第一时间联系我立即删除! Web框架是开发者在使用某种语言编写Web应 ...

  5. 初学Java Web开发,请远离各种框架,从Servlet开发

    [转载自红薯,原帖地址]http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. ...

  6. java web不用框架_初学javaweb,远离各自框架

    OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项 ...

  7. 基于Java Web的在线考试系统的实现

    摘  要 随着互联网的发展,教育的方式逐渐步入信息化.智能化,网络教育逐渐成为教育未来发展的重要趋势,在线考试系统成为教育成果考察的主流方向.在线考试充分利用现代信息化技术的优势,使考试更方便.更高效 ...

  8. java web 开发

    Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处理有关,形成一个基础,在开发别的应用项目的时候则可以从这 ...

  9. 常用的Java Web框架简介

    Web框架是人们在使用某种语言编写Web应用服务端时关于架构的最佳实践. 有些Web框架是从实际的Web项目抽取出来的,也就是说,做一个具体的应用项目时,采取的架构比较理想,就把这部分和领域无关,而仅 ...

最新文章

  1. printf()详解之终极无惑-转载
  2. 学习笔记(二)——CSS基础
  3. oracle夜未眠之一增删改查
  4. 3月16日 winform
  5. 分享实录 | 企业CICD规模化落地浅析
  6. c语言08,标准C语言08_01.doc
  7. ubuntu 禁用透明大页_MySQL InnoDB 透明页压缩(Page Compression)
  8. CSS3实现小黄人动画
  9. java中的文件处理io_Java的IO前奏曲:文件操作类之___File
  10. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)
  11. [转载] python中set函数是什么数据类型_Python基本数据类型-list-tuple-dict-set详解
  12. GridView 分页导航
  13. GIS案例练习-----------第九天
  14. C语言学习资料----快速排序
  15. 110kv变电所无功补偿技术的研究
  16. cmos逻辑门传输延迟时间_MOS管以及简单CMOS逻辑门电路原理图解析
  17. 使用css、jquery实现一个云音乐播放器
  18. 大厂的安卓技术面试是酱紫的
  19. ROS机器人控制 —— 键盘方向控制
  20. 【百度地图】折线图平面图

热门文章

  1. JavaScript面向对象——深入理解寄生组合继承
  2. ionic4集成高德地图踩坑(二)
  3. 2014 Container技术大会:未来Linux Container会是PaaS平台的核心
  4. OpenCV: kalman滤波的代码段
  5. java中map比较大小_java中对map根据value进行排序
  6. 如何设计大型游戏服务器架构?
  7. MySQL三层逻辑架构
  8. Maven学习-优化和重构POM
  9. leetcode 141. Linked List Cycle
  10. js函数的内部属性---arguments,callee,caller