优化servlet
在最开始的时候我们写一个servlet(LoginServlet)对应一个请求(Login.jsp),这样的话就会产生很多的servlet,使其以后维护变得麻烦,所以我们可以考虑将同一类型(Login.jsp,Regist.jsp等等都看作一个用户类)的请求用一个servlet(UserServlet)处理,然后将把关于User的请求封装为一个个的方法(login(),regist()),例如:
public class UserServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String methodName = request.getParameter("method"); //jsp中获取的 <form action="client/UserServlet?method=login" method="post">
if ("login".equals(methodName )) { //被判断的数据放在后面,这样可以避免发生空指针异常
login(request, response);
}else if ("regist".equals(methodName )) {
regist(request, response); //调用regist方法
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request, response);
}
protected void login(HttpServletRequest request, HttpServletResponse response) {...} //登录
protected void regist(HttpServletRequest request, HttpServletResponse response) {...} //注册
........
}
写完之后发现,如果有删除用户(delete)的操作,就还需要再增加else if 语句,这样的又有太多的if--else判断语句,因此可以采用反射的技术,动态的获取当前方法的对象调用要执行的方法,所以继续优化:
public class UserServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String methodName = request.getParameter("method"); //jsp中获取的 <form action="client/UserServlet?method=login" method="post">
try {
Method method = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
method.setAccessible(true);
method.invoke(this, request, response); //因为login、regist方法的有两个参数,分别是request和response
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request, response);
}
protected void login(HttpServletRequest request, HttpServletResponse response) {...} //登录
protected void regist(HttpServletRequest request, HttpServletResponse response) {...} //注册
........
}
完毕之后,发现如果有BookServlet,这样的其它一些servlet还需要进行此类的判断,所以可以考虑把上面的doGet(),doPost()提取出来封装成为一个公共的类(假如是BaseServlet),这样的话,有类似操作的servlet都可以继承这个类BaseServlet,因此上面的就可以写成:
PS:BaseServlet只是一个功能类,不会被访问,所以创建为一个普通的class就行,然后extends HttpServlet。
public class BaseServlet extends HttpServlet {
//上面的doGet()和doPost()方法
}
public class UserServlet extends BaseServlet{
protected void login(HttpServletRequest request, HttpServletResponse response) {...} //登录
protected void regist(HttpServletRequest request, HttpServletResponse response) {...} //注册
........
}
//如果有BookServlet 等等servlet直接继承BaseServlet即可
-------------------------------------------------------------------------------------------------------------------------------------------------------------
优化servlet的更多相关文章
- 利用反射优化Servlet抽象出父类BaseServlet
在编写servlet的时候发现每个servlet里面的doPost方法都如: protected void doPost(HttpServletRequest request, HttpServlet ...
- 优化Servlet:(利用反射的思想)
1.创建BaseServlet (重写父类的service方法) package com.learning.web.servlet; import java.io.IOException; impor ...
- BaseServlet优化Servlet,实现类似struts2的一些简单效果
package cn.itcast.web.servlet; import java.io.IOException; import javax.servlet.ServletException; im ...
- Maven项目- Servlet的抽取和优化 java.lang.NoSuchMethodException 的解决方法
优化servlet,减少servlet的数量,便于开发与维护.现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,BaseServlet的抽取和优化,相当于在数据库中一张表对应一个 ...
- JavaWeb笔记(二)Servlet
Tomcat目录简介 bin--可执行文件 conf--配置文件 lib--依赖jar包 logs--日志文件 temp--临时文件 webapps--默认项目部署路径 work--存放运行时的数据 ...
- Spring容器
1.Spring简介: a)Spring春天 b)官网:https://spring.io c)设计理念:轮子理念,不要重复创造轮子: d)Spring可以被理解为一个容器,用于管理其他的框架: e) ...
- Java Web开发基础(2)-JSP
上一篇博我粗略的介绍了一下Servlet.粗略是由于博主也刚刚学习这部分的内容,还不是非常懂所以无法讲的非常精细.可是本着二八原则,我还是先继续学习.所以,这篇博客接着JSP的内容.由于.这两个内容关 ...
- Springcloud 配置 | 史上最全,一文全懂
Springcloud 高并发 配置 (一文全懂) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Spring ...
- SpringBoot2.0总结
与SpringCloud关系 与SpringMVC关系 与JFinal区别 常用注解: @RestController @EnableAutoConfiguration @ComponentSc ...
随机推荐
- Membership基本用法
MemberShip简介: Membership是Asp.Net框架,用于管理网站的用户Membership,角色Roles以及配置信息Profile. System.Web.Security.Mem ...
- JSPatch 实现原理详解
原文地址https://github.com/bang590/JSPatch/wiki/JSPatch-%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E8%AF%A6%E8 ...
- css3 animation实现风车转动
项目中经常有用到动画效果,比如Loading.风车转动等等.最简单的办法是使用gif,但是gif在半透明背景下有白边,体验不友好,好在现在可以使用css3的anmiation来实现动画效果,极大的提升 ...
- 第一个Struts2程序之HelloWorld
1.Struts2 简介 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与St ...
- B-index、bitmap-index、text-index使用场景详解
索引的种类:B-tree索引.Bitmap索引.TEXT index1. B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树.B-tree 结构可以显著减少定位 ...
- C++工程目录架构
项目目录结构的问题基本上是个仁者见仁,智者见智的问题,只要自己用着顺手,使用什么样的目录组织结构是没有什么大碍的.当然如果项目很大,参与的人员很多,那么合理的组织一下目录结构还是会有很大的益处的.不同 ...
- [Spring MVC] - view的redirect和forward
可以通过redirect/forward:url方式转到另一个Action进行连续的处理.可以通过redirect:url 防止表单重复提交 .写法如下:return "forward:/o ...
- 关于Git的网址
25个 Git 进阶技巧:[http://www.imooc.com/article/1089] Git版本控制与工作流:[http://www.imooc.com/article/1068]
- 测试dockerfile
测试dockerfile是否ok(比如我的Dockerfile在deploy目录下) docker build -t my_image -f deploy/Dockerfile . docker im ...
- iOS开发项目之MVC与MVVM
MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的最大的优点在于其概念简单,易于理解,几乎任何一个程序员都会有所了解,几乎每一所计 ...