优化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-Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- LEETCODE —— Maximum Subarray [一维DP]
Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...
- .net frameworkAPI文档下载地址
http://www.msdn.hk/html/2014/5.html VS2013 ILdasm 反编译工具安装在下面地址里了 C:\Program Files (x86)\Microsoft SD ...
- Eclipse中Sever启动成功,但tomcat无法管理页面无法访问。
- Lab_2_SysOps_VPC_Linux_v2.5
System Operations - Lab 2: Configuring a Virtual Private Cloud with Amazon VPC - Linux - 2.5 ======= ...
- APS-C画幅与全画幅
本次对比将通过视角.景深.暗角.细节等几个方面来展现APS-C画幅与全画幅的差别.希望这篇帖子中的一些说明,能对一些纠结在APS-C画幅 与全画幅之间的朋友有所帮助与参考. 同等焦距下APS-C画幅与 ...
- modelsim操作流程
1.File->Change Directory2.File->New->Library 在弹出的对话框中选择 a new library and a logical mapping ...
- 【学】jQuery的源码思路6——增加each,animaion,ajax以及插件机制
each() 插件机制 animation ajax //each() //这里第一个参数指定将this指向每次循环到的那个元素身上,而第三个参数element其实就是this本身所以和第一个参数是一 ...
- Android Event
2016-10-11 http://p.codekk.com/detail/Android/wcy10586/androidEvent https://my.oschina.net/u/191330/ ...
- 使用composer管理php项目
composer global require "fxp/composer-asset-plugin:~1.1.1" composer create-project --prefe ...