本次学习总结是在上一次文章中的进一步提高,提高方面有以下就几个方面;
一.数据库层
二.servlet层
三.web网络请求层
四.一些学习补充
一.数据库层
目前很多app 都有分页和查询物品列表的功能,这里我们就这个来补充一些数据库查询和模型如何设计,这里只提供大致学习思路和方向。
分页查询
1.首先查询总数
2.传递给数据库 当前页,和一页的数量,和查询条件
3.数据库需要用到关键字,like 和limit
like ‘%百事%’ 某个字段包含所有百事的条件的数据;
limit ?,?,第一个是开始查询位置,第二个是开始位置+1到多少。
例子
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
//定义参数
List<Object> prmts = new ArrayList<>();
//查询的sql语句
String sql = "select * from product where 1=1";
//条件
if(category!=null && !"".equals(category)){
sql += " and category = ?";
prmts.add(category);
}
//分页
sql += " limit ?,?";
int start = (currentPage - 1) * pageCount;
prmts.add(start);
prmts.add(pageCount);
//start 开始在多少个的位置,到这页结束
return qr.query(sql, new BeanListHandler<Product>(Product.class), prmts.toArray());
二.servlet层 这里主要要讲一下,servlet封装,有时我们的一个servlet 将一类功能封装在一起,例如用户注册,登录,注销,等功能放在一起。这里首先我们先来了解一下过滤器,和监听器;
https://www.cnblogs.com/cxyzyh2017/p/6555869.html
这里我过滤器 我们就可以做个简单的例子
1.将编码设置直接放在里面,方便调用;
2.验证是否登录
下面我们来说一下,servlet简单封装,设置一个BaseServlet
@Override
protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
//1.方法名
String action = request.getParameter("action");
try {
Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
//通过反射拿到方法进行调用
method.invoke(this,request,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
这样我们在html 表单提交action 可以这样写
<form action="${pageContext.request.contextPath}/user?action=login" method="post">
方便使用
三.web网络请求层
之前请求基本都是放到了servlet层,我们了解一下ajax和jquery
https://blog.youkuaiyun.com/u011583316/article/details/81431233
因为vue的强大,虽然现在这个两种强大的请求封装也逐渐被淘汰了,但是作为后端的人员还是需要了解了解
vue 后面我们在学习讨论,基础暂时不写哈。
四.一些学习补充
1.文件的下载上传
提供form表单,method必须是post
form表单的enctype必须是multipart/form-data
提供input type="file"类的上传输入域
这里我们需要用到第三库 fileupload
fileupload是由apache的commons组件提供的上传组件。它最主要的工作就是帮我们解析request.getInputStream()。
使用fileupload只需要2个jar包 commons-fileupload.jar,核心包;commons-io.jar,依赖包
2.注解
注解给程序看,用于描述程序如何运行及在什么阶段来运行。
注解在实际开发中,最大的功能是用于替换配置文件。
可以通过反射来让注解具有功能。
注解的格式: @xxxx
注解它的本质就是一个接口,这个接口需要继承 Annotation接口
元注解:
只能用在注解上的注解叫做元注解。(即:用于修饰注解的注解)