通用的servlet
1 通用的servlet实现的原理
当页面向servlet发起请求时携带一个参数,我们的所有servlet继承自通用的BaseServlet,通用的servlet在取得参数后根据参数值执行子类servlet中的对应方法。

2 实例
2.1 目录结构

2.2 BaseServlet.java
package com.zhujunwei.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;
/**
* 接收要请求servlet所携带的方法名称,根据方法名称到相应的servlet去执行方法
* @author zhujunwei
* 2019年2月27日 下午11:18:13
*/
public class BaseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// localhost:8080/ServletDemo?method=addStu
String method = req.getParameter("method");
if (null == method || "".equals(method) || method.trim().equals("")) {
method = "execute";
}
// 注意:此处的this代表的是子类的对象
// 子类对象字节码对象
Class<? extends BaseServlet> clazz = this.getClass();
try {
// 查找子类对象对应的字节码中的名称为method的方法.这个方法的参数类型是:HttpServletRequest.class,HttpServletResponse.class
Method md = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
if(null!=md){
String jspPath = (String) md.invoke(this, req, resp);
if (null != jspPath) {
req.getRequestDispatcher(jspPath).forward(req, resp);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 默认方法
public String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
return null;
}
}
2.3 ServletDemo.java
package com.zhujunwei.servlet ;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ServletDemo")
public class ServletDemo extends BaseServlet {
private static final long serialVersionUID = 1L;
public ServletDemo(){}
public String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("添加学生");
return "test.html" ;
}
public String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("删除学生");
return "test.html" ;
}
public String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("检查学生");
response.getWriter().println("zzz");
return null ;
}
}
2.4 index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery-3.3.1.min.js" type="text/javascript"></script>
</head>
<body>
<form action="ServletDemo?method=addStu" method="post">
用户<input type="text" name="username" />
<button>提交</button>
</form>
<a href="ServletDemo?method=delStu">删除学生</a><br>
<button onclick="fu()">按钮</button>
</body>
<script>
function fu() {
$.post("ServletDemo", {
"method" : "checkStu",
"user" : "tom"
}, function(data) {
alert(data);
});
}
</script>
</html>
2.5 test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
test
</body>
</html>
2.6 运行结果

可以看到,可以根据不同的方法名称执行不同的方法。
(有时候那个删除不执行,我也不知道为啥,以后解决。)
通用的servlet的更多相关文章
- Servlet和JSP
Servlet 一.Servlet 的生命周期. servlet 有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet 接口 的 ...
- [转]jsp与servlet的区别联系
原文地址:http://bbs.itheima.com/thread-28972-1-1.html Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servle ...
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- Servlet工作原理(转)
Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...
- Servlet、Struts2、SpringMVC执行流程
Servlet 有以下四个阶段: 1.加载和实例化 Servlet容器负责加载和实例化Servlet. 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Ser ...
- 20160314 Servlet 入门
一.Servlet 1.sun提供的一种动态web资源开发技术.本质上就是一段java小程序.可以将Servlet加入到Servlet容器中运行. *Servlet容器 -- 能够运行Servlet的 ...
- 图解JSP与Servlet的关系
Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet, ...
- JavaWeb 后端 <二> 之 Servlet 学习笔记
一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public v ...
- 09-Http & Servlet
Http协议&Servlet Http协议 什么是协议 > 双方在交互.通讯的时候, 遵守的一种规范.规则. http协议 > 针对网络上的客户端 与 服务器端在执行http请求的 ...
- Http协议&Servlet
http协议 针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西. 版本 ...
随机推荐
- Kafka常用命令总结
1.清空某个topic数据 需要在service设置delete.topic.enable=true ./bin/kafka-topics.sh --zookeeper 172.23.75.105:2 ...
- 使用guava的cache实现缓存
一.maven <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Linux驱动---字符设备
目录 一.基础简介 1.1.Linux设备驱动分类 1.2.字符设备驱动概念 二.驱动基本组成 2.1.驱动模块的加载和卸载 2.2.添加LICENNSE以及其他信息 三.字符设备驱动开发步骤 3.1 ...
- .Net Core3.1 集成Log4net
1.准备 首先nuget添加下引用 Microsoft.Extensions.Logging.Log4Net.AspNetCore 目前的版本为v3.1.0 ,添加完成后我们开始注册. 2.注册 2 ...
- typecho引入五秒盾,缓解服务器压力
功能是:对访客的访问频率会先一步判断,根据用户自定义的范围,将频率过高的访客跳转向127.0.0.1,而没有达到频率的访客则会进行cookies验证,这样更大程序的对恶意流量攻击进行拦截,并且有效缓解 ...
- Ubuntu下如何管理多个ssh密钥
Ubuntu下如何管理多个ssh密钥 前言 我一直在逃避这个问题,误以为我能够单纯地用一个 ssh 走天下. 好吧,现实是我不得不管理多个 ssh 做,那就写个博客总结一下吧. 查阅后发现前人已经 ...
- 如何写自己的springboot starter?自动装配原理是什么?
如何写自己的springboot starter?自动装配原理是什么? 官方文档地址:https://docs.spring.io/spring-boot/docs/2.6.13/reference/ ...
- 如何在 PostgreSQL 中运行 TLS 回归测试
概述 本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试. Postgres 回归测试 每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL ...
- substring( )的两种用法?
xx.substring()括号中带的参数不一样,效果就会有很大的区别 1.xx.substring(0,2)表示取第一个和第二个字符(0,1,2表示第一.二.三个字符,含头不含尾的原则就只包含第一. ...
- BUUCTF---达芬奇的密码
题目 达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2 ...