前言
为什么需要分页?
为什么需要一个Servlet实现多个请求
一、为什么需要分页?
数据量少的话可能看不出什么区别,但当数据多起来的时候不使用分页就会导致用户面对成千上万的数据,不利于用户的使用,也许你会说用户算什么不在乎等等,那么你就会遇到第二个问题就是服务器它可扛不住这么多的请求,及其浪费服务器的资源。
二、分页的SQL语句
1.MySQL
MySQL数据库主要是通过Limit语句来进行分页
2.Oracle
在Oracle数据库中,分页方式每页MySQL那么简单,它需要使用rownum来实现
示例:
查询1到10条记录(news为表名)
第一种方法
select * from (
select a.*, rownum rn
from (select * from news) a
where rownum <= 10
)
where rn >= 1
第二种方法
select * from (
select a.*, rownum rn
from (select * from news) a
)
where rn between 1 and 10
以上的两种写法在大多数的情况下,第一种比第二种查询的效率要快
三、Servlet实现多个请求
1.为什么需要一个Servlet实现多个请求
默认情况下一个Servlet只能处理一个请求,写在doGet
或是doPost
的方法中。这样写的话代码量不对可能没什么,但需要实现的功能越多就越能看出一个请求对应一个Servlet的话,就会看出来一个问题,那就是会产生大量的Servlet文件,造成项目不清晰。
解决方法就是使用反射实现一个Servlet处理多个请求
public class BaseServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 完成方法分发
// 1.获取请求路径
String uri = req.getRequestURI();
// 2.获取方法名称
String methodName = uri.substring(uri.lastIndexOf('/') + 1);
// 3.获取方法对象method
try {
// 忽略访问权限修饰符,获取方法
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
// 4.执行方法
// 暴力反射
// method.setAccessible(true);
method.invoke(this, req, resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
使用方式
在使用的时候继承上面的BaseServlet即可
@WebServlet("/new/*")
public class NewsServlet extends BaseServlet {
public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 代码块
}