优化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 ...
随机推荐
- LeetCode-Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- [转]DB2 load参数
本文持续更新,LOAD如何提高parallelism.LOAD SHRLEVEL CHANGE的性能提高. =========================== Every once in a wh ...
- 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层
View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...
- asp.net教程:GridView导出到Excel或Word文件
asp.net教程:GridView导出到Excel或Word文件</ br> 在项目中我们经常会遇到要求将一些数据导出成Excel或者Word表格的情况,比如中国移动(我是中国移动用户) ...
- 配置点云库PCL时遇到的问题
配置PCL基本参照PCL中国官网教程 http://www.pclcn.org/study/shownews.php?lang=cn&id=34 配置点云库时遇到的问题(基于win8 64位, ...
- android 代码生成selector drawable
public static StateListDrawable makeSelector(Context context, int idNormal, int idPressed, int idFoc ...
- sql 中 left join 的使用
left join .是以左表为基础,查询右表的值.如果在右表中没用没有数据,则为NULL. 这里有三张表. 线路bs_line:id,name(id主键) 线路段bs_seg:id,l_id,nam ...
- linux 安装beyond compare
安装好后,在终端运行bcompare 就ok
- 数据结构与算法(1)支线任务3——Largest Rectangle in Histogram
题目如下:(https://leetcode.com/problems/largest-rectangle-in-histogram/) Given n non-negative integers r ...
- C++11 lambda的理解
C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -> ret { body } (1) [ ...